2012-10-21 37 views
3

這似乎應該很容易,但我似乎無法讓我的任何小測試實現工作。最終目標是創建一個僅在編輯特定範圍內的單元格時運行的函數。爲了達到這個目的,我創建了一個在每次編輯時運行的函數,但是首先檢查編輯單元格的範圍是否在一定範圍內,並且如果這是真的,則只執行其餘代碼,否則只是馬上結束。如何使用onEdit事件返回已編輯單元格的範圍?

這樣做的第一步,在我看來,是要找出如何返回編輯單元格的範圍。我嘗試了各種測試。

這是當前版本中,我通過編輯電子表格進行測試:

function onEdit(e){ 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheets()[0]; 
var eRange = e.range; 
var message = eRange.getA1Notation(); 
ss.toast(message); 
} 

(輸出:敬酒不出現/沒有任何反應)

我在這裏粘貼有關其他10個版本,但我意識到這並沒有幫助。

我已經設法在我的吐司消息中返回[object Object]和[undefined],所以我知道我沒有在我的吐司函數中做出一些愚蠢的錯誤。

e.range不返回範圍嗎?那是我出錯的地方嗎?如果它返回一個範圍,我不應該能夠使用範圍中的任何方法,就像我使用了諸如「ss.getRange(」A1「)。someMethod()」之類的東西一樣嗎?還是有一些我不明白的區別?

好的,我意識到我已經在這裏問了幾個不同的問題 - 我只是想給我的思維過程更清晰的圖片,以防它糾正我的錯誤。簡單的問題是:我可以使用什麼樣的命令或方法來返回已編輯單元格的範圍?

我很抱歉問這樣一個基本問題。我真的很害怕有人會輸入正確的搜索條件組合,答案會在搜索結果的頂端出現......但我似乎無法親自找到它,所以我就在這裏。我已經嘗試了很多來自StackOverflow和舊版Google網上論壇支持論壇的代碼片段,以及我自己的很多嘗試。我發現人們在這裏提出了很多關於我的最終目標的類似問題 - 只有在編輯了一定範圍內的單元格的情況下才運行onEdit函數 - 但答案更加複雜,並且看起來適合於每個單獨的情況,不適合我。我確信答案在那裏,但我一直在尋找三連夜,並且發現了許多類似的問題,並且似乎無法讓我自己實現這些建議。感謝您對我的耐心,非常感謝您提供的任何答案!

回答

2

這裏是所採取的代碼(略有修改)from the doc

function onEdit(event){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sh = event.source.getActiveSheet(); 
    var r = event.source.getActiveRange(); 
    r.setComment("Last modified: " + (new Date())+' by '+Session.getActiveUser()); 
    ss.toast('Last cell modified = '+r.getA1Notation()+' by '+Session.getActiveUser()); 
} 
+0

非常感謝你爲你的這個幫助!您發佈的腳本完美無缺。 我確實閱讀了該頁面的介紹,並認爲它聽起來像我應該堅持「事件」文檔而不是「觸發器」文檔,因爲我不在乎它是否在活動用戶或任何其他文檔下運行,並且我想盡可能保持簡單。 你已經給了我一個完美的答案,所以可以隨意忽略這一點,但我猜想的獎金點...我有點好奇e.range在我的嘗試中稱爲什麼類型的對象,或者是什麼其他錯誤我在做,這樣我就可以避免再次犯這個錯誤。 –

+0

我重新閱讀[文檔](https://developers.google.com/apps-script/understanding_events),我理解你的提問,因爲e.range和e.value都返回'undefined',這似乎不是正常...所示的例子似乎也不起作用。我總是使用e.source ...所以我從來沒有注意到,也許有人會提供這方面的一些信息。 –

+1

我不知道任何文檔,除了從論壇中學習此知識以外,必須使用可安裝的onEdit觸發器(與簡單的onEdit()觸發器相反)來訪問e.range和e.value參數。我不確定這是否按預期工作或錯誤,但我認爲這是一段時間以來的方式。 – AdamL

相關問題