我正在尝试删除除特定名称(INPUT,模板,摘要)之外的所有工作表。对JS来说很新,所以我相信它已经结束了:
//Delete sheets that are not named 'Input', 'Template', and 'Summary'
function deleteRedundantSheets() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
for (i = 0; i <= sheets.length; i++) {
switch(sheets[i]) {
case sheet.getSheetName() === "INPUT":
break;
case sheet.getSheetName() === "Template":
break;
case sheet.getSheetName() === "SUMMARY":
break;
default:
ss.setActiveSheet(sheet[i]);
ss.deleteActiveSheet;
}
}
}
答案 0 :(得分:1)
将ActiveSpreadSheet
分配给变量后,您可以使用该引用。在您的代码中,var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
可以替换为var sheets = ss.getSheets();
,因为变量ss
包含对活动电子表格的引用。
getSheets
返回一系列工作表。因此,当您编写var sheet = ss.getSheets()[0];
时,实际上是在变量sheet
中分配数组的第一个元素。因此,在case
语句中,您总是指同一张表。因此,您应该使用sheet.getSheetName() === "INPUT"
sheets[i].getSheetName() === "INPUT"
要删除工作表,您还可以使用deleteSheet
功能。最近在Google Scripts中添加了此内容。
下面是您可以使用的修改后的代码(我没有对此进行测试,但您应该明白这一点。)
function deleteRedundantSheets() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
for (i = 0; i < sheets.length; i++) {
switch(sheets[i].getSheetName()) {
case "INPUT":
case "Template":
case "SUMMARY":
break;
default:
ss.deleteSheet(sheets[i]);
}
}
}