我有这个代码:
function deleteSheets(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
var transp = ss.getSheetByName("aux").getRange("A2:A").getValues();
var i =0;
var c = 0;
var name;
for(i in sheets){
for(c in transp){
var nome_transp = transp[c][0];
switch(name = sheets[i].getName()){
case name == transp[c]:
ss.deleteSheet(sheets[i]);
break;
case name == "aux":
ss.deleteSheet(sheets[i]);
break;
case name == "nulos":
ss.deleteSheet(sheets[i]);
break;
case name == "Sem Transportadora":
ss.deleteSheet(sheets[i]);
break;
}
}
}
}
我可以通过调试看到“sheets”和“transp”中的计数器和值是正确的,但它们永远不会删除它们各自的工作表,“aux”、“nulos”和“Sem transportadora”也没有。是的,工作表的名称与数组相同。
任何见解?提前致谢!
最佳答案
我认为问题出在您的字符串比较方法上。您应该使用 le localeCompare() 方法而不是逻辑比较方法。
关于 localeCompare() 的一些信息 on w3schools并在 this SO question
您的代码应如下所示:
function deleteSheets(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
var transp = new Array();
var auxSheet = ss.getSheetByName("aux")
if(auxSheet != null){
if(auxSheet.getLastRow() > 1){
transp = auxSheet.getRange(2, 1, ss.getSheetByName("aux").getLastRow()-1).getValues();
}
}
var i =0;
var c = 0;
transp.push(["aux"]);
transp.push(["nulos"]);
transp.push(["Sem Transportadora"]);
for(i in sheets){
var sheetName = sheets[i].getName();
for(c in transp){
var name = transp[c][0].toString();
if(name.localeCompare(sheetName) == 0){
ss.deleteSheet(sheets[i]);
}
}
}
}
我将您硬写的工作表名称放在与您在“辅助”工作表上相同的数组中,以避免使用 switch 语句。它还控制您的“辅助”表不存在的情况
关于google-apps-script - 通过脚本删除工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43936740/