如何在Google表格中创建自动时间戳?

时间:2019-01-03 21:28:21

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

我有6列数据,然后是“最新更新”列,在这里我手动在行中写入上次更改的日期。我敢肯定有一种方法可以自动执行此操作,但是无法使其正常工作。

注意-我现在不怎么编码了,只是试图修改我在网络上找到的多个代码,但对我来说什么都没有用,

它基本上是化学物质的数据库,其中每一列都是一个属性,在上次更改任何属性时,我都需要盖章。有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

没有必要使用脚本。使用公式可能会更容易:

=(your_datetime - date(1970;1;1) ) * 86400000

timestamp-to-date-and-back-screenshot

在此处查看示例:https://docs.google.com/spreadsheets/d/1JHr4z3-32fWYUAjm3bG_Wyr-ZXn7FUvrECa3B8TtJtU/edit?usp=sharing

答案 1 :(得分:-1)

您必须输入一些代码才能完成此工作。 This link很好地说明了如何为工作表创建脚本。

脚本最重要的部分是您希望每次在ANY单元格中对工作表进行更改时都运行它。然后,当它运行时,您可以检查更改了哪个单元,然后由他们确定该单元是否在您要检查的区域内。考虑这样设置的工作表:

enter image description here

设置工作表后,转到“工具”菜单,然后选择“脚本编辑器”。从那里,您将输入以下代码。我给您的例子是您必须进行更改以满足您的需求的示例。首先要了解的是function onEdit。这是一个特别命名的函数,它将在每次更改工作表时运行。所以当你有

function onEdit(eventObj) {
}

然后,每次进行更改时(在用户键入Enter之后),将执行放在括号中的任何内容。因此,您的onEdit函数如下所示:

function onEdit(eventObj) {
  //--- you could set up a dynamic named range for this area to make it easier
  var thisSheet = SpreadsheetApp.getActiveSheet();
  var checkRange = thisSheet.getRange("B2:D5");  
  if (isInRange(checkRange, eventObj.range)) {
    Logger.log('cell is in range');
    var propertyCell = eventObj.range;
    var timestampCell = thisSheet.getRange(propertyCell.getRow(), 5);
    timestampCell.setValue(Utilities.formatDate(new Date(), "UTC+8", "MM-dd-yyyy hh:mm:ss"));
  }  else {
    Logger.log('must be outside the range');
}

eventObj是用户编辑和更改的单元格。因此,我们正在使用该单元格与我们要检查的区域进行比较。如果确定该单元格在该区域内,则继续并定义该单元格以保存时间戳,然后为其分配一个值。该值是格式化的日期和时间。

这里重要的是checkRange变量,该变量定义为所有属性的区域。因此,当onEdit函数运行时,它定义了您要检查的区域,然后调用isInRange来查看已编辑的单元格是否在该区域内。这是函数:

function isInRange(checkRange, targetCell) {
  Logger.log('checking isInRange');

  //--- check the target cell's row and column against the given
  //    checkrange area and return True if the target cell is
  //    inside that range
  var targetRow = targetCell.getRow();
  if (targetRow < checkRange.getRow() || targetRow > checkRange.getLastRow()) return false;
  Logger.log('not outside the rows');

  var targetColumn = targetCell.getColumn();
  if (targetColumn < checkRange.getColumn() || targetColumn > checkRange.getLastColumn()) return false;
  Logger.log('not outside the columns');

  //--- the target cell is in the range!
  return true;
}

您的结果将如下所示:

enter image description here

现在,将所有代码复制并粘贴到脚本编辑器中:

function isInRange(checkRange, targetCell) {
  Logger.log('checking isInRange');

  //--- check the target cell's row and column against the given
  //    checkrange area and return True if the target cell is
  //    inside that range
  var targetRow = targetCell.getRow();
  if (targetRow < checkRange.getRow() || targetRow > checkRange.getLastRow()) return false;
  Logger.log('not outside the rows');

  var targetColumn = targetCell.getColumn();
  if (targetColumn < checkRange.getColumn() || targetColumn > checkRange.getLastColumn()) return false;
  Logger.log('not outside the columns');

  //--- the target cell is in the range!
  return true;
}

function onEdit(eventObj) {
  //--- you could set up a dynamic named range for this area to make it easier
  var thisSheet = SpreadsheetApp.getActiveSheet();
  var checkRange = thisSheet.getRange("B2:D5");  
  if (isInRange(checkRange, eventObj.range)) {
    Logger.log('cell is in range');
    var propertyCell = eventObj.range;
    var timestampCell = thisSheet.getRange(propertyCell.getRow(), 5);
    timestampCell.setValue(Utilities.formatDate(new Date(), "UTC+8", "MM-dd-yyyy hh:mm:ss"));
  }  else {
    Logger.log('must be outside the range');
  }
}