从 Google 个工作表上的主菜单以外的所有工作表中删除 3 列

Remove 3 columns from all sheets except Main Menu on Google Sheets

我没有编程背景,但我正在尝试在 Google 工作表上编写一个脚本,以删除工作簿中除 "Main Menu" 之外的前 3 列。我有 61 个标签,所以我不想单独删除它们。因此,以下是我通过谷歌搜索设法得出的结果。我一直看到错误 "Cannot find method deleteColumns()." 任何帮助将不胜感激。

function QuickDelete() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sss = ss.getSheets();

  for (i = 0; i < sheets.length; i++) {
     switch(sss[i].getSheetName()) {
     case "Main Menu":
         break;
     default:
        ss.deleteColumns(sss[i]);
    }
  }
}

我发现有两个问题需要解决。

  1. 您正在循环 sheets。但是你应该循环 sss.
  2. deleteColumns() method 需要应用于 sheet 即 sss[i]

类似于 sss[i].deleteColumns(columnPosition, howMany)

function QuickDelete() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sss = ss.getSheets();
  var columnPosition = 1; // Delete from the 1st column
  var howMany = 3; // Delete 3 columns

  for (i = 0; i < sss.length; i++) {
    switch(sss[i].getSheetName()) {
      case "Main Menu":
        break;
      default:
        sss[i].deleteColumns(columnPosition, howMany)
    }
  } 
}

祝一切顺利。

  • 在您的 for 循环中,您正在使用之前未定义的 sheets。您必须将代码中的 sss 更改为 sheets 或反之亦然。

  • 你要给deleteColumns提供两个参数,first column要删除的位置和number of columns要删除的位置。在您的情况下,分别为 13

所以你的代码可能是这样的:

function QuickDelete() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  for (i = 0; i < sheets.length; i++) {
    if (sheets[i].getSheetName() !== "Main Menu") {
      sheets[i].deleteColumns(1, 3)
    }
  }
}

此外,如果有许多 values 您必须检查您的 expression,则 switch 语句是有意义的。在你的情况下,我最好使用 if 来检查 sheet 的名称是否为 Main Menu.

  • 参考:

https://developers.google.com/apps-script/reference/spreadsheet/sheet#deleteColumns(Integer,Integer) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else