You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让onEdit脚本适配符合命名规则的所有谷歌表格及工作表

适配onEdit脚本到指定命名规则的谷歌表格和工作表

核心思路

用正则表达式分别匹配谷歌表格(Spreadsheet)和工作表(Sheet)的名称,替代原脚本中的固定名称判断,实现规则内的所有表格和工作表自动适配。

修改后的完整代码

function onEdit(e) {
  // 正则表达式:匹配"Period (数字)_两位年份 Theoretical"格式的表格名称
  const spreadsheetNameRegex = /^Period \(\d+\)_\d{2} Theoretical$/;
  // 正则表达式:匹配"完整月份英文-两位年份"格式的工作表名称(如January-24)
  const sheetNameRegex = /^(January|February|March|April|May|June|July|August|September|October|November|December)-\d{2}$/;
  
  // 获取事件相关对象,替代getActive系列方法(更高效且符合事件触发规范)
  const ss = e.source;
  const sheet = ss.getSheetByName(e.range.getSheet().getName());
  const cell = e.range;
  const column = cell.getColumn();
  const user = e.user;
  const email = user.getEmail();
  
  // 验证条件:指定用户、编辑第7列(G列)、表格名称匹配规则、工作表名称匹配规则
  const isAuthorizedUser = email === 'example@example.com';
  const isTargetColumn = column === 7;
  const isTargetSpreadsheet = spreadsheetNameRegex.test(ss.getName());
  const isTargetSheet = sheetNameRegex.test(sheet.getName());
  
  // 任一条件不满足则终止脚本
  if (!isAuthorizedUser || !isTargetColumn || !isTargetSpreadsheet || !isTargetSheet) return;
  
  // 高亮单元格为橙色
  cell.setBackground('#ff9900');
}

关键部分说明

  • 正则表达式匹配:
    • 表格名称正则/^Period \(\d+\)_\d{2} Theoretical$/:^和$确保完全匹配;\(\d+\)匹配括号内的任意数字(期数);\d{2}匹配两位年份。
    • 工作表名称正则/^(January|February|...|December)-\d{2}$/:枚举所有英文完整月份,严格匹配"MMMM-YY"格式,避免误匹配其他命名。
  • 事件对象优化:使用e.source和e.range替代getActiveSpreadsheet()、getActiveSheet(),更适合触发器场景,避免上下文错误。
  • 条件判断简化:将多个验证条件拆分为独立变量,逻辑更清晰,便于后续调整规则。

内容的提问来源于stack exchange,提问作者India

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:42:48