Проверьте столбец для всех совпадений определенного текста и примените временные метки - PullRequest
1 голос
/ 12 октября 2019

У меня есть 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);
}

1 Ответ

1 голос
/ 12 октября 2019
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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...