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

