Как вариант
const SETTINGS = {
bookId: '1la6H9omAvlKuMkt-jwZGkp23K0wvV-9CXK9Kq1S0sTw',
dataSheetNames: ['Лист1', 'Лист2'],
archiveSheetName: ['Вывод данных'],
};
function createTrigger() {
ScriptApp.getProjectTriggers().forEach(
(trigger) =>
trigger.getHandlerFunction() === 'saveData' &&
trigger.getEventType() === ScriptApp.EventType.CLOCK &&
(ScriptApp.deleteTrigger(trigger) || console.info(`Tirgger ${trigger.getUniqueId()} was deleted`))
);
ScriptApp.newTrigger('saveData').timeBased().atHour(17).everyDays(1).create();
}
function saveData() {
const book = SpreadsheetApp.openById(SETTINGS.bookId);
const date = new Date();
const sheet = book.getSheetByName(SETTINGS.archiveSheetName);
// console.log(book);
SETTINGS.dataSheetNames.forEach((name) => {
const sheetD = book.getSheetByName(name);
const values = sheetD.getRange('A2:B').getValues();
saveData_(sheet, date, values);
});
console.info(`saveData was called successful`);
}
/**
* @param {globalThis.SpreadsheetApp.Sheet} sheet
* @param {Date} x
* @param {any[][]} values
*/
function saveData_(sheet, x, values) {
const tz = sheet.getParent().getSpreadsheetTimeZone();
const x_ = Utilities.formatDate(x, tz, 'dd.MM.yyyy');
const data = sheet.getDataRange().getValues();
const ys = data.map((row) => row[0]);
const xs = data[0].map((cell) => (cell && cell.getTime ? Utilities.formatDate(cell, tz, 'dd.MM.yyyy') : ''));
let indexX = xs.indexOf(x_);
if (indexX === -1) indexX = sheet.getLastColumn();
const preData = data.map((row) => [row[indexX] || '']);
preData[0][0] = preData[0][0] || x;
console.log(preData);
values.forEach((row) => {
if (row[0] !== '') {
const index = ys.indexOf(row[0]);
if (index !== -1) {
preData[index] = [preData[index][0] || row[1]];
}
}
});
console.log(JSON.stringify(preData));
sheet.getRange(1, indexX + 1, preData.length, 1).setValues(preData);
}
Хоть мне и кажется, что я не продумал мелочи, т.к. подпись к полю на каждом листе должна быть уникальна. Но это можно поправить, автоматически добавляя имя листа, например.
Пример в Таблице
https://docs.google.com/spreadsheets/d/1la6H9omAvl...