如何在Google Sheets中检测单元格删除删除线格式并触发邮件通知?
解决Google表格删除线格式移除触发邮件的方案
核心思路
借助Google Apps Script的onChange触发器,结合**文档级临时缓存(Cache Service)**记录单元格的删除线状态——缓存仅存储格式标识而非敏感内容,完全符合数据管控要求,以此实现添加/删除删除线的动作区分。
具体实现步骤
- 绑定
onChange触发器到目标表格,触发事件类型选择「更改」。 - 当检测到
FORMAT类型的变更时,先获取当前操作范围单元格的删除线状态。 - 对比缓存中存储的历史状态,仅当历史状态为删除线、当前状态为无删除线时,判定为删除线移除操作,触发邮件通知。
- 更新缓存为当前最新状态,设置合理的缓存有效期(比如1小时,可根据团队使用频率调整)。
示例代码
function handleFormatChange(e) { // 仅处理格式变更事件 if (e.changeType !== 'FORMAT') return; const cache = CacheService.getDocumentCache(); const targetRange = e.source.getActiveRange(); // 用单元格A1标识作为缓存键 const cacheKey = `strike_${targetRange.getA1Notation()}`; // 获取当前单元格的删除线状态 const currentStatus = targetRange.getFontLine(); // 从缓存读取上次记录的状态 const previousStatus = cache.get(cacheKey); // 判断是否为删除线移除操作 if (previousStatus === 'line-through' && currentStatus === 'none') { // 发送通知邮件 MailApp.sendEmail({ to: '相关人员邮箱@domain.com', subject: '表格删除线格式已移除', body: `单元格 ${targetRange.getA1Notation()} 的删除线格式已被移除,请留意。` }); } // 更新缓存,有效期设为3600秒(1小时) cache.put(cacheKey, currentStatus, 3600); }
补充说明
- 缓存局限性:缓存会在过期或文档会话结束后清空,若用户两次操作间隔超过缓存有效期,可能无法准确判断状态,可根据实际场景延长有效期。
- 批量操作适配:如果用户批量修改多个单元格,需遍历范围里的每个单元格单独处理状态对比(示例为简化版,批量场景需补充循环逻辑)。
- 权限要求:首次运行脚本需手动授权邮件发送权限,确保脚本能正常触发通知。
内容的提问来源于stack exchange,提问作者AppsScripter
相关产品推荐
相关产品推荐

