首页 > 解决方案 > Google 表格:通过自动时间戳记录分阶段跟踪日期变化

问题描述

我正在尝试跟踪从下拉列表中选择特定阶段的日期,以便我可以测量阶段之间的时间。这是电子表格:https ://docs.google.com/spreadsheets/d/1GEJKCtLgsIobA0u3_GYqYwA6FQuSi64u4ORgTATn92U/edit?usp=sharing

我一直在使用不同的示例来记录单元格更改时的时间戳,但我似乎无法找到一种方法来根据下拉列表中选择的值在不同的单元格中记录时间戳。

有谁知道这样的事情是否可能?像这样的函数将为我获取单个列/单元格中的时间戳,但我希望能够填充与不同单元格中下拉列表中的值相对应的不同时间戳:

function onEdit() {
 var s = SpreadsheetApp.getActiveSheet();
 if( s.getName() == "Tracking" ) { //checks that we're on the correct sheet
   var r = s.getActiveCell();
   if( r.getColumn() == 2 ) { //checks the column
     var nextCell = r.offset(0, 1);
     if( nextCell.getValue() === '' ) //is empty?
       var time = new Date();
       time = Utilities.formatDate(time, "GMT", "HH:mm:ss");
       nextCell.setValue(time);
   };
 };
}

标签: google-apps-scriptgoogle-sheets

解决方案


解决方案:

您需要对单元格值进行一些解析以分离数字分量、计算偏移单元格并在此处写入时间戳。

请注意,我修改后的代码还使用了 event object e,因为这减少了对的调用SpreadsheetApp并使每次执行速度更快一些。

示例代码:

function onEdit(e) {
  var r = e.range;
  var off = 0;
  if (r.getSheet().getName() == "Tracking") { //checks that we're on the correct sheet
    if (r.getColumn() == 2) { //checks the column
      var arr = e.value.split(" "); // parse the cell value
      if (arr[0] == "Start") {
        off = 1;
      }
      else if (arr[0] == "Stage") {
        off = parseInt(arr[1]) + 1; // compute offset
      }
      else return;

      var nextCell = r.offset(0, off);
      if (nextCell.getValue() === '') { //is empty?
        var time = new Date();
        time = Utilities.formatDate(time, "GMT", "HH:mm:ss");
        nextCell.setValue(time);
      }
    }
  }
}

样本输出:

在此处输入图像描述

参考:

事件对象 | onEdit(e)


推荐阅读