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

如何限制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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 06:32:37