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

时间:2019-07-03 13:39:05

标签: google-apps-script google-sheets

我有一个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");
  }

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

1 个答案:

答案 0 :(得分:3)

要求:

根据名称删除工作表。


解决方案:

使用ar.write.csv('/bla', header=True) 获取工作表对象,然后将其传递给您的ar = ar.coalesce(1)

Sub tgr()

    Dim FS As Worksheet
    Dim lb As Shape
    Dim i As Long

    Set FS = ActiveWorkbook.Worksheets("FS")
    For i = FS.Columns("A").Column To FS.Cells(1, FS.Columns.Count).End(xlToLeft).Column
        Set lb = FS.Shapes.AddFormControl(xlListBox, (i - 1) * 100 + 10, 10, 100, 100)
        With lb
            .ControlFormat.MultiSelect = 3
            .ControlFormat.ListFillRange = FS.Range(FS.Cells(1, i), FS.Cells(FS.Rows.Count, i).End(xlUp)).Address(External:=True)
        End With
    Next i

End Sub

说明:

当前,您正在将字符串getSheetByName()传递到deleteSheet(),这是行不通的,因为它期望使用工作表对象而不是字符串。只要上面的代码正常工作并且ss.deleteSheet(ss.getSheetByName(thisTab)); 与工作表名称完全匹配,您要做的就是调用thisTab来获取工作表对象,然后将其传递给deleteSheet()


参考文献:

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