Создание копий отдельных листов в отдельных таблицах - PullRequest
1 голос
/ 17 октября 2019

Я искал по всему интернету и не могу найти решение этой проблемы. Прямо сейчас я просто использую скрипт, чтобы сделать копию всей электронной таблицы и переместить электронную таблицу. Электронная таблица имеет около 10 листов, но я не хочу делать копию всей электронной таблицы, я хочу дублировать только три конкретных листа, и каждый из этих листов в идеале должен быть своей собственной электронной таблицей.

Мне потребуется настроить триггер для запуска этого сценария каждый день в 11:00. Поэтому каждый день я получаю резервные копии этих трех листов.

Вот код, который я сейчас использую. Это просто дублирует всю электронную таблицу. Я не вижу, как я смог бы достичь того, что я упомянул выше. Возможно ли что-то подобное?

Я пытался трижды скопировать всю электронную таблицу, а затем просто удалял ненужные мне листы из дубликата. Но я не могу понять, как удалить листы из дублированного файла.

Любая помощь будет принята с благодарностью.

Спасибо

function duplicateSheet(parameters) {
  var formattedDate = Utilities.formatDate(new Date(), "GMT-5", "yyyy-MM-dd");
  var name = formattedDate + " Daily Manager's Conference Call";
  var destination = DriveApp.getFolderById("Folder ID");
  var file = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId())
  file.makeCopy(name, destination);
}

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Копирование нескольких листов в отдельные электронные таблицы

Чтобы использовать эту функцию, все, что вам нужно сделать, это предоставить ей массив имен файлов, которые вы хотите скопировать в новую электронную таблицу. Я могу изменить входные параметры в соответствии с вашими потребностями. Просто дайте мне знать, что вы хотели бы.

function copySheetsToSpreadsheets(sheetNameArray) {
  var sheetNameArray=sheetNameArray||["Sheet1","Sheet2","Sheet3"];
  var ss=SpreadsheetApp.getActive();
  var des=DriveApp.getFolderById("Destination Folder Id");
  for(var i=0;i<sheetNameArray.length;i++) {
    var ssFileName=Utilities.formatString('DailyManagersConferenceCall-%s-%s',sheetNameArray[i],Utilities.formatDate(new Date(),"GMT-5","yyyy-MM-dd"));
    var file=SpreadsheetApp.create(ssFileName);
    var f=DriveApp.getFileById(file.getId());
    var fi=f.makeCopy(f.getName(), des);
    var newss=SpreadsheetApp.openById(fi.getId());
    var sh=ss.getSheetByName(sheetNameArray[i])
    var newsh=sh.copyTo(newss);
    newss.deleteSheet(newss.getSheets()[0]);
    newsh.setName(sheetNameArray[i]);
  }
}
0 голосов
/ 17 октября 2019

Вы можете использовать copyTo () , чтобы скопировать один лист в другую электронную таблицу, например:

var sheetToCopy = oldSpreadsheet.getSheetByName("your_sheet_name");
var newSpreadsheet = SpreadsheetApp.create("new_spreadsheet");
sheetToCopy.copyTo(newSpreadsheet);

И если вы хотите скопировать электронную таблицу в определенную папку, выможно использовать:

var file = DriveApp.getFileById(newSpreadsheet.getId());
DriveApp.getFolderById('your_folder_id').addFile(file);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...