有一個特殊的觸發器來檢測這樣的變化:onChange
如文檔中描述的,你甚至可以以編程方式創建它:
var sheet = SpreadsheetApp.getActive();
ScriptApp.newTrigger("myFunction")
.forSpreadsheet(sheet)
.onChange()
.create();
,然後像一個函數這將在每次更改時調用,這些更改會查看行數並在更改時執行某些操作,如果更改是其他操作,則不執行任何操作。
您可以添加更多的條件來處理其他情況,例如做什麼ID行,其中刪除
function myFunction(){
var numRows = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getMaxRows();
if(ScriptProperties.getProperty('numberOfRows')){
var nRows = Number(ScriptProperties.getProperty('numberOfRows'));
if(nRows<numRows){
//do something because rows have been added in this sheet
ScriptProperties.setProperty('numberOfRows',numRows);// update value with current value
}
}
ScriptProperties.setProperty('numberOfRows',numRows);// create a start value with current value of simply update if the trigger was called for another reason
}
編輯以下Wchiquito的評論
這裏是另一個(更簡單)版本,工作得很好:
function initializeTrigger(){ // run this only once to create a trigger if necessary
var sheet = SpreadsheetApp.getActive();
ScriptApp.newTrigger("myFunction")
.forSpreadsheet(sheet)
.onChange()
.create();
}
function myFunction(e){
Logger.log(e.changeType);
if(e.changeType=='INSERT_ROW'){
// do Something
Browser.msgBox('New row(s) added');
}
}
Hav你考慮在'onChange()'事件中使用參數'changeType'中的'INSERT_ROW'嗎? – wchiquito
你是對的,沒有考慮到......隨意發佈另一個答案,你的想法更好,因爲它使用GAS直接方法。 –
你好, 我試圖將腳本集成到我的功能當somone添加或插入新行到工作表,但沒有工作......我不知道我需要把我的腳本的位置..仍然工作.. –