作爲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