копировать из таблицы в другую таблицу с динамическим заголовком
В настоящее время я работаю над проектом, в котором мне нужно скопировать данные с одного конкретного листа в электронной таблице в другую электронную таблицу с динамическим заголовком (текст с датой). перемещение данных с идентификатором или по имени в порядке, но со свежесозданной электронной таблицей кажется неприятным. все функции будут в одном скрипте приложения: создание копии
function titleAsDate() {
var currentDate = Utilities.formatDate(new Date(), "GMT+8", "dd-MM-yyyy HH:mm:ss")
SpreadsheetApp.create("Report of the " + currentDate)
}
function copyWithValues() {
let spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
let sourceSheet = spreadSheet.getSheetByName('Sources');
let sourceRange = sourceSheet.getDataRange();
let sourceValues = sourceRange.getValues();
let rowCount = sourceValues.length;
let columnCount = sourceValues[0].length;
let targetSheet = spreadSheet.getSheetById('Target');
let targetRange = targetSheet.getRange(1, 1, rowCount, columnCount);
targetRange.setValues(sourceValues);
}
1 ответ
Объяснение:
SpreadsheetApp.create (name) возвращает объект электронной таблицы, поэтому вы можете напрямую использовать выходные данные этой функции без необходимости дополнительного кода.
Во вновь созданной таблице будет один лист с именем
Sheet1
как при создании нового файла электронной таблицы вручную. Поэтому вы можете использовать функцию sheet.setName (name), чтобы изменить имя листа наTarget
. Также эта функция возвращает объект листа (targetSheet
), который затем можно использовать для установки значений.
Решение:
Это весь код в одной функции:
function copyWithValues() {
const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
const sourceSheet = spreadSheet.getSheetByName('Sources');
const sourceRange = sourceSheet.getDataRange();
const sourceValues = sourceRange.getValues();
const currentDate = Utilities.formatDate(new Date(), "GMT+8", "dd-MM-yyyy HH:mm:ss"); // new code
const targetSpreadsheet = SpreadsheetApp.create("Report of the " + currentDate); // new code
let rowCount = sourceValues.length;
let columnCount = sourceValues[0].length;
let targetSheet = targetSpreadsheet.getSheetByName('Sheet1').setName("Target"); // new code
let targetRange = targetSheet.getRange(1, 1, rowCount, columnCount);
targetRange.setValues(sourceValues);
}
Если вы хотите использовать
titleAsDate
в качестве вспомогательной функции, которая будет вызываться, тогда вы можете использовать этот код и выполнять только
copyWithValues
:
// helper function, used by copyWithValues
function titleAsDate() {
const currentDate = Utilities.formatDate(new Date(), "GMT+8", "dd-MM-yyyy HH:mm:ss");
return SpreadsheetApp.create("Report of the " + currentDate); // new code
}
// main function, you should execute this function
function copyWithValues() {
const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
const sourceSheet = spreadSheet.getSheetByName('Sources');
const sourceRange = sourceSheet.getDataRange();
const sourceValues = sourceRange.getValues();
const targetSpreadsheet = titleAsDate(); // new code
let rowCount = sourceValues.length;
let columnCount = sourceValues[0].length;
let targetSheet = targetSpreadsheet.getSheetByName('Sheet1').setName("Target"); // new code
let targetRange = targetSheet.getRange(1, 1, rowCount, columnCount);
targetRange.setValues(sourceValues);
}