【问题标题】:Google Sheets Auto Date and Time Stamp on Multiple Columns多列上的 Google 表格自动日期和时间戳
【发布时间】:2018-06-11 16:58:46
【问题描述】:

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

  • 如果编辑/更新了“标题”列 --> 则将日期戳 (mm-dd-yy) 插入到“日期”列;
  • 如果编辑/更新了“标题”列 --> 则将时间戳 (hh:mm) 插入到“时间开始”列中;和
  • 如果编辑/更新了“描述”列 --> 则将时间戳 (hh:mm) 插入到“TimeStop”列。

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

  • A 列 = 标题
  • B 列 = 说明
  • C 列 = 日期
  • D 列 = 时间开始
  • E 列 = TimeStop。

我找到了一个代码,可以让我做日期戳/时间戳的事情,但它只适用于一列(来自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

【问题讨论】:

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


【解决方案1】:

主要问题是您需要在三个位置查找编辑的功能。您当前的代码仅在“标题”列中查找编辑。我添加了代码来查找其他位置。

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”脚本文件中,以便您查看功能。

这无论如何都不漂亮,但它可以满足您的要求。如果您需要更多解释或者我没有回答您的问题,请告诉我。

【讨论】:

  • 罗恩,非常感谢您抽出宝贵时间帮助我。我在那个谷歌表上使用了你的代码,但它没有用。我什至尝试在具有相同设置和相同代码的全新谷歌表格上使用它,但它仍然无法正常工作。唯一有效的是“日期”列,但“时间开始”和“时间停止”列不起作用。有什么可能出错的建议吗?
  • 非常抱歉!我搞砸了。现在我明白了问题所在。我没有正确呈现我真正想要的东西。这是我真正需要的: - 如果编辑/更新了“标题”列->然后将日期戳(mm-dd-yy)插入“日期”列; - 如果“标题”列被编辑/更新 --> 则时间戳 (hh:mm) 被插入到“TimeStart”列中;和 - 如果“描述”列被编辑/更新 --> 则时间戳 (hh:mm) 被插入到“TimeStop”列。
  • 罗恩,什么都别介意。它确实有效!使用您的代码,我所要做的就是更改 StartEditColumn 和 StopEditColumn。再次感谢您的帮助!
  • Ron,你介意帮我解决一个小细节吗? TimeStamp 以以下格式返回时间:14:49:56 GMT-0700 (PDT) ... 有没有办法让它以这种格式返回时间:14:49:56
  • Narek,将 startTimestopTime 行更改为以下内容:var startTime = (date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds());var stopTime = (date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds());
猜你喜欢
  • 2021-10-27
  • 2019-10-01
  • 2017-12-04
  • 2020-08-30
  • 2021-03-25
  • 2014-05-22
  • 2019-06-09
  • 2014-11-12
  • 2016-11-26
相关资源
最近更新 更多