0

情况:

  • 我有一个 20 张的电子表格。
  • 我有其他脚本每天将其他电子表格中的工作表复制到此电子表格中-
  • 我需要每天从特定的电子表格中删除一些特定的工作表。

问题:

当脚本结束清除工作表时,电子表格挂起,我必须退出并重新输入电子表格。

如果有人可以在不挂电子表格的情况下帮助调整此脚本以使其正常工作,我将不胜感激。

脚本:

    function shellDeleteSheets(){
     var sheets = ['Sheet1','Sheet2','Sheet3','Sheet4','Sheet5']; 
     for (var s in sheets){
     deleteSheetName(sheets[s]);
      }
    }

      function deleteSheetName(stname) {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sh = ss.getSheetByName(stname);
      if(!sh) {
        return;
      }
      ss.setActiveSheet(sh);
      ss.deleteActiveSheet();
      Utilities.sleep(400);
      SpreadsheetApp.flush();

    }
4

1 回答 1

0

试试我使用的这个版本没有问题

function DeleteSheets(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ['sheet1','sheet2','sheet3']; 
  var numberOfSheets = ss.getSheets().length;
  for(var s = numberOfSheets-1; s>0 ; s--){ // in my case I never delete the first sheet
    SpreadsheetApp.setActiveSheet(ss.getSheets()[s]);
    var shName = SpreadsheetApp.getActiveSheet().getName();

    if(sheets.indexOf(shName)>-1){
      var delSheet = ss.deleteActiveSheet();
      Utilities.sleep(500);
    }
  }
    SpreadsheetApp.setActiveSheet(ss.getSheets()[0]);// send me back to first sheet
}

您当然可以使用名称数组作为函数的参数,或者 - 这就是我在某些情况下所做的 - 给出我需要保留的工作表的名称,在这种情况下 if 条件只是不同的。睡眠可以是 400 毫秒,不确定它有什么不同,我使用 500,因为有时我发现它更可靠......而且我(尝试)从不改变工作解决方案;-)


根据您的评论进行编辑:

要激活名为“更新”的工作表,只需更改代码的最后一行,如下所示:

SpreadsheetApp.setActiveSheet(ss.getSheetByName('Updated'));

另请注意,我将原始代码中的这一行移到了循环之外,对于这个小错误,我深表歉意^^

于 2013-06-21T19:41:59.247 回答