WPS多维表结合灵犀AI搭建学生因病缺勤登记系统(附踩坑记录)
一、引言
这学期开学以来,学校这块每天都要登记因病缺勤的学生,我们学校的传统做法是:班主任手写纸质登记表,再录入一份电子Excel,级部手工统计缺课天数和缺勤率,最后汇总上报。每天都在重复,班主任烦、统计的人更烦。
在征集了老师们的意见后(大部分老师都反馈提交方式太繁琐),学校党支部决定把这条流程线上化,由我来牵头搭建。
我的多维表水平一般,公式和关联功能基本靠现学,所以这次直接把活儿交给了灵犀(WPS的AI助手):我负责提需求、定业务规则、验收数据,灵犀负责出方案、搭表、写公式、调API。本次任务中mimo-v2.6-pro负责任务思考与方案规划,deepseek-v4.1-flash和mimo-v2.6-flash负责任务执行。毕竟不是重代码任务,所以模型的选择比较自由一些。
这篇文章把整个实现过程和踩过的坑分享出来,给有类似需求(晨检、考勤、健康监测等日常收集)的朋友参考。这个表格还在逐步优化中,根据学校自己的需求来进行定制。
二、实现方法
1. 整体架构
最终方案是 5张数据表 + 1个收集表 + 1块仪表盘:
数据表 | 职责 |
主表 | 承接每日填报的原始记录 |
班主任名单 | 班级—班主任对照表 |
学校概况 | 按年级存固定数据(应出勤人数、男女生人数) |
缺勤率表 | 年级维度的统计中心 |
数据看板 | 指标卡片化展示 |
为什么分这么多表?这里有个设计思路:主表只管原始记录,统计一律分表。如果把缺勤率、累计天数都堆在主表里,主表会越来越臃肿,导出报表也不方便。
2. 创建主表字段
主表的字段分两类:
班主任填报的(就5项,全部打钩式选择):
登记日期
年级班级(级联选择:年级-班级)
学生姓名
缺课节次(多选:第1~8节+晚自习)
主要症状(多选:发热/咳嗽/咽痛/腹泻/呕吐/红眼/皮疹/黄疸/腮腺肿大/伤害/其它)
管理员补录的(不进填报表单):
是否就诊、疾病名称(按卫生部门的疾病代码)、目前状况、回校上课时间
另外让系统自动记录提交人、提交时间,方便追溯。
3. 配置收集表(班主任填报入口)
注意:这里有个大坑,多维表有"表单视图"和"收集表"两种收集方式,功能差别很大:
表单视图 | 收集表 | |
群发通知/定时提醒 | ❌ | ✅ |
催交未填的人 | ❌ | ✅ |
查看谁交了谁没交 | ❌ | ✅ |
要群发通知就用收集表,别用表单视图。 我一开始用的是表单视图,后来发现连定时提醒都没有,只能重建收集表。
班主任关注"金山文档"公众号后,配合收集表的群发通知功能,每天定时提醒填报,从公众号消息点进去就能填。
4. 配置公式
缺课天数。按"1节课=1学时,4学时以上计1天,不足4学时计半天"的规则:
=IF(LEN([缺课节次])>0,IF((LEN([缺课节次])-LEN(SUBSTITUTE([缺课节次],CHAR(44),""))+1)>4,1,0.5),0)(2)同一学生累计请假天数(跨行汇总):
=SUMIF([学生姓名],[@学生姓名],[缺课天数])(3)从级联字段提取年级(我的级联分隔符是短横线):
=LEFT([年级班级],FIND("-",[年级班级])-1)(4)男女分性别统计。多维表的统计公式对"条件计数"支持有限,解决办法是加两个标记字段:
=IF([学生性别]="男",1,0)
=IF([学生性别]="女",1,0)统计表里对这两个字段求和,就得到男女各自的缺勤人次了。
5. 搭建缺勤率表
每个年级一条记录,存固定数据(应出勤人数、男生数、女生数),然后通过主表的"年级关联"字段统计:
缺勤人次、男生缺勤人次、女生缺勤人次
累计缺课天数
缺勤率、缺课天数率、男生缺勤率、女生缺勤率
健康状态(公式自动标记正常/关注/预警)
一览摘要(把数字拼成人话,汇报时直接复制)
导出的时候从这张表导出,一列就是一个年级的完整健康画像。这个比较鸡肋一点,其实用好仪表盘或者应用系统,也是可以省去大量的公式应用的。
6. 配置仪表盘
维度:年级班级 / 学生姓名 / 学生性别 / 病因;指标:缺课天数、缺勤人次。图表用柱状图对比学生请假天数、饼图看性别分布、表格看年级缺勤率。另外我还建了个"病因画册"视图(Gallery),把病因记录做成卡片,翻看体验不错。但是这个好看大于好用,用处并不大。
三、使用方法
班主任:每天打开金山文档公众号推送的收集表,填姓名、勾节次、勾症状,30秒搞定;
管理员:打开多维表看仪表盘,谁交了谁没交、今天缺勤多少人一眼看清;
导出上报:从缺勤率表直接导出Excel,按年级的统计都是现成的。
历史数据自动留存(每次提交都是新记录,只增不改),随时按日期筛选、回溯。
四、踩坑记录
这部分干货最多,都是实战中真实踩出来的。有意思的是,有几个坑连AI第一轮都判断错了,靠真实数据才暴露出来。
坑1:COUNTA对多选字段无效
想数"缺课节次"勾了几节课,COUNTA([缺课节次]) 返回的不是选项个数,而是"这个单元格非不非空"(有值就返回1)。
正确做法:多选字段在公式里是逗号分隔的文本(如"第5节,第6节"),用长度差数逗号:
=LEN([缺课节次])-LEN(SUBSTITUTE([缺课节次],CHAR(44),""))+1坑2:公式里写逗号必须用CHAR(44)(最坑的一个)
公式字符串里直接写逗号,,会被公式引擎当成函数参数分隔符。症状是 IF判断失效,永远走第一个分支——明明2节课却算成1天。
排查过程:我用真实数据发现"2节课算1天",AI一开始以为是重算延迟,反复改公式都没用,最后写了个最小化测试才定位到是逗号解析问题。
结论:公式里凡是需要逗号"字符",一律用 CHAR(44) 代替。这个坑建议人手一份。
坑3:改了公式,旧记录不会重算!
修改公式字段的表达式后,已有记录的公式值保持旧值不变,只有新建记录才用新公式。这个坑太隐蔽了,改完公式看旧数据还以为没改成功。
解决办法:把公式字段删掉,重新建一个,新字段会对所有存量记录立即重算。
坑4:API读记录默认分页100条
用脚本或API拉数据时,list-records 每页默认只返回100条,要根据 page_token 翻页。我们第一次统计就因为只读了第一页,数据"缺了一小半",差点写进汇报材料,被我发现数据对不上才查出来是分页问题。
五、小结
技术层面5条经验:
要群发通知、催交,用收集表,别用表单视图;
主表管记录,统计分表管;
多选字段计数用LEN+SUBSTITUTE,逗号一律CHAR(44);
改公式要删字段重建,否则旧记录不重算;
条件计数用不上就加0/1标记字段绕过去。
和AI协作3条感受:
让AI出方案对比(比如收集表vs表单视图的差异表)再拍板,比直接执行更稳;
AI写完公式一定要在真实数据上验收,"2节课算1天"就是我一眼看出来的,AI不会主动怀疑自己算错;
踩坑经验让AI记进知识库,下次做同类系统(晨检、考勤)就不会再踩第二遍。
整套系统不用写代码,全是配置+公式。如果你也有类似需求,可以照着这个架构搭,也可以把需求直接丢给灵犀让它代劳。
这个表格还有要继续优化的地方,希望有大佬可以指点迷津,指出不足之处。
Lv.1 新人创作者