2017-10-28 142 views
0

我一直試圖修改在Google表格中修改特定單元格的時間戳。我的最終目標是,如果單元格被編輯爲一個值,則修改的時間戳會反映出來,如果單元格的內容被完全刪除,則時間戳也會被刪除。我現在的劇本是這樣的:根據一個單元格中的更改修改Google電子表格中的時間戳

function onEdit() 
{ 
    var s = SpreadsheetApp.getActiveSheet(); 
    if(s.getName() == "Sheet1") { 
    var r = s.getActiveCell(); 
    if(r.getColumn() == 4) { 
     var nextCell = r.offset(0,1); 
     if((nextCell.getValue() == "" && r.value != "") || (nextCell.getValue() != "" && r.value != "")) { 
     nextCell.setValue(new Date()); 
     } else if(nextCell.getValue() != "" && r.value == "") { 
     nextCell.setValue(""); 
     } 
    } 
    } 
} 

現在,這個代碼能夠時間戳更改爲當前的任何修改單元格的情況下,但如果我完全刪除單元格的內容,時間戳不刪除,它再次改變爲當前時間戳。

回答

0

試試這個:

function onEdit() 
{ 
    var s = SpreadsheetApp.getActiveSheet(); 
    if(s.getName() == "Sheet1") 
    { 
    var r = s.getActiveCell(); 
    var rvalue=r.getValue(); 
    if(r.getColumn() == 4) 
    { 
     var nextCell = r.offset(0,1); 
     if(rvalue != "")) 
     { 
     nextCell.setValue(new Date()); 
     } 
     else 
     { 
     nextCell.setValue(""); 
     } 
    } 
    } 
} 

您也可以像這樣做:

function onEdit(e) 
{ 
    if(e.source.getActiveSheet().getName()=="Sheet1") 
    { 
    if(e.range.getColumn()==4) 
    { 
     var nextCell = e.range.offset(0,1); 
     if(e.value!="")) 
     { 
     nextCell.setValue(new Date()); 
     } 
     else 
     { 
     nextCell.setValue(""); 
     } 
    } 
    } 
} 

雖然後者是一個小更難以調試。

注意:項目代碼中只能有一個onEdit()。如果你有其他人,那麼他們都需要與適當的條件邏輯合併成一個,以防止他們不適當地進行交互。

+0

謝謝庫珀。你的程序完美工作。還有一種方法可以記錄時間戳中的變化嗎?我試圖捕捉任務之間的爭執。詳細說明,將會有一個任務的多個狀態記錄在一個單元格中。只要有人通過從下拉菜單中選擇來更改狀態,時間戳就會被修改。我想記錄這些時間戳之間的持續時間。附:我嘗試了你的回答,但由於我是新來的,我的名聲不到1,我的投票不會公開顯示。 –

+0

您可以存儲時間戳,也可以存儲已知列號的行號。然後將該信息存儲在文件或其他電子表格中,然後稍後可以回來測量任何行的時間戳之間的時間差。你可能不想在簡單的觸發器中這樣做,因爲我相信簡單的觸發器必須在30秒內結束。 – Cooper

相關問題