App Script统计电子表格改动并记录至另一表格的问题排查
问题原因
你使用的是Google Apps Script的简单onEdit触发器,这类触发器有严格的权限限制,无法调用需要用户授权的接口。SpreadsheetApp.openById()属于需要授权才能访问跨表格资源的接口,因此编辑触发时脚本会静默失败;而手动运行时你已经完成了授权,所以计数功能正常。
解决方案
需要改用可安装的编辑触发器实现跨表计数,操作步骤如下:
- 修改原有函数名(不能保留
onEdit名称,避免和简单触发器冲突),参考优化后的代码:
function countEditCrossSheet() { // 监听当前表格的编辑操作 var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var activeCell = sheet.getActiveCell(); var col = activeCell.getColumn(); var row = activeCell.getRow(); if(col >=1 && row >=1) { // 替换为你要存储计数的目标表格ID var targetSS = SpreadsheetApp.openById('[Spreadsheet ID]'); // 替换为你要存储计数的目标工作表名称 var targetSheet = targetSS.getSheetByName('Sheet2'); var currentCount = targetSheet.getRange(2,1).getValue(); targetSheet.getRange(2,1).setValue(currentCount + 1); } }
- 配置可安装编辑触发器
- 打开需要统计编辑的原表格,点击顶部「扩展程序」-「Apps Script」进入脚本编辑器
- 点击左侧菜单栏的闹钟样式「触发器」按钮
- 点击右下角「添加触发器」,按以下规则配置:
- 选择要运行的函数:
countEditCrossSheet - 选择部署版本:Head(默认选项)
- 选择事件来源:来自电子表格
- 选择事件类型:编辑时
- 选择要运行的函数:
- 点击保存后按照页面提示完成授权即可生效
注意事项
- 务必将代码中的
[Spreadsheet ID]替换为存储计数的目标表格实际ID,工作表名称如果不是Sheet2也需要对应修改 - 可安装触发器会统计所有有编辑权限的用户的编辑操作,符合时间动作研究的统计需求
内容的提问来源于stack exchange,提问作者TOR JL
相关产品推荐
相关产品推荐

