Google Apps Scriptで複数の値はforではなくsetValuesを使う

setValuesとは

特定の範囲に複数の値(配列)を追加できるメソッド。

これとは別に語尾に「s」が付かないsetValueというものもあるのだが、JavaScriptのコーディング経験がある人だとtableタグの行と列のDOM構築のようにforを二重でループさせてsetValueを使ってしまっていることがある。

const sheet = SpreadsheetApp.getActiveSheet()
const row = 2
const data = [
  [1, 'foo', 'ryu'],
  [2, 'bar', 'ken'],
]

for (let i = 0; i < data.length; i++) {
  for (let j = 0; j < data[i].length; j++) {
    let _j = j
    sheet.getRange(row, ++_j).setValue(data[i][j])
  }
  row++
}

このようにforを二重でループさせて処理すると時間がかかるし、コードの可読性も悪くなってしまう。

setValuesを使用すればgetRangeで範囲を指定すれば配列を入れるだけで範囲内のセルに値をすべて入れることができる。

複数の値は処理途中に条件分岐などを含めないのであれば、必ずforではなくsetValuesで入れよう。

const sheet = SpreadsheetApp.getActiveSheet()
const row = 2
const data = [
  [1, 'foo', 'ryu'],
  [2, 'bar', 'ken'],
]
const rowNum = data.length
const colNum = data[0].length
sheet.getRange(row, 1, rowNum, colNum).setValues(data)