获取超出范围的单元格引用'在Google Apps脚本中

时间:2018-04-12 01:48:14

标签: google-apps-script google-sheets

所以我创建了一个程序,当if条件满足时,该程序应该标记多个列中的一个,因此我们可以对我们的营销部门进行分类。

如果查看最后一行代码,您将看到sheet(它封装了所有内容)getRange(它定义了下一个部分,getCell应该在其中的范围),然后您将看到getCell。

我在获取单元格变量中添加了+1,因为它不被视为数组,因此不会以零开头,这意味着它的总和为4将从第四行开始(而不是第五行)数组)。问题是我得到一个" Cell引用超出范围,谷歌脚本编辑器将突出显示上述行。

如果获取范围在工作表内,并且getCell在getRange中,我不知道如何发生这种情况。

function myFunction() {
  var app = SpreadsheetApp;
  var sheet = app.getActiveSpreadsheet().getActiveSheet(); 
  var lr= sheet.getLastRow();

  var dataRangeContact = sheet.getRange("B4:B"+lr);
  var dataContact = dataRangeContact.getValues();
  var dataRangeComp= sheet.getRange("M4:M"+lr);
  var dataComp=dataRangeComp.getValues();
  var IndigoColumn= sheet.getRange("L4:L"+lr);

  var validIndigoColumn =12;
  var validLabColumn=11;
  var validDesColumn=10;
  var validPocColumn=9;
  var validArtColumn=8;
  for(var i=3; i<=lr; i++) {         

    var lr=sheet.getLastRow();
    var rowTwo=dataContact[i].toString();
    var rowThirteen=dataComp[i].toString();


    if (rowThirteen=="University Lab") { 
      if (rowTwo.match(/(process engineer|analytical   chemist|scientist|sr.scientist|research scientist|test Engineer|Medical Devices professional|scientific)/i)) {
        sheet.getRange(4,12,lr).getCell(i+1,validIndigoColumn).setValue("Y");
    }
  }
}}

1 个答案:

答案 0 :(得分:0)

我认为这是相同的功能重写有点不同。它很可能会跑得更快。它只有一个范围,因此可能更容易避免范围错误。请记住,行和列从1开始,数组索引从0开始。 我有时会这样做,以保持他们的直接。

enter image description here

无论如何,这是我缩短版的功能。

function myFunction(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet(); 
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  for(var i=3;i<vA.length;i++){
    if(vA[i][12]=='University Lab' && vA[i][1].toString().match(/(process engineer|analytical   chemist|scientist|sr.scientist|research scientist|test Engineer|Medical Devices professional|scientific)/i)){
        vA[i][11]='Y';
      }
  }
  rg.setValues(vA);//rewrites the data into the range including all changes all at one time
}

我无法测试它。我希望这有帮助。如果我误解了你的问题,请告诉我。我总是可以删除我的答案。