我有一个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)"
答案 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()
。>