Google Apps Script问题:活动表格编辑后目标表格未生成时间戳
问题原因与修复方案
核心问题:简单触发器权限限制
你的onEdit属于简单触发器,这类触发器运行时无授权权限,无法调用SpreadsheetApp.openById()访问另一个独立电子表格,这就是目标表格未写入内容的根本原因。
代码修复步骤
替换为可安装触发器:
- 将原
onEdit函数重命名为recordTimestamp(名称可自定义) - 打开脚本编辑器,点击「编辑」→「当前项目的触发器」,添加新触发器:
- 选择函数
recordTimestamp - 触发事件选「从电子表格提交」→「编辑时」
- 选择函数
- 将原
修正代码冗余与细节:
- 移除未定义的
range.getRow()(无实际作用的冗余代码) - 优化变量获取逻辑,确保行号映射正确
- 移除未定义的
修复后的完整代码:
function recordTimestamp(e){ const row = e.range.getRow(); const col = e.range.getColumn(); const activeSheet = e.source.getActiveSheet(); if (col === 4 && row > 3 && activeSheet.getName() === "Week1"){ const targetSpreadsheetId = "你的目标表格ID"; // 替换为实际的目标表格ID const targetSpreadsheet = SpreadsheetApp.openById(targetSpreadsheetId); const targetSheet = targetSpreadsheet.getSheetByName("Week#1"); const timestamp = new Date(); const formattedTimestamp = Utilities.formatDate(timestamp, Session.getScriptTimeZone(), "yyyy-MM-dd HH:mm:ss"); // 写入修改日期(目标表格第2列) targetSheet.getRange(row, 2).setValue(formattedTimestamp); // 若初始日期为空,写入初始日期(目标表格第1列) if(targetSheet.getRange(row, 1).getValue() === ""){ targetSheet.getRange(row, 1).setValue(formattedTimestamp); } } }
注意事项
- 确保你拥有目标表格的编辑权限
- 首次运行
recordTimestamp函数时,需完成授权流程,否则触发器无法正常工作
内容的提问来源于stack exchange,提问作者Brian Mueller
相关产品推荐
相关产品推荐

