![](/img/trans.png)
[英]How to create a trigger programmatically for an open event in Google Apps Script
[英]Trigger an onChange event programmatically in Google Sheet Apps Script
我有兩個電子表格(我稱它們為源和目標)。 Source 電子表格包含用戶插入的數據,這些數據使用'=IMPORTRANGE' function 導入到Destination 電子表格中,Source 中的更改只會反映在Destination 中。
在目標電子表格中,有兩個工作表(工作表 1 和工作表 2)。 工作表 2 包含從源電子表格導入的數據。 雖然最后添加到工作表 2 的數據將反映在工作表 1 上。您可能想知道為什么不直接導入工作表 1 中的數據而不是工作表 2,這是因為工作表 1 包含其他信息(由用戶手動添加),即不包含在導入的數據中。
這是我所做的,使用應用程序腳本我能夠反映/附加來自工作表 2 的數據到工作表 1,唯一的問題是事件觸發。 目前,該程序只有在我點擊Apps Script中的“運行”function時才會運行。 我想要發生的是,只要將新數據導入到工作表 2,就會立即觸發事件以將數據反映到工作表 1。
以下是工作表 2 的示例:工作表 2(目標)包含導入的數據:
第二項應該已經自動添加到工作表 1 但沒有,所以我仍然需要單擊“運行” function; '=IMPORTRANGE' function 在單元格 A2 中。
這是工作表 1 的樣子:
表 1(目的地)反映了表 2 中的數據
這是我的代碼(不包含 onChange 事件的任何算法):
const ss = SpreadsheetApp.openByUrl(url);
const ws = ss.getSheetByName("Sheet 1");
function myFunction() {
const ss2 = SpreadsheetApp.openByUrl(url);
const ws2 = ss2.getSheetByName("Sheet 2");
const entryNo = ws2.getRange(ws2.getLastRow(), 1, ws2.getLastRow() - 1, 1).getValue();
const companyNo = ws.getRange(ws.getLastRow(), 2, ws.getLastRow() - 1, 1).getValue();
const company = ws2.getRange(ws2.getLastRow(), 2, ws2.getLastRow() - 1, 1).getValue();
const firstName = ws2.getRange(ws2.getLastRow(), 3, ws2.getLastRow() - 1, 1).getValue();
const surName = ws2.getRange(ws2.getLastRow(), 4, ws2.getLastRow() - 1, 1).getValue();
const address = ws2.getRange(ws2.getLastRow(), 5, ws2.getLastRow() - 1, 1).getValue();
const position = ws2.getRange(ws2.getLastRow(), 6, ws2.getLastRow() - 1, 1).getValue();
const degree = ws2.getRange(ws2.getLastRow(), 7, ws2.getLastRow() - 1, 1).getValue();
const dateHired = ws2.getRange(ws2.getLastRow(), 8, ws2.getLastRow() - 1, 1).getDisplayValue();
const department = "";
const schedule = "";
const nextCompanyNo = companyNo + 1;
const dataArray = [entryNo, nextCompanyNo, company, firstName, surName, Address,
department, position, schedule, degree, dateHired ];
ws.appendRow(dataArray);
}
我添加了一些空變量,這樣我就可以對數組中的數據進行正確的索引(這就是我能想到的)。 稍后將手動編輯這些數據。
我確實嘗試通過分配屬性為 onChange 事件添加一些代碼。
function propertiesStuff(){
PropertiesService.getScriptProperties().setProperty("A2",SpreadsheetApp.getActive().getActiveSheet().getRange("A2").getValue());
}
但是我收到一條錯誤消息:
異常:參數 (String,number[]) 與 PropertiesService.Properties.setProperties 的方法簽名不匹配。
僅當在導入的數據范圍內添加新數據時,如何以編程方式觸發 onChange 事件? 電子表格上的任何其他更改,如手動編輯數據、刪除數據、添加行等,都不會觸發 onChange 事件。
您省略了一些代碼。 您發布的propertiesStuff
function 使用setProperty
,但您的錯誤與setProperties
的調用有關。
根據文檔setProperties
有兩個參數:第一個是key: value
對的object ,第二個是可選的 boolean,標記是否應刪除其他屬性。
如果您使用的是setProperties
,那么它應該看起來像這樣:
PropertiesService.getScriptProperties().setProperties({
"A2": SpreadsheetApp.getActive().getActiveSheet().getRange("A2").getValue()
})
如果您想使用setProperty
,那么您的行是正確的,但您運行的是另一個 function,它會引發錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.