Google Script:在Google电子表格中删除特定工作表

时间:2013-06-21 18:56:42

标签: google-apps-script google-sheets

情况:

  • 我有一张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();

    }

1 个答案:

答案 0 :(得分: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'));

请注意我在原始代码中移动了这一行,在循环之外,对不起这个小错误^^