javascript 删除Google Script中除指定工作表以外的所有工作表

soat7uwm  于 2023-05-16  发布在  Java
关注(0)|答案(2)|浏览(132)

我正在尝试删除除特别命名的工作表(INPUT、Template、Summary)之外的所有工作表。这对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;
    }
 }
}
ffdz8vbo

ffdz8vbo1#

1.将ActiveSpreadSheet赋值给变量后,就可以使用该引用。在代码中,var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();可以替换为var sheets = ss.getSheets();,因为变量ss包含对活动电子表格的引用。

  1. getSheets返回一个工作表数组。所以当你写var sheet = ss.getSheets()[0];时,你实际上是在变量sheet中赋值数组的第一个元素。因此,在case语句中,您总是引用同一个工作表。因此,不应使用sheet.getSheetName() === "INPUT",而应使用sheets[i].getSheetName() === "INPUT"
    1.要删除工作表,也可以使用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]);
    }
  }
}
w46czmvw

w46czmvw2#

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);
    }
  }
}

在DeleteNewSheets()onchange上执行触发器,它将删除除这两个工作表之外的所有工作表。很简单

相关问题