Apps Script如何捕获Sheets API修改单元格后的旧值实现变更通知
实现方案
你需要用可安装的onChange触发器替换原有的简单onEdit触发器,同时通过文档属性存储上一次A2单元格的值做对比,具体步骤如下:
步骤1:替换Apps脚本代码
删除原有onEdit代码,替换为以下代码:
// 用于响应API/外部修改的变更触发器函数 function onChange(e) { // 获取当前A2单元格的值 const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Notifications'); const currentA2 = sheet.getRange('A2').getValue().toString(); // 从文档属性中读取上一次存储的A2值 const docProps = PropertiesService.getDocumentProperties(); const oldA2 = docProps.getProperty('lastA2Value'); // 第一次运行无历史值时直接存储,不触发通知 if (!oldA2) { docProps.setProperty('lastA2Value', currentA2); return; } // 仅当值发生变更时触发弹窗 if (oldA2 !== currentA2) { Browser.msgBox(`A2值已更新:从 ${oldA2} 变为 ${currentA2}`); // 更新存储的A2值为最新值 docProps.setProperty('lastA2Value', currentA2); } }
步骤2:手动安装可安装触发器
简单触发器无法捕获API修改、也没有足够权限触发弹窗,必须手动配置可安装触发器:
- 打开你的Google Sheet,点击顶部菜单栏「扩展程序」->「Apps脚本」进入脚本编辑器
- 点击左侧菜单的「触发器」按钮(时钟图标)
- 点击右下角「添加触发器」
- 按以下参数配置:
- 选择要运行的函数:
onChange - 选择要部署的项目:默认值即可
- 选择事件来源:
电子表格 - 选择事件类型:
更改
- 选择要运行的函数:
- 点击保存,按提示完成Google账号授权即可。
补充说明
- 弹窗通知仅在你当前打开该Google Sheet页面时生效,如果需要在未打开表格时也能收到通知,可以将代码中的
Browser.msgBox替换为MailApp.sendEmail('你的邮箱地址', '表格有新更新',A2值已更新:从 ${oldA2} 变为 ${currentA2})实现邮件通知。 - 第一次运行触发后会自动初始化存储A2的基准值,后续仅当Python脚本更新后A2值和上一次不一致时才会触发通知。
内容的提问来源于stack exchange,提问作者user15005160
相关产品推荐
相关产品推荐

