我正在使用Google文檔表,許多人都可以訪問它們進行編輯。我需要能夠判斷工作表是否發生更改,即添加或刪除行或列。當發生這種情況時,我可以得到一個onChange事件,但我似乎無法找到哪張表發生了變化。該事件包含對SpreadSheet object的引用,但getActiveSheet
總是返回第一張紙張,而不管哪個紙張處於活動狀態。Google文檔表onChange() - 確定哪張表發生了變化
我用三張表創建了一個新的電子表格,添加了以下腳本並授權它。
function onOpen() {
ScriptApp.newTrigger("onChange")
.forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
.onChange()
.create();
}
function onChange(e) {
Logger.log(e)
Logger.log("Name: " + e.source.getName())
Logger.log("Active Sheet: " + e.source.getActiveSheet().getName())
Logger.log("All Sheets: " + e.source.getSheets().map(function(s){return s.getName()}))
}
我去了Sheet 2並刪除了一列。日誌顯示:
[14-07-17 19:13:32:774 EDT] {changeType=REMOVE_COLUMN, source=Spreadsheet, authMode=FULL}
[14-07-17 19:13:32:861 EDT] Name: Untitled spreadsheet
[14-07-17 19:13:32:944 EDT] Active Sheet: Sheet1
[14-07-17 19:13:32:946 EDT] All Sheets: Sheet1,Sheet2,Sheet3
所以事件雖然我有表2活躍,操作隻影響表2中,傳遞到onChange處理事件似乎表明,表1是活躍的時候。
我怎樣才能找出哪張紙真的發生了變化?
原來有一對夫婦的問題已經存在:[4033](https://code.google.com/p/google-apps-script-issues/issues/detail?id=4033 ),[3926](https://code.google.com/p/google-apps-script-issues/issues/detail?id=3926&q=onChange&colspec=Stars%20Opened%20ID%20Type%20Status%20Summary%20Component% 20Owner),[3269](https://code.google.com/p/google-apps-script-issues/issues/detail?id=3269&q=onChange&colspec=Stars%20Opened%20ID%20Type%20Status%20Summary%20Component %20Owner) – Joe
@joe - 與您最接近的問題是[問題2751](https://code.google.com/p/google-apps-script-issues/issues/detail?id=2751),它也是最受歡迎的開放式,所以最有可能獲得關注。事實上,你能夠檢索'source'讓我懷疑它實際上正在被處理 - 過去有些時候,無證對象出現了([有時是顫抖的])(http://stackoverflow.com/questions/12500256 )),然後作爲功能出現。 – Mogsdad
對於任何未來發現此問題的人來說,這已修復[3926](https://code.google.com/p/google-apps-script-issues/issues/detail?id=3926)。 'e.source.getActiveSheet()'現在返回正確的表單 – Joe