如何将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,提问作者박진우
相关产品推荐
相关产品推荐

