Google Sheets删除考勤日志后如何保留人员出勤次数统计
解决Google Sheets删除考勤日志后保留累计出勤的问题
方法1:手动固化统计结果
这是最直接的临时解决方案,适合偶尔清理日志的场景:
- 选中你用
=COUNTIF(A2:A750,B2:B100)算出的累计出勤列 - 右键点「复制」,再右键选「选择性粘贴」→「值」(只保留计算后的数字,移除公式关联)
- 现在随便删除旧的考勤日志,累计出勤数不会跟着变
方法2:用独立累计表+脚本自动同步(长期维护首选)
如果需要定期清理日志又不想每次手动操作,可以用Google Apps Script自动把考勤记录同步到独立的累计表:
- 新建一个工作表命名为「累计出勤」,表头A列写「姓名」,B列写「累计出勤」
- 打开「扩展程序」→「Apps Script」,替换默认代码为以下内容:
function updateAttendance() { // 替换成你的考勤日志表名 const logSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("考勤日志"); const totalSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("累计出勤"); const logNames = logSheet.getRange(2, 1, logSheet.getLastRow()-1).getValues().flat(); const totalData = totalSheet.getDataRange().getValues(); // 把已有累计数据存成对象 const totalMap = new Map(); totalData.slice(1).forEach(row => totalMap.set(row[0], row[1] || 0)); // 累加本周考勤次数 logNames.forEach(name => { if (name) { totalMap.set(name, (totalMap.get(name) || 0) + 1); } }); // 更新累计表内容 const newRows = [["姓名", "累计出勤"]]; totalMap.forEach((count, name) => newRows.push([name, count])); totalSheet.clearContents(); totalSheet.getRange(1, 1, newRows.length, 2).setValues(newRows); // 可选:清空本周考勤日志,需要的话取消下面一行的注释 // logSheet.getRange(2, 1, logSheet.getLastRow()-1, logSheet.getLastColumn()).clearContents(); }
- 点击「运行」完成授权,之后可以设置定时触发器(左侧菜单→触发器→添加触发器),比如每周五自动运行,把本周考勤同步到累计表后,就能安全删除日志了
方法3:用QUERY函数结合历史存档表
不想写脚本的话,可以建个「历史存档」表,每次删日志前把本周数据复制到存档表,然后用QUERY合并统计:
- 把原来的
UNIQUE和COUNTIF替换成一个QUERY公式:
=QUERY({考勤日志!A2:A; 历史存档!A2:A}, "SELECT Col1, COUNT(Col1) WHERE Col1 IS NOT NULL GROUP BY Col1 LABEL Col1 '姓名', COUNT(Col1) '累计出勤'")
这个公式会同时统计「考勤日志」和「历史存档」里的所有记录,就算删除当前日志的内容,存档表的历史数据还在,累计结果不会丢失
内容的提问来源于stack exchange,提问作者Solicitly Gaming ItzzTheDream
相关产品推荐
相关产品推荐

