2014-07-17 208 views
1

我正在使用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是活躍的時候。

我怎樣才能找出哪張紙真的發生了變化?

回答

1

它看起來像更改事件isn't supposed to return 'source'即使它在日誌中。

我和你有同樣的行爲。我可以通過'on edit'獲得表格名稱,但這不符合你想要做的。

我也嘗試過使用onedit和onchange觸發器的組合,但它們不會在同一時間只觸發一個或另一個觸發器。

This is worth submitting on the issue tracker

+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

+1

@joe - 與您最接近的問題是[問題2751](https://code.google.com/p/google-apps-script-issues/issues/detail?id=2751),它也是最受歡迎的開放式,所以最有可能獲得關注。事實上,你能夠檢索'source'讓我懷疑它實際上正在被處理 - 過去有些時候,無證對象出現了([有時是顫抖的])(http://stackoverflow.com/questions/12500256 )),然後作爲功能出現。 – Mogsdad

+0

對於任何未來發現此問題的人來說,這已修復[3926](https://code.google.com/p/google-apps-script-issues/issues/detail?id=3926)。 'e.source.getActiveSheet()'現在返回正確的表單 – Joe

相關問題