【问题标题】:Service error: Spreadsheets using isblank()服务错误:使用 isblank() 的电子表格
【发布时间】:2017-03-29 18:15:58
【问题描述】:

两天后我遇到了一个大问题,我的功能不再起作用了:/ “if (cell.isBlank())”处的“服务错误:电子表格”

    function miseEnForme(){
  var classeur = SpreadsheetApp.getActive();
  var feuilleAdm = classeur.getSheetByName("SuiviAdministratif");

  var lastRow;
  for (var row = 3; row < 1000; row++) {
    var cell=feuilleAdm.getRange(row,3);
    if (cell.isBlank()) {
      lastRow =row;
      break;
    }
  }

  for (var i =3; i<lastRow;i++){
   if (feuilleAdm.getRange("B"+i).getDisplayValue()=="RS" || feuilleAdm.getRange("B"+i).getDisplayValue()=="RP" || feuilleAdm.getRange("B"+i).getDisplayValue()=="RD")
     feuilleAdm.getRange("SuiviAdministratif!A"+i+":AB"+i).setBackground("red");

   if (feuilleAdm.getRange("B"+i).getDisplayValue()=="C")
     feuilleAdm.getRange("SuiviAdministratif!A"+i+":AB"+i).setBackground("#00ff00");

   if (feuilleAdm.getRange("B"+i).getDisplayValue()=="O")
     feuilleAdm.getRange("SuiviAdministratif!A"+i+":AB"+i).setBackground("white");
  }
}

是我的错还是谷歌改变了什么? 如何解决问题?

谢谢

【问题讨论】:

  • 它根本不运行还是在几次迭代后抛出此错误?您能否记录行 (Logger.log(row)) 以确定哪一行出现问题并检查该行是否有不同的数据?

标签: javascript google-apps-script google-sheets spreadsheet


【解决方案1】:

查看此link。我猜代码没有问题。只是 Google Servers 试图诱使您使用更面向批处理的方法。例如,您可以通过一次调用var datA=sheet.getDataRange().getValues(); 来获取所有数据,然后您会将所有数据保存在一个二维数组中。谷歌服务器会更容易处理您的流程,并且它会为您提供更好的性能。我将复制您的代码,看看是否可以为您简化它。也许你可以告诉我你的数据是什么样的。

我没有测试过这段代码。如果您可以与我分享您的一些数据,我将很高兴这样做。不过,这应该非常接近。我尝试遵循您使用的相同基本方法,以便您更容易弄清楚发生了什么。

function miseEnForme()
{
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sht = ss.getSheetByName("SuiviAdministratif");
  var datrng = sht.getDataRange();
  var datA = datrng.getValues();//datA is a 2 dimensional array starts at zero
  var lastCol = datrng.getLastColumn();

  for(var i=2;i<datA.length;i++)
  {
    if(datA[1][i] == ("RS" || "RP" || "RD"))
    {
      sht.getRange(i+1,1,1,lastCol).setBackground('#ff0000');
    }
    if(datA[1][i] == "C")
    {
      sht.getRange(i+1,1,1,lastCol).setBackground('#00ff00');
    }
    if(datA[1][i] == "O")
    {
      sht.getRange(i+1,1,1,lastCol).setBackground('#ffffff');
    }
  }
}

【讨论】:

    【解决方案2】:

    正如 Cooper 所说,您的代码不是这里的问题。 否则,一些解决方法会帮助您:

    function miseEnForme(){
      var classeur = SpreadsheetApp.getActive();
      var feuilleAdm = classeur.getSheetByName("SuiviAdministratif");
    
      // getLastRow() return the value of the last row used in the sheet
      var lastRow = feuilleAdm.getLastRow();
    
      for (var i =3; i<lastRow;i++){
       if (feuilleAdm.getRange("B"+i).getDisplayValue()=="RS" || feuilleAdm.getRange("B"+i).getDisplayValue()=="RP" || feuilleAdm.getRange("B"+i).getDisplayValue()=="RD")
         feuilleAdm.getRange("SuiviAdministratif!A"+i+":AB"+i).setBackground("red");
    
       if (feuilleAdm.getRange("B"+i).getDisplayValue()=="C")
         feuilleAdm.getRange("SuiviAdministratif!A"+i+":AB"+i).setBackground("#00ff00");
    
       if (feuilleAdm.getRange("B"+i).getDisplayValue()=="O")
         feuilleAdm.getRange("SuiviAdministratif!A"+i+":AB"+i).setBackground("white");
      }
    }
    

    有关 getLastRow 方法的更多信息:https://developers.google.com/apps-script/reference/spreadsheet/sheet#getLastRow()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多