作为documentation says中, “上改变” 触发器包括其他类型的更改中编辑:
类型变化(EDIT,INSERT_ROW,INSERT_COLUMN,REMOVE_ROW,REMOVE_COLUMN,INSERT_GRID,REMOVE_GRID,格式或其他的)
如果你想在改变编辑不执行代码,使用条件,如
function onmychange(e) {
if (e.changeType != "EDIT") {
Browser.msgBox("Change that is not an edit");
}
}
这就是说,所有您提到的操作(更改已具有值的单元格中的值,在没有值的单元格中添加新值,删除单元格中的值)都是编辑,因此onEdit
是唯一的触发器你需要。
如果目标是找到进行了哪种编辑,请使用e.value
和e.oldValue
。前者具有使用简单触发onEdit(e)
当一些怪癖:
- 如果用户输入“foo”的直接(包括从外部源粘贴):e.value是“foo”的
- 如果用户糊剂“富“这是从表中的其他地方复制的:e.value是
{}
,空的对象。
- 如果用户清除的是有细胞“foo”的先前:e.value是对象
{"oldValue":"foo"}
(若用一个可安装的触发器上编辑运行,则在例2和3中,没有。酒店的“值”在事件对象的话)
为了避开上述怪癖,我使用以下命令:
function onEdit(e) {
var newValue = (typeof e.value == "object" ? e.range.getValue() : e.value);
//
}
这可以确保newValue
有新的价值,现在是在细胞。
您可能需要使用以下日志记录触发观察触发的行为:
function onEdit(e) {
e.range.offset(0, 1).setValue(JSON.stringify(e));
}
来源
2017-07-31 22:37:52
FTP
有2触发类型,(简单)https://developers.google.com/apps-script/指南/触发器/]和(可安装)[https://developers.google.com/apps-script/guides/triggers/installable]。由于Change事件没有简单的触发器,所以您必须将'onmychange()'定义为Installable触发器。你是否将它们都设置为编辑触发器?你希望它是一个更改触发器。 onEdit()是一个简单的触发器,因此您无需在Installable触发器位置中定义该触发器,因为该函数的名称足以在编辑时触发它。 –
有关触发器类型的解释,请参阅https://stackoverflow.com/questions/22389875/google-application-script-onchange-or-onedit – terrywb
onmychange()在触发器中发生变化,onEdit上我什么都没有。仍然是火,而不仅仅是一个。 当我在一处山坳改变既重视火灾
当我在空白栏BOTH火灾 伊夫试图触发变化和编辑触发器增加价值,但我不知道为什么这happends,即时通讯意识到触发类型的terrywb – Asim