【发布时间】:2020-12-09 17:21:54
【问题描述】:
我有一个包含大约 190 个标签的 Google 表格,我需要将其拆分为 190 个不同的文件 文件需要与选项卡命名相同,选项卡的内容需要复制为值,但我还需要将格式设置为交叉(而不是公式)。
我环顾四周,通过结合之前的问答加上使用函数列表帮助形成了以下代码。它实际上适用于前几个选项卡,但随后会引发有关无法删除唯一工作表的错误。
function copySheetsToSS() {
var ss = SpreadsheetApp.getActive();
for(var n in ss.getSheets()){
var sheet = ss.getSheets()[n];// look at every sheet in spreadsheet
var name = sheet.getName();//get name
if(name != 'master' && name != 'test'){ // exclude some names
var alreadyExist = DriveApp.getFilesByName(name);// check if already there
while(alreadyExist.hasNext()){
alreadyExist.next().setTrashed(true);// delete all files with this name
}
var copy = SpreadsheetApp.create(name);// create the copy
sheet.copyTo(copy);
copy.deleteSheet(copy.getSheets()[0]);// remove original "Sheet1"
copy.getSheets()[0].setName(name);// rename first sheet to same name as SS
var target_sheet = copy.getSheetByName(name);
var source_range = sheet.getRange("A1:M50");
var target_range = target_sheet.getRange("A1:M50");
var values = source_range.getValues();
target_range.setValues(values);
}
}
}
我希望有人能告诉我我做错了什么,因为我现在无法弄清楚。我也对更好的解决方案持开放态度,但请注意我是 google appscript 的初学者,请不要太复杂。
谢谢
【问题讨论】:
-
我猜这个错误很明显。您不能删除最后一张纸。换句话说,一个电子表格文件需要至少有一张纸。事实上,您甚至无法隐藏所有工作表。至少需要一个可见的。
-
'sheet.copyTo(copy); ' 行正在复制一张纸,所以在我删除第一张纸的时候应该有 2 张纸,这意味着 1 会留下,但是是的,这就是我出错的地方
标签: google-apps-script google-sheets