如何让deleteSheet适用于复杂的工作表名称

Rob*_*ell 0 google-sheets google-apps-script

我有一个 Google 插件,可以管理 Google 电子表格中的几张工作表。它所做的事情之一是根据日期删除工作表,日期是它删除的工作表的名称。在我当前的开发阶段,我还添加了删除包含日期和其他术语的工作表的功能"script 6/5/2019",例如。

我使用与以日期命名的工作表相同的代码并对其进行了一些调整,但在删除工作表时它会返回错误:"Cannot find method deleteSheet(string)"

 if(sRemove==true) {
  SpreadsheetApp.getActiveSpreadsheet().toast('Finding Old Scripts', 'Status',3);
    for (var i = ss.getNumSheets()-1; i >= 0; i--) {
    
        var thisTab = ss.getSheets()[i].getName();
        if(thisTab.substr(0,6) =="script") {
        Logger.log(i+" "+thisTab+" is a script");
        var tabDate = new Date(thisTab.substr(8)); 
        //8 is the first digit of the date
        Logger.log(tabDate);
        var thisDate = new Date(todayDate);
  
        var patt = new RegExp("s");
        var res = patt.test(thisTab);
        Logger.log(i+" "+res);

        if(tabDate<thisDate && res==true) { 
           var ss = SpreadsheetApp.getActiveSpreadsheet();
           //ss.setActiveSheet(ss.getSheetByName(thisTab));
           //ss.deleteActiveSheet(ss.getSheetByName(thisTab));   
           Logger.log(thisTab);
           ss.deleteSheet(thisTab);
           tabsGone++;
        }
     }
  }
  ui.alert(tabsGone+" Sheets Removed");
  }
Run Code Online (Sandbox Code Playgroud)

Logger.log返回要删除的工作表的正确名称,但删除工作表会返回错误"Cannot find method deleteSheet(string)"

ros*_*oss 5

要求:

根据名称删除工作表。


解决方案:

用于getSheetByName()获取工作表对象,然后将其传递给您的deleteSheet()

ss.deleteSheet(ss.getSheetByName(thisTab));
Run Code Online (Sandbox Code Playgroud)

解释:

目前您正在将字符串传递thisTabdeleteSheet(),这将不起作用,因为它需要一个工作表对象,而不是字符串。只要上面的代码工作正常并且与thisTab您的工作表名称完全匹配,您所需要做的就是调用getSheetByName(thisTab)以获取工作表对象,然后将其传递给deleteSheet().


参考:

  1. getSheetByName(string)
  2. deleteSheet(sheet)