我是编程新手,我有一个简单的问题,但我很难找到答案。我想动态地覆盖A1中的单元格,直到数组的长度。这是我正在努力争取的第二个循环。该范围的(" A" + ii)的组合看起来并不专业" :-) 谢谢你的帮助。
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 :(得分:0)
您可以在批处理操作中执行此操作,而不是循环遍历数组并一次设置一个单元格的范围:ss.getRange("B8:B42").setValues(agencynames);
在修改agencynames
数组后执行此操作,只要数组和范围大小相同,这将设置该范围的所有值以匹配您的数组。当你可以使用批处理操作时,通常不鼓励在循环中调用服务,以获得性能和可读性。
有关详细信息,请参阅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]