检查列中是否有特定文本的所有匹配项并应用时间戳



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

我认为这应该可以通过每小时运行的触发器来实现,检查 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);
}
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);
}

最新更新