2014-12-19 66 views
1

我一直在研究一個包含多個工作表的Google電子表格,我目前的目標是能夠在兩張表單(以及我可能添加的任何未來表單)上都具有onEdit時間戳,將出現在單元格旁邊的列中(例如,如果編輯過的單元格是A1,則時間戳記出現在B1中)。通過將我在這裏找到的腳本放在一起,我已經獲得了不同程度的成功,希望它們能夠發揮出色。目前我有它sorta按照我想要的方式...Google表格時間戳onEdit範圍問題

但如果我刪除B1中新創建的時間戳,那麼它會在C1中產生一個新的時間戳,如果我刪除C1然後它出現在D1等等和等等。有沒有辦法阻止刪除單元格內容時產生的時間戳?

function onEdit(e) { 
    var s = SpreadsheetApp.getActiveSheet(); 
    var cols = [1, 3, 5] 
    if (s.getName() == "Sheet1") 
    s.getRange(e.range.rowStart, e.range.columnStart + 1) 
    .setValue(new Date()); 

    if (s.getName() == "Sheet2") 
    s.getRange(e.range.rowStart, e.range.columnStart + 1) 
    .setValue(new Date()); 
} 

回答

2

它被傳播,因爲你有那麼,一旦你刪除任何單元格的值寫入e.range.coloumnStart + 1,onEdit()將被解僱。因此該單元格將被計爲第一列,並會相對更新下一個單元格的值。要在刪除發生時停止傳播到下一個單元格,在刪除時不應更新下一個單元格值。

要做到這一點,你可以在下面的方式做,(我不知道什麼是您的具體要求,但是這個代碼會爲你的電流要求工作)

function onEdit(e) { 
    var s = SpreadsheetApp.getActiveSheet(); 
    var cols = [1, 3, 5]; 
    if (s.getName() == "Sheet3" && e.range.getValue() != '') 
     s.getRange(e.range.rowStart, e.range.columnStart+1).setValue(new Date()); 


    if (s.getName() == "Sheet4" && e.range.getValue() != '') 
     s.getRange(e.range.rowStart, e.range.columnStart+1).setValue(new Date()); 
} 
+0

令人驚歎!感謝您的詳細解釋。我現在看到發生了什麼事情!非常感謝幫助,劇本以我想要達到的確切方式工作! – redpandasuit

1

或者,你也可以嘗試:

function onEdit(e) { 
var s = e.source.getActiveSheet().getName(); 
var cols = [1, 3, 5]; 
if (s !== 'Sheet1' && s !== 'Sheet2' || cols.indexOf(e.range.columnStart) ==-1 || !e.value) return; 
e.range.offset(0,1).setValue(new Date()); 
} 

我假設你想限制衝壓到4列2和6(所以編輯在列1,3和5正在做什麼?) 如果沒有,你可以刪除「VAR的cols」和'cols.indexOf ..'-部分

+0

非常感謝您的意見!你的假設是正確的,這是我的意圖。我也給你的腳本跑!它也很完美!現在我已經有了比我需要的更多的腳本:)並且學習了這個時間戳的兩種剝皮方法!謝謝! – redpandasuit