Google表格在多列上设置自动日期和时间戳

时间:2018-06-11 16:58:47

标签: google-apps-script google-sheets triggers

我希望我的Google表格自动执行以下操作:

  • 如果编辑/更新“标题”列 - >然后将Datestamp(mm-dd-yy)插入“Date”列;
  • 如果编辑/更新“标题”列 - >然后将时间戳(hh:mm)插入“TimeStart”列;和
  • 如果编辑/更新“描述”列 - >然后将时间戳(hh:mm)插入“TimeStop”列。

我已经为列A到E添加了命名范围,如下所示:

  • A栏=标题
  • B列=描述
  • C栏=日期
  • D栏= TimeStart
  • E栏= TimeStop。

我找到了一个允许我执行datestamp / timestamp的代码,但它只适用于一列(来自https://www.internetgeeks.org/tech/add-timestamp-time-stamp-google-docs-spreadsheet/):

function onEdit(event)
{ 
  var timezone = "PST";
  var timestamp_format = "MM-dd-yy";
  var updateColName = "Title";
  var timeStampColName = "Date";
  var sheet = event.source.getSheetByName('Sheet1');

  var actRng = event.source.getActiveRange();
  var editColumn = actRng.getColumn();
  var index = actRng.getRowIndex();
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
  var dateCol = headers[0].indexOf(timeStampColName);
  var updateCol = headers[0].indexOf(updateColName);
  updateCol = updateCol + 1;

  if (dateCol > -1 && index > 1 && editColumn == updateCol) { 
    var cell = sheet.getRange(index, dateCol + 1);
    var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
    cell.setValue(date);
  }
}

我尝试一遍又一遍地复制并粘贴相同的代码,只需更改updateColNametimeStampColNametimestamp_format变量的值。

正如我发现的那样,您不能只复制和粘贴多个onEdit函数,并期望它在同一文档上运行。

我一直试图找到解决方案一段时间了。如果我对编码有所了解,我觉得我能够弄清楚这一点,但我不知道。

以下是我的Google表格的链接:https://docs.google.com/spreadsheets/d/1_dW8erkzVJFT6aUiB-0SikeMTbCnXmoo3d5mgUBN910/edit?usp=sharing

1 个答案:

答案 0 :(得分:0)

主要问题是你需要让函数在三个地方寻找编辑。您当前的代码仅在“标题”列中查找编辑内容。我添加了代码来查找其他位置。

function onEdit(event)
{ 
  var timezone = "PST";
  var datestamp_format = "MM-dd-yy";
  var updateColName = "Title";
  var dateStampColName = "Date";
  var startEditColName = "TimeStart"; // edit column to signal time start
  var startTimeColName = "TimeStart";
  var stopEditColName = "TimeStop";  // edit column to signal time stop
  var stopTimeColName = "TimeStop";
  var sheet = event.source.getSheetByName('Sheet1');


  var actRng = event.source.getActiveRange();
  var editColumn = actRng.getColumn();
  var index = actRng.getRowIndex();
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
  var dateCol = headers[0].indexOf(dateStampColName);
  var updateCol = headers[0].indexOf(updateColName); updateCol = updateCol+1;
  if (dateCol > -1 && index > 1 && editColumn == updateCol) { 
    var cell = sheet.getRange(index, dateCol + 1);
    var date = Utilities.formatDate(new Date(), timezone, datestamp_format);
    cell.setValue(date);
  }

  var startCol = headers[0].indexOf(startTimeColName);
  var startEditCol = headers[0].indexOf(startEditColName); startEditCol = startEditCol+1;
  if (startCol > -1 && index > 1 && editColumn == startEditCol) { 
    var cell1 = sheet.getRange(index, startCol + 1);
    var date = new Date();
    var startTime = date.toTimeString();
    cell1.setValue(startTime);
  }

    var stopCol = headers[0].indexOf(stopTimeColName);
  var stopEditCol = headers[0].indexOf(stopEditColName); stopEditCol = stopEditCol+1;
  if (stopCol > -1 && index > 1 && editColumn == stopEditCol) { 
    var cell2 = sheet.getRange(index, stopCol + 1);
    var date = new Date();
    var stopTime = date.toTimeString();
    cell2.setValue(stopTime);
  }
}

我还将此作为单独的脚本 - Date_Timestamp.gs添加到您的'TimeStamp'脚本文件中,以便您可以看到该功能。

这无论如何都不是很漂亮,但它会按照你的要求行事。如果您需要更多解释或我没有回答您的问题,请告诉我。