如何限制Google Apps Script的onEdit函数仅作用于指定3个Sheet?
修改Google Apps Script实现指定Sheet双向同步限制
要让脚本仅对"Petty Cash Payments"、"Data Base"和"Pending Checks"这三个Sheet生效,只需在触发逻辑里增加允许的Sheet白名单,并在关键位置做判断过滤即可,修改后的完整代码如下:
function onEdit(e){ if (!e) throw "Do not run manually"; // 定义允许触发同步的Sheet名称列表 const allowedSheets = ["Petty Cash Payments", "Data Base", "Pending Checks"]; const activeSheetName = e.source.getActiveSheet().getName(); // 如果当前编辑的Sheet不在白名单里,直接终止执行 if (!allowedSheets.includes(activeSheetName)) return; syncNonRow(e); } function syncNonRow(e){ const src = e.source.getActiveSheet(); const r = e.range; // 保留原有的行、列限制,同时补充Sheet白名单判断(双重保险) const allowedSheets = ["Petty Cash Payments", "Data Base", "Pending Checks"]; if (!allowedSheets.includes(src.getName()) || r.rowStart == 1 || r.columnStart == 2) return; r.clear(); let id = src.getRange(r.rowStart,1).getValue(); const db = SpreadsheetApp.getActive().getSheetByName("Petty Cash Payments"); const ids = db.getRange("A:A").getValues(); let row = 0; for (row; row < ids.length; row++){ if (ids[row][0] === id) break; } row++; db.getRange(row,r.columnStart).setValue(e.value); }
关键修改说明:
- 在
onEdit函数里新增allowedSheets白名单数组,先判断当前编辑的Sheet是否在列表中,不在则直接返回,从源头阻止非目标Sheet触发同步逻辑 - 在
syncNonRow函数里补充白名单判断,作为双重保险,避免意外执行 - 移除原代码中
src.getName() == "Petty Cash Payments"直接返回的逻辑,因为该Sheet现在是允许触发同步的目标之一
内容的提问来源于stack exchange,提问作者Ankur Mathur
相关产品推荐
相关产品推荐

