You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheets删除考勤日志后如何保留人员出勤次数统计

解决Google Sheets删除考勤日志后保留累计出勤的问题

方法1:手动固化统计结果

这是最直接的临时解决方案,适合偶尔清理日志的场景:

  • 选中你用=COUNTIF(A2:A750,B2:B100)算出的累计出勤列
  • 右键点「复制」,再右键选「选择性粘贴」→「值」(只保留计算后的数字,移除公式关联)
  • 现在随便删除旧的考勤日志,累计出勤数不会跟着变

方法2:用独立累计表+脚本自动同步(长期维护首选)

如果需要定期清理日志又不想每次手动操作,可以用Google Apps Script自动把考勤记录同步到独立的累计表:

  1. 新建一个工作表命名为「累计出勤」,表头A列写「姓名」,B列写「累计出勤」
  2. 打开「扩展程序」→「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();
}
  1. 点击「运行」完成授权,之后可以设置定时触发器(左侧菜单→触发器→添加触发器),比如每周五自动运行,把本周考勤同步到累计表后,就能安全删除日志了

方法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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 22:55:14