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

如何将Google Sheets编辑触发脚本应用到工作簿内所有子工作表

原有修改方式失效的原因

  • 你将SHEET_NAME改为数组后,原代码中ss.getName() == SHEET_NAME是字符串和数组做相等判断,永远返回false,自然不会触发逻辑
  • 重复定义同一个变量会导致后面的赋值覆盖前面的,最终只有最后一个赋值的工作表名会生效

调整后的完整代码

// 配置项:如果你的日期列表头不是'입력일시',可以修改这里的取值
var DATETIME_HEADER = '입력일시';

// 传入当前工作表对象,动态获取对应表的日期列位置
function getDatetimeCol(currentSheet){
  var headers = currentSheet.getDataRange().getValues().shift();
  var colindex = headers.indexOf(DATETIME_HEADER);
  return colindex+1;
}

function onEdit(e) {  
  var ss = SpreadsheetApp.getActiveSheet();
  var cell = ss.getActiveCell();
  var dateColIndex = getDatetimeCol(ss);
  // 排除日期列不存在的情况,避免报错
  if (dateColIndex < 1) return;
  var datecell = ss.getRange(cell.getRowIndex(), dateColIndex);
  // 去掉了工作表名称匹配的判断,所有工作表满足条件都会触发
  if (cell.getColumn() == 1 && !cell.isBlank() && datecell.isBlank()) {      
    datecell.setValue(new Date()).setNumberFormat("yyyy-MM-dd hh:mm:ss");
  }
};

补充说明

  • 如果后续你需要排除部分工作表不使用这个逻辑,可以在if判断里加排除规则,比如你要排除名为汇总和模板的工作表,就把判断条件改成:
    var excludedSheets = ['汇总', '模板'];
    if (!excludedSheets.includes(ss.getName()) && cell.getColumn() == 1 && !cell.isBlank() && datecell.isBlank())
    
  • 所有需要使用该功能的工作表,都必须在表头行存在和DATETIME_HEADER取值完全一致的列名,否则不会触发时间写入

内容的提问来源于stack exchange,提问作者박진우

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:54:08