当脚本结束以清除工作表时,电子表格会挂起,我必须退出并重新进入电子表格。
如果有人可以帮助调整此脚本以便在不挂断电子表格的情况下工作,我将不胜感激。
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();
}
答案 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'));
请注意我在原始代码中移动了这一行,在循环之外,对不起这个小错误^^