首页 > 解决方案 > 检查特定文本的所有匹配列并应用时间戳

问题描述

我有一个包含多张工作表的 Google 表格,其中一张名为 Info。在此表上,L 列中的单元格通过从其他来源提取的 VLOOKUP 接收各种单词。我试图弄清楚如何让列中的相邻单元格在 L 列中的单元格第一次收到“开始”一词时收到一个近似的时间戳。

我认为这应该可以通过每小时运行一次的触发器来实现,检查 L 列是否有任何带有“START”字样的单元格,然后在 I 列各自的空单元格中插入时间戳。

当我在 L 列中选择了一个单元格时,我已经使用了一个非常适合单行的脚本,但是我该如何更改它以便无论我在哪里或我在工作表上做什么,它都可以工作?

function TIMESTAMP() {
  var s = SpreadsheetApp.getActiveSheet();
  if( s.getName() == 'Info' ) {
    var r = s.getActiveCell();

    if( r.getValue() == 'START' ) {
    if( r.getColumn() == 12 )

      var nextCell = r.offset(0, -3);
      if( nextCell.getValue() === '' )
        nextCell.setValue(new Date());
    }
  }
}

编辑

感谢库珀,这就是我最终的结果。我进行了一些编辑,因为前 4 行是包含公式的标题,并且每当函数运行时它们就会中断。现在这可以防止任何 VLOOKUP 被覆盖,这似乎解决了这个问题。

function TIMESTAMP() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Info');
  var srg=sh.getRange(5,9,sh.getLastRow()-4);
  var sA=srg.getValues();
  var trg=sh.getRange(5,10,sh.getLastRow()-4);
  var tA=trg.getValues();
  for(var i=0;i<sA.length;i++) {
    if(sA[i][0]=='START' && tA[i][0]=='') {
      tA[i][0]=Utilities.formatDate(new Date(),Session.getScriptTimeZone(), "MMM/dd/yyyy HH:mm:ss")
    }
  }
  trg.setValues(tA);
}

标签: google-apps-scriptgoogle-sheets-api

解决方案


function TIMESTAMP() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Info');
  var srg=sh.getRange(5,12,sh.getLastRow()-4,sh.getLastColumn());
  var sA=srg.getValues();
  var trg=sh.getRange(5,9,sh.getLastRow()-4,sh.getLastColumn());
  var tA=trg.getValues();
  for(var i=0;i<sA.length;i++) {
    if(sA[i][0]=='START' && tA[i][0]=='') {
      tA[i][0]=Utilities.formatDate(new Date(),Session.getScriptTimeZone(), "dd/MM/yyyy HH:mm:ss")
    }
  }
  trg.setValues(tA);
}

推荐阅读