以下是电子表格method I want to use.
以下是我使用它的地方:
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张,"会员信息","会员进度"和" Sheet1"。
当我单独使用模板参数时(在较小的应用程序中,特别是仅测试它的使用方式以及是否有效),它可以正常工作。
任何想法,有没有人经历过这个?如果我从当前代码中省略模板参数,则所有工作表都会正确插入。
我希望能够使用模板格式化每张工作表。
答案 0 :(得分:1)
您正尝试使用其他电子表格中的工作表作为模板。 insertSheet method:
不允许这样做工作表模板必须是电子表格对象的其中一个工作表。
解决方法是将copy模板添加到您要使用它的电子表格中。
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
与插入模板的功能大多相同,除非在使用时没有办法分配工作表名称或索引。