【不具合内容】
GAS(Google Apps Script)で配列をsetValuesでスプレッドシートに書き込む時に発生
【原因】
書き込もうとしているデータ配列が1次元配列のままとなっているため。スプレッドシートへは2次元配列で読み書き(getValues/setValues)を行う必要がある。
【対策内容】
1次元配列を2次元配列に変換してからsetValuesを実行する。
方法①
書き込み用の配列を用意し、書き込み用配列[]の中にデータ配列を入れる。
let dataArray = ["A","B","C","D"];
let writeArray = [dataArray];
この場合出来上がる書き込み用配列は以下のようになる。
writeArray[0][0] = “A”
writeArray[0][1] = “B”
writeArray[0][2] = “C”
writeArray[0][3] = “D”
方法②
任意の列数で折り返す2次元配列に変換する関数を使用する。関数の中でtmp_arrayを使用しているので、使用する側でwriteArray[]を用意する必要はなく、もとの配列が差し替わる。
function splitArray(array, col_num) {
var tmp_array = [];
for(var i = 0; i < array.length; i += col_num) {
tmp_array.push(array.slice(i, i + col_num));
}
return tmp_array;
}
function myFunction() {
let dataArray = ["A","B","C","D","E","F"];
dataArray = splitArray(dataArray, 1);
}
col_numに「1」を渡した場合、出来上がる書き込み用配列は以下のようになる。
dataArray[0][0] = [“A”]
dataArray[1][0] = [“B”]
dataArray[2][0] = [“C”]
dataArray[3][0] = [“D”]
dataArray[4][0] = [“E”]
dataArray[5][0] = [“F”]
col_numに「3」を渡した場合、出来上がる書き込み用配列は以下のようになる。
dataArray[0][0] = [“A”,”B”,”C”]
dataArray[1][0] = [“D”,”E”,”F”]