2016-04-27 72 views
-1

我是编程新手,我有这样一个简单的问题,但我很难找到答案。我想动态覆盖A1中的单元格直到数组的长度。这是我挣扎的第二个循环。该范围(“A”+ ii)的组合看起来并不“专业”:-) 感谢您的帮助。修改agencynames阵列后ss.getRange("B8:B42").setValues(agencynames);Google表格/ Javascript - >循环访问数组并将值设置为单元格

做到这一点,这将:

function selectmyagency() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var agencynames = ss.getRange("B8:B42").getValues(); 
    var myagency = ss.getRange("C3").getValue(); 

    var arrayLength = agencynames.length; 

    for (var i = 0; i < arrayLength; i++) { 
    if(agencynames[i] == myagency){ 
     //doNothing 
    } else { 
     agencynames[i] = "."; 
    }//endif 
    }//endfor 

    //overwrite Cell in Spreadsheet 
    for (var ii = 0; ii < agencynames.length; ii++) { 
    SpreadsheetApp.getActiveSheet().getRange("A"+ii).setValue(agencynames[ii]); 
    //SpreadsheetApp.getActiveSheet().getRange("A9").setValue(agencynames[ii]); 
    //SpreadsheetApp.getActiveSheet().getRange("A10").setValue(agencynames[ii]); 
    } 
}//endfunction 
+0

嘿安德烈,是您在这个问题不能正常工作,或者说,它只是看起来不正确?如果你只是想把整个'agencyNames'范围消灭掉,我可以提供更有效的答案。 –

+0

使问题成为话题,向我们展示什么不起作用。 –

回答

0

而是通过数组循环和设定范围在时间值一个单元格,可以在一个批处理操作,像这样做只要数组和范围的大小相同,就可以将该范围的所有值设置为与您的数组相匹配。出于性能和可读性的考虑,当您可以使用批处理操作时,通常不鼓励在循环中调用服务。

有关详细信息,请参阅Apps Script Best Practices

编辑:您的修改后的代码:

function selectmyagency() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var agencynames = ss.getRange("B8:B42").getValues(); 
    var myagency = ss.getRange("C3").getValue(); 

    var arrayLength = agencynames.length; 

    for (var i = 0; i < arrayLength; i++) { 
    if(agencynames[i] == myagency){ 
     //doNothing 
    } else { 
     agencynames[i] = "."; 
    }//endif 
    }//endfor 

    //overwrite Cell in Spreadsheet 
    ss.getRange("B8:B42").setValues(agencynames); 
}//endfunction 

一对夫妇多个指针:

  • 没有必要设置一个数组长度可变如果你只是修改元素本身而不是数组。
  • 当您使用getValues()时,您将得到一个数组数组而不是值的数组,即使它只是一个列。即。 [["value"],["value"],["value"]]而不是["value","value","value"]。在设置或获取该数组的值,你可能想使用,而不是agencynames[i][0]agencynames[i]
相关问题