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

Google Sheets出勤时长统计:需支持列头日期判断的数组公式

解决方案

公式方案(无需辅助列)

直接使用BYROW结合SUMPRODUCT实现逐行计算,无需额外辅助列。假设学生出勤数据位于A2:Z区域,第一行A1:Z1为日期列头,在结果列(比如AA2)输入以下公式即可自动填充所有行:

=BYROW(A2:Z, LAMBDA(row, SUMPRODUCT(
  --REGEXMATCH(row, "^$|^T$|.*all.*|.*no.*"),
  IF(WEEKDAY(A1:Z1)=6, 1.33, 0.53)
)))

公式说明:

  • BYROW(A2:Z, LAMBDA(row, ...)):遍历每一行学生数据,对每行单独计算
  • REGEXMATCH(row, "^$|^T$|.*all.*|.*no.*"):判断单元格值是否为空、等于"T"、包含"all"或"no",返回布尔值
  • --:将布尔值转换为1(符合条件)或0(不符合)
  • IF(WEEKDAY(A1:Z1)=6, 1.33, 0.53):根据列头日期判断是否为周五(WEEKDAY返回6代表周五),返回对应课时
  • SUMPRODUCT:将每行的符合条件标记与对应课时相乘后求和,得到该行总时长

脚本方案(适用于复杂批量处理)

如果需要更灵活的逻辑(比如后续扩展规则),可以使用Google Apps Script实现:

  1. 打开你的表格,点击「扩展程序」→「Apps 脚本」
  2. 替换默认代码为以下脚本:
function calculateTotalHours() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const dataRange = sheet.getDataRange();
  const values = dataRange.getValues();
  const headerDates = values[0].map(date => date instanceof Date ? date : null);
  const result = [];

  // 遍历学生行(从第二行开始)
  for (let i = 1; i < values.length; i++) {
    const row = values[i];
    let totalHours = 0;
    // 遍历每行的出勤单元格
    for (let j = 0; j < row.length; j++) {
      const cellContent = (row[j]?.toString() || "").trim();
      // 判断是否符合统计条件
      if (cellContent === "" || cellContent === "T" || cellContent.includes("all") || cellContent.includes("no")) {
        const date = headerDates[j];
        // 判断是否为周五,计算对应课时
        const hours = date && Utilities.formatDate(date, Session.getScriptTimeZone(), "u") === "6" ? 1.33 : 0.53;
        totalHours += hours;
      }
    }
    result.push([totalHours]);
  }

  // 将结果写入表格最后一列的下方
  sheet.getRange(2, sheet.getLastColumn() + 1, result.length, 1).setValues(result);
}
  1. 点击运行按钮,授权后即可自动计算所有学生的总出勤时长并写入新列

脚本说明:

  • 自动识别表格中的日期列头,判断每个出勤单元格对应课时
  • 支持批量处理所有行,无需手动填充公式
  • 可根据需求修改条件判断或课时数值

内容的提问来源于stack exchange,提问作者Beta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:10:34