Exception: The parameters (number[]) don’t match the method signature for SpreadsheetApp.Range.setValues.


【不具合内容】

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”]


コメントを残す

* 印は必須項目です。メールアドレスは公開されません。

次のHTMLタグと属性を使用することができます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください