如何让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
相关产品推荐
相关产品推荐

