I am trying to delete all sheets except for specifically named ones (INPUT, Template, Summary). Very new to JS so I am sure it's way off:
//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;
}
}
}
I am trying to delete all sheets except for specifically named ones (INPUT, Template, Summary). Very new to JS so I am sure it's way off:
//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;
}
}
}
Share
Improve this question
asked Apr 15, 2014 at 6:35
user3511512user3511512
1151 gold badge3 silver badges13 bronze badges
2 Answers
Reset to default 3Once you have assigned the
ActiveSpreadSheet
to a variable, you can use that reference. In your codevar sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
can be replaced withvar sheets = ss.getSheets();
as variabless
contains the reference to the active spreadsheet.getSheets
returns an array of sheets. So when you writevar sheet = ss.getSheets()[0];
, you are actually assigning the first element of the array in variablesheet
. Hence in yourcase
statements, you are always referring to the same sheet. So instead of usingsheet.getSheetName() === "INPUT"
, you should usesheets[i].getSheetName() === "INPUT"
To delete a sheet, you can also use the
deleteSheet
function. This was added recently in Google Scripts.
Below is a modified code that you could use (I have not tested this, but you should get the idea).
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]);
}
}
}
function DeleteNewSheets(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
var allowedSheetNames = ["My Stupid Sheet1", "Sheet 2"];
for (var i = sheets.length - 1; i >= 0; i--) {
var sheet = sheets[i];
var sheetName = sheet.getName();
if (!allowedSheetNames.includes(sheetName)) {
ss.deleteSheet(sheet);
}
}
}
Do a Trigger on DeleteNewSheets() onchange, it will delete all sheets except those two. Simple.