GASでスプレッドシートに配列をsetValuesで書き込もうとしたときに発生しました。
Exception: パラメータ(number[])が SpreadsheetApp.Range.setValues のメソッドのシグネチャと一致しません。
Exception: The parameters (number[]) don’t match the method signature for SpreadsheetApp.Range.setValues.
というエラーについて解説します。
GASのスキルアップはここから▼
エラーメッセージが表示された
このようなコードでエラーが表示されました。
function twoDimensionalArray() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName("シート1");
const array = [['A1', 'B1', 'C1'], ['A2', 'B2', 'C2'], ['A3', 'B3', 'C3'], ['A4', 'B4', 'C4']];
sheet.getRange(1,1,1,3).setValues(array[0]);
}
配列0番目には2次元配列の[‘A1’, ‘B1’, ‘C1’]が入っているはずですが…。なぜ…?
Exception: The parameters (number[]) don’t match the method signature for SpreadsheetApp.Range.setValues.とは?
Exception: The parameters (number[]) don’t match the method signature for SpreadsheetApp.Range.setValues. とは…?
このエラー メッセージは、メソッド呼び出しで指定されたパラメーターの数またはパラメーターの型が、メソッドが受け取ると予想されるパラメーターの数と型を定義するメソッド シグネチャと一致しないことを示します。 メソッド シグネチャには、メソッド名、そのパラメーターの数と型、および戻り値の型が含まれます。
このエラー メッセージは、メソッドが予想とは異なる数または型のパラメーターで呼び出されていることを示しています。 このエラーを修正するには、メソッド シグネチャで定義された正しい数と型のパラメーターでメソッドが呼び出されるようにします。
[rml_read_more]
つまりどういうこと・・・?
データの配列が1次元になっているので、setValuesでエラーが出ているようです。なので、setValuesにどうにかして2次元配列でセットすれば解決しそうです。
const array = [['A1', 'B1', 'C1'], ['A2', 'B2', 'C2'], ['A3', 'B3', 'C3'], ['A4', 'B4', 'C4']];
const array2 = [array[0]];
sheet.getRange(1,1,1,3).setValues(array2);
配列に配列を格納して2次元配列化してみました。
データが書き込まれました!
まとめ
1次元配列でsetValuesを使うと「Exception: The parameters (number[]) don’t match the method signature for SpreadsheetApp.Range.setValues.」が表示されるようです。
その場合は、どうにかして2次元配列でセットしてみるとエラーが消えてセットできるようになります。