簡體   English   中英

如何在Google表格中的兩列中添加日期戳記

[英]How to date stamp a change in two columns in google sheets

我有一個包含2列(A和B)的工作表,它們具有從另一工作表派生並鏈接的值。 我想根據上次編輯列的日期為工作表添加日期戳。 換句話說,當原始工作表更改A或B或同時更改兩者中的數據點時,將日期戳放置在C4中作為示例。 下次更改時,無論是一天還是一周,C4中的日期都會更改為更改日期。 既然是我們,那么日期和時間也應該是正確的。

給定數據和要加蓋時間戳的列之間的分隔層,您可能將需要一些超出“簡單” on edit觸發功能。 當值更改是由於用戶操作引起的時, on edit觸發功能非常有用,但否則會受到限制(腳本執行不會激活它們)。

一種可能的解決方案是,當您的源工作表輸入發生更改時,使用簡單的編輯觸發器來標記,然后在報告工作表上,將給定報告的每個輸入的相應日期單元格的相關最大值引用給給定報告。

另一種可能的解決方案是實施一種比較方法,該方法可通過任何系統更改原始工作表上的數據來激活,並將A和B的存儲值與A和B的當前值進行比較,如果發生更改,則更新時間戳和備份報告。

此比較和備份功能的示例:

var reportSheetName = "Report", timeStampCell = "C4", numReportHeaders = 1;
function stampAndBackup() {
  // Called by data insertion method / some "on edit" triggered function
  // that may have resulted in data updates and changes in A & B on the report sheet.
  var wb = SpreadsheetApp.getActive();
  var backup = wb.getSheetByName(reportSheetName + "_Backup");
  var report = wb.getSheetByName(reportSheetName);
  if (!report || !backup) throw new Error("Missing required sheet(s).");

  // Flush pending writes (e.g. formula recalculations).
  SpreadsheetApp.flush();

  // Load data from report & backup of report. (Assumption: both sheets have data.)
  var db = backup.getDataRange().getValues();
  // Assumption: cols A & B are the columns with most data on the report sheet.
  var data = report.getDataRange().getValues();
  if(numReportHeaders > 0) data.splice(0, numReportHeaders);

  // Assumption: db & data are valid arrays.
  if (!hasDifferentElements_(db, data))
    return;

  backup.clearContents();
  SpreadsheetApp.flush();

  backup.getRange(1, 1, data.length, data[0].length).setValues(data);
  report.getRange(timeStampCell).setValue(new Date());
}
function hasDifferentElements_(a, b) {
  if (a.length !== b.length)
    return true;

  // Element-by-element comparison is needed.
  var comparedColumns = Math.min(2, Math.min(a[0].length, b[0].length));
  for (var r = 0; r < a.length; ++r)
    for (var c = 0; c < comparedColumns; ++c)
      if (a[r][c] !== b[r][c])
        return true;

  return false;
}

我將代碼stampAndBackup讀者,因為它在很大程度上取決於實現,因此我將其稱為stampAndBackup

暫無
暫無

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

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