Google表格/ Javascript - >循环遍历数组并将值设置为单元格

时间:2016-04-27 10:35:19

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

我是编程新手,我有一个简单的问题,但我很难找到答案。我想动态地覆盖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

1 个答案:

答案 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]