У меня есть Google Sheet, содержащий несколько листов, один из которых называется 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);
}