簡體   English   中英

Function 為單元格更新時的時間戳 Javascript | 床單

[英]Function to timestamp when cell is updated Javascript | Sheets

當狀態放入列 C 時,我有一些代碼試圖創建時間戳。 狀態也由腳本更新/寫入。 當該狀態由腳本寫入時,它不會自動標記狀態。 有什么辦法可以改變這個嗎?

例如,如果我在它標記的狀態中寫“錯誤”,但如果腳本將其更改為錯誤,它不會標記。

function onEdit(e) {
  var range = e.range;
  var column = range.getColumn();
  Logger.log('edited');
  if (column == 3){
    var timestamp = new Date();
    var row = range.getRow();
    var value = e.value;
    var sheet = e.source.getActiveSheet();
    Logger.log("edited cell: "+range.getA1Notation());
    if( value == "queued"){
      sheet.getRange(row, 8).setValue(timestamp);
    } else if(value == "delivered"){
      sheet.getRange(row, 10).setValue(timestamp);
    } else if(value == "error"){
      sheet.getRange(row, 9).setValue(timestamp);
    }
  }
}

解釋:

根據Simple TriggersonEdit(e)onSelectionChange(e)僅在用戶在工作表上進行交互時才起作用(例如,用戶單擊或編輯單元格)。 當工作表通過腳本或公式自動填充而沒有任何用戶交互時,這些簡單的觸發器將不會啟動。

話雖如此,我建議您將時間戳代碼放在腳本上,您可以將代碼自動添加到 C 列上。 這樣,在 C 列上添加的每個狀態上,也會自動添加時間戳。

供您參考,我在這里創建了一個測試表:

在此處輸入圖像描述

然后,我在下面創建了一個示例測試腳本,它將queued添加到工作表中,然后是添加時間戳的代碼:

function AddStatus() {
var ss = SpreadsheetApp.openById("XXXXXXXXXXXXXX").getSheetByName('Sheet1');//Spreadhseet ID and the Sheet name where statuses will be added on column C
ss.getRange(ss.getLastRow()+1,3).setValue('queued');//sample code where status "queued" will be added on the lastrow of column c on Sheet1 on the Spreadsheet

var range = ss.getDataRange().getValues();//it gets all statuses that were added on column C
var timestamp = new Date();
  for(var x = 1; x <= range.length; x++){//A loop to check every status on column C
      var value = ss.getRange(x,3).getValue();//gets the status value on every row
      if(value == 'queued' && ss.getRange(x, 8).getValue() == ''){//checks if the status value matches the condition and will only put timestamp if there's no existing one yet
        ss.getRange(x, 8).setValue(timestamp);//sets the timestamp
      }else if(value == 'delivered' && ss.getRange(x, 10).getValue() == ''){
        ss.getRange(x, 10).setValue(timestamp);
      }else if(value == 'error' && ss.getRange(x, 9).getValue() == ''){
        ss.getRange(x, 9).setValue(timestamp);
      }else if(value == ''){//checks emtpy rows in between statuses just in case there and logs the result
        Logger.log('Empty value on row '+x);
      }else{
        Logger.log('Existing timestamp on row '+x);//skips and logs all rows on column C with existing timestamps to ensure timestamps are not overridden
      }
  }
}

運行腳本后, queued在第 3 行添加了時間戳,如下面的測試表所示:

在此處輸入圖像描述

最后,這是執行日志:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM