Копирование нескольких листов с рабочего листа на архивный лист

Мне немного помогли с последней строкой этого кода, и он отлично работает для одного листа в электронной таблице, однако у меня есть 5 листов в электронной таблице From и идентичные 5 листов в целевой электронной таблице, как я могу получить тот же диапазон в таблице другие 4 листа к их аналогу с таким же именем на целевом листе? Итак, я использовал ниже, чтобы попытаться скопировать каждый лист в его соответствующую тезку, но я настроил код, как показано ниже, но только импортировал первый лист, также есть способ, чтобы вместо этого нужно было только ввести идентификатор исходной электронной таблицы один раз для всего кода на каждом участке листа?

 function ImportDataRange() {

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheetByName('AM trip'); //To Sheet Name
 var ssraw = SpreadsheetApp.openById('1Z0zU2oGktLPB-QitYMm9XtOGN4Rd-Z-UJJomGX4NIO0'); // From Spreadsheet ID
 var sheetraw = ssraw.getSheetByName('AM trip'); // From Sheet name
 var range = sheetraw.getRange('B7:U38');
 var data = range.getValues();
 var lastRow = sheet.getLastRow()+1;
 sheet.getRange(lastRow,3,data.length,data[0].length).setValues(data)

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheetByName('PM trip'); //To Sheet Name
 var ssraw = SpreadsheetApp.openById('1Z0zU2oGktLPB-QitYMm9XtOGN4Rd-Z-UJJomGX4NIO0'); // From Spreadsheet ID
 var sheetraw = ssraw.getSheetByName('PM trip'); // From Sheet name
 var range = sheetraw.getRange('B7:U38');
 var data = range.getValues();
 var lastRow = sheet.getLastRow()+1;
 sheet.getRange(lastRow,3,data.length,data[0].length).setValues(data)

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheetByName('Pool / Beach'); //To Sheet Name
 var ssraw = SpreadsheetApp.openById('1Z0zU2oGktLPB-QitYMm9XtOGN4Rd-Z-UJJomGX4NIO0'); // From Spreadsheet ID
 var sheetraw = ssraw.getSheetByName('Pool / Beach'); // From Sheet name
 var range = sheetraw.getRange('B7:U38');
 var data = range.getValues();
 var lastRow = sheet.getLastRow()+1;
 sheet.getRange(lastRow,3,data.length,data[0].length).setValues(data)

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheetByName('Night Dive'); //To Sheet Name
 var ssraw = SpreadsheetApp.openById('1Z0zU2oGktLPB-QitYMm9XtOGN4Rd-Z-UJJomGX4NIO0'); // From Spreadsheet ID
 var sheetraw = ssraw.getSheetByName('Night Dive'); // From Sheet name
 var range = sheetraw.getRange('B7:U38');
 var data = range.getValues();
 var lastRow = sheet.getLastRow()+1;
 sheet.getRange(lastRow,3,data.length,data[0].length).setValues(data)
}

Спасибо за любую помощь. Очень признателен.


person Paul    schedule 24.04.2017    source источник


Ответы (1)


Код можно упростить с помощью цикла.

Выше вы сказали, что у вас 5 листов, но в образце кода только 4, добавьте имя другого листа в var sheetNames.

function onOpen() { // This function adds a custom menu to the spreadsheet (Backup to archive) so you can run the script from there.

var ui = SpreadsheetApp.getUi();

    ui.createMenu('Backup to archive')
    .addItem('Backup', 'dataBackup')
    .addToUi();
}

function dataBackup() {

    var inputSS = SpreadsheetApp.openById('1wglM4-5jx873vwtFRPVgC1qk27JjrsYjDwp0fNpl5Xg'); // The file ID of the Input sheet
    var archiveSS = SpreadsheetApp.openById('146WU8RghfFqlCpCSX7n6kBAKOyxcpVKt14yhVfvYz-g'); // The file ID of the archive sheet

    // The names of the sheets to be copied.
    // NOTE: These names must match the names of the sheets in BOTH spreadsheets i.e. the same case the spelling and the same spaces.
    var sheetNames = ['AM trip', 'PM trip', 'Pool / Beach', 'Night Dive'];

    for (var i = 0; i < sheetNames.length; i++) { // Loop to each sheet listed in 'var sheetNames' and copy the data.

        var inputSheet = inputSS.getSheetByName(sheetNames[i]);
        var archiveSheet = archiveSS.getSheetByName(sheetNames[i]);

        var data = inputSheet.getRange('B7:U38').getValues();

        archiveSheet.getRange(archiveSheet.getLastRow() + 1, 2, data.length, data[0].length).setValues(data);
    }
}
person James D    schedule 25.04.2017
comment
Спасибо, что привели в порядок. Я изменил пару вещей, так что теперь только 4 страницы, как указано. Я запускаю сценарий, но копирует только первую страницу AM Trip, ни одна из других страниц не копируется, и все они содержат данные, так как я вставил некоторые для проверки. Также вы можете объяснить или указать мне место, которое объясняет строку var i = 0 ...... Спасибо. Я попытался выполнить поиск, но не могу найти объяснения, только многие примеры этого. - person Paul; 30.04.2017
comment
@ Пол, не знаю, почему скрипт не работает. Я подозреваю, что названия листов не совпадают? взгляните на эти 2 листа. Лист ввода содержит сценарий и настраиваемое меню для его вызова. Лист ввода и Архивный лист. var i = 0 - счетчик цикла for, см. Здесь. ИМО, этот сценарий далеко не идеален для того, что вам нужно. Свяжитесь со мной: jamesd at nairongschool.com - person James D; 01.05.2017