删除Google Script中除了指定的所有工作表

时间:2014-04-15 06:35:29

标签: javascript google-sheets

我正在尝试删除除特定名称(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;
    }
 }
}

1 个答案:

答案 0 :(得分:1)

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

  2. getSheets返回一系列工作表。因此,当您编写var sheet = ss.getSheets()[0];时,实际上是在变量sheet中分配数组的第一个元素。因此,在case语句中,您总是指同一张表。因此,您应该使用sheet.getSheetName() === "INPUT"

  3. 而不是sheets[i].getSheetName() === "INPUT"
  4. 要删除工作表,您还可以使用deleteSheet功能。最近在Google Scripts中添加了此内容。

  5. 下面是您可以使用的修改后的代码(我没有对此进行测试,但您应该明白这一点。)

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