【问题标题】:How to make an automatic timestamp in google sheets?如何在谷歌表格中制作自动时间戳?
【发布时间】:2019-01-03 21:28:21
【问题描述】:

我有 6 列中的数据,然后是“上次更新”列,我在该列中手动写入该行中最后一次更改的日期。我确信有一种方法可以自动执行此操作,但无法使其发挥作用。

注意 - 我现在不知道如何编码,只是尝试修改我在网上找到的多个代码,但没有任何效果,我越来越绝望了。

它基本上是一个化学物质数据库,其中每一列都是一个属性,我需要在最后一次更改任何属性时标记。谁能帮我解决这个问题?

【问题讨论】:

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


    【解决方案1】:

    您必须输入一些代码才能完成这项工作。 This link 提供了一个很好的示例,说明如何为您的工作表创建脚本。

    您的脚本最重要的部分是您希望它在每次更改任何单元格中的工作表时运行。然后当它运行时,您可以检查哪个单元格已更改,然后他们确定该单元格是否在您有兴趣检查的区域中。考虑这样一张表:

    设置好工作表后,转到“工具”菜单并选择“脚本编辑器”。从那里您将输入下面的代码。我给你的是一个例子,你必须改变它以满足你的需要。首先要了解的是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;
    }
    

    您的结果将如下所示:

    所以现在,只需将这段代码复制并粘贴到您的脚本编辑器中即可:

    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');
      }
    }
    

    【讨论】:

      【解决方案2】:

      不必使用脚本。使用公式可能更容易:

      =(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

      【讨论】:

        猜你喜欢
        • 2014-12-10
        • 2020-08-30
        • 2021-06-10
        • 1970-01-01
        • 2021-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-01
        相关资源
        最近更新 更多