Создание листов с использованием шаблона из другой таблицы

Я хочу использовать метод электронной таблицы.

Вот где я его использую:

function getMembersFileSpreadsheet(name, folder){

  var folderIterator = folder.getFilesByName(name +"-"+"Member");
  if(folderIterator.hasNext()){
    return folderIterator.next();
  } else {      
    var sheet = SpreadsheetApp.openById("someID").getSheetByName('Part-1');
    var idOfFile = DriveApp.getFileById(Drive.Files.insert({"title":name+"-"+"Member", "parents":[{"id": folder.getId()}], 'mimeType':"application/vnd.google-apps.spreadsheet"},{'convert':true}).id);
    var ss = SpreadsheetApp.openById(idOfFile.getId());

    // this method works
    ss.insertSheet('Member Info', 0);
    // works
    ss.insertSheet('Member Progress',1); 
    // BREAKS, does not insert a sheet here, breaks.
    ss.insertSheet('Part 1', 2, {template: sheet});       
    ss.insertSheet('Part 2',3);
    ss.insertSheet('Part 3',4);
    ss.insertSheet('Part 4',5);
    ss.deleteSheet(ss.getSheetByName('Sheet1'));

    return ss;
  }
}

Обратите внимание на мои комментарии о том, где мой код ломается. Вставляются первые два листа (когда я опускаю аргумент шаблона). Когда я включаю аргумент шаблона, выполнение завершается неудачно, и моя вновь созданная электронная таблица содержит 3 листа: «Информация о члене», «Прогресс участника» и «Лист1».

Когда я использую аргумент шаблона отдельно (в небольшом приложении, в частности, просто проверяю, как он используется и работает ли он), он работает нормально.

Есть идеи, кто-нибудь испытал это? Если я опущу аргумент шаблона в моем текущем коде, все листы будут вставлены правильно.

Я хотел бы иметь возможность форматировать каждый лист с помощью шаблона.


person HelloWorld    schedule 16.06.2016    source источник


Ответы (1)


Вы пытаетесь использовать лист из другой электронной таблицы в качестве шаблона. Это запрещено методом insertSheet:

Шаблон листа должен быть одним из листов объекта Spreadsheet.

Обходной путь - скопировать шаблон в нужную электронную таблицу. использовать это.

var templateCopy = sheet.copyTo(ss);
ss.insertSheet('Part 1', 2, {template: templateCopy}); 
ss.insertSheet('Part 2', 3, {template: templateCopy});
// ...  more sheets created
ss.deleteSheet(templateCopy);   // copied template deleted 

Если подумать, copy выполняет в основном те же действия, что и вставка с шаблоном, за исключением того, что при его использовании нет способа назначить имя листа или индекс.

person Community    schedule 17.06.2016