#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);
}