Временная метка для таблиц Google (только для данных с заполненными строками)

#google-apps-script #google-sheets #timestamp #script

#google-apps-script #google-таблицы #временная метка #скрипт

Вопрос:

В электронную таблицу я хочу добавить временную метку для предварительно выбранных (E20: N48) данных строк и столбцов.

Например: если ячейка E20: E22 листа-1 заполнена некоторыми данными, то временная метка будет установлена из ячейки A2 в ячейку A4 в столбце 1 листа-2. Аналогично, временная метка будет устанавливаться для данных, которые будут до последней строки каждый раз.

Как вы можете видеть в моем коде, 29 задается как последняя строка, из-за чего первые 2 строки заполнены данными, но временная метка устанавливается для оставшихся 28 строк, включая первые 2 строки.

Особое примечание: я хочу добавить временные метки только для строк, заполненных данными.

Вот мой код:

 function save() {

  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var ss = sheet.getSheetByName('Sheet-1'); //sheetstore
  var data = sheet.getSheetByName('Sheet-2');
  var getValue = ss.getRange('E20:N48').getValues();
  var lastRow = data.getLastRow() 1;
  var updateTable = data.getRange(lastRow,2,29,10).setValues(getValue); //From column 2, total 29 column, total 10 rows

  //Timestamp for column 1
  var timestamp = Utilities.formatDate(new Date(), "GMT 6:00", "yyyy-MM-dd HH:mm:ss");
  Logger.log(lastRow)
  var date = data.getRange(lastRow,1,29,1).setValue(timestamp); //From columns 1 to 29 rows, every time print in column 1
}
 

Ответ №1:

Эта функция гарантирует, что вы берете только строки, содержащие данные в каждом столбце, поэтому вы можете продолжать размещать временные метки в столбце 1 листа-2, поскольку туда помещаются только полностью заполненные строки.

 function save() {
  const sss = SpreadsheetApp.getActive();
  const sh1 = sss.getSheetByName('Sheet-1'); 
  const sh2 = sss.getSheetByName('Sheet-2');
  const vs1 = sh1.getRange('E20: N48').getValues().filter(r => !r.some(e => !e));
  const lr = sh2.getLastRow()   1;
  const vs2 = sh2.getRange(lr, 2, vs1.length, vs1[0].length).setValues(vs1);
  const timestamp = Utilities.formatDate(new Date(), "GMT 6:00", "yyyy-MM-dd HH:mm:ss");
  sh2.getRange(lr, 1, vs1.length, 1).setValue(timestamp); 
}