Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 通过脚本删除工作表_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 通过脚本删除工作表

Google apps script 通过脚本删除工作表,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有这样的代码: 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

我有这样的代码:

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()和上的一些信息

您的代码应该如下所示:

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]);

      }

    }       

  }

}

我将您硬写的工作表名称放在与“aux”工作表相同的数组中,以避免switch语句。它还可以控制您的“辅助”工作表不存在的情况

也许您在切换语句中犯了错误:case name==transp[c]应该是case name==transp[c][0]?不,这也不起作用:(据我所知,您试图删除一些工作表,一些是“辅助”中的列表)sheet,其他的都是硬写在你的代码上的,对吗?是的,Transp[c]将是sheet的名字,我用同一个数组在另一个函数中创建它们,效果很好,再次感谢Pierre-Marie Richard,向你学习总是很好的哈哈哈!