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

如何让Google Sheets的onEdit函数仅作用于指定工作表'WEB Graffiti'

解决onEdit脚本仅在指定工作表生效的问题

要让脚本只在名为WEB Graffiti的工作表上运行,你不需要切换激活工作表,直接通过事件对象e获取当前编辑的工作表名称进行判断即可。以下是修改后的完整脚本:

function onEdit(e) {
  if (!e) {
    throw new Error("请通过Google表格编辑触发此函数,不要直接在脚本编辑器中运行");
  }
  // 判断当前编辑的是否为目标工作表,不是则直接终止
  if (e.range.getSheet().getName() !== 'WEB Graffiti') {
    return;
  }
  indirectTimestamp_(e);
}

/**
* 当B列被编辑且C列值为TRUE时,在T列插入时间戳
* @param {GoogleAppsScript.Events.SheetsOnEdit} e onEdit事件对象
*/
function indirectTimestamp_(e) {
  if (e.range.columnStart !== 2
    || e.range.offset(0, 1).getDisplayValue() !== 'TRUE') {
    return;
  }
  const timestampCell = e.range.offset(0, 18);
  timestampCell.setValue(new Date()).setNumberFormat('mmm" "d" "yyyy');
};

修改说明:

  • 在onEdit函数开头添加工作表名称判断:通过e.range.getSheet().getName()获取当前编辑的工作表名称,若不是WEB Graffiti则直接终止执行,不会触发后续的时间戳逻辑。
  • 移除了你之前尝试的切换激活工作表代码,因为该操作会强制切换工作表,既不符合需求也无必要——事件对象已能直接获取当前编辑的工作表信息。

你也可以把工作表判断放在indirectTimestamp_函数最开头,效果完全一致:

function indirectTimestamp_(e) {
  // 在这里添加工作表判断
  if (e.range.getSheet().getName() !== 'WEB Graffiti') {
    return;
  }
  if (e.range.columnStart !== 2
    || e.range.offset(0, 1).getDisplayValue() !== 'TRUE') {
    return;
  }
  const timestampCell = e.range.offset(0, 18);
  timestampCell.setValue(new Date()).setNumberFormat('mmm" "d" "yyyy');
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:30:44