何をしようとしていたか
- スプレッドシートの内容を取得する
- JSONで内容の結果を取得
- 結果をスプレッドシートに書き込むの
語彙力ないですがこんな感じです
どうしてハマったのか
GAS
function getJSON(name) {
var response = UrlFetchApp.fetch('https://***.json?screen_names=' + name);
var result = null;
var text = response.getContentText('utf-8');
if (text != '') {
var data = JSON.parse(text);
if (data.length == 1) {
result = data[0];
}
}
return result;
}
function addSheet() {
var id = '***'; //スプレッドシートのID
var spreadsheet = SpreadsheetApp.openById(id);
var sheet = spreadsheet.getActiveSheet();
var range = sheet.getRange(2, 2, 12); //2行目、2列目から縦に12セルの範囲
var values = range.getValues();
const user_ids = [];
values.forEach(function(item){
user_ids.push(getJSON(item[0]).id);
})
Logger.log(user_ids)
sheet.getRange(2, 3, user_ids.length, user_ids[0].length).setValues(user_ids);
}
バグりました
Exception: The parameters (number[]) don't match the method signature for SpreadsheetApp.Range.setValues.
addSheet @ コード.gs:27
って言われました。
作られた配列は
[hoge, fuga, piyo, ...]
でした。
大手検索サイトで調べてみると、
[[hoge], [fuga], [piyo], ...]
こんな形で出力するといいらしいです。
スプレッドシートから取得しても、この形が出てきます。
じゃあどうしたのか
簡単なことです
GAS
function addSheet() {
var id = '{ID}';
var spreadsheet = SpreadsheetApp.openById(id);
var sheet = spreadsheet.getActiveSheet();
var range = sheet.getRange(2, 2, 12);
var values = range.getValues();
const user_ids = [];
values.forEach(function(item){
+++ user_id = getJSON(item[0]).id
--- user_ids.push(getJSON(item[0]).id);
+++ user_ids.push([user_id]);
})
Logger.log(user_ids)
sheet.getRange(2, 3, user_ids.length, user_ids[0].length).setValues(user_ids);
}
これだけです。結果を[]角括弧
で囲んであげるといいだけでした。
作られた配列は
[[hoge], [fuga], [piyo], ...]
サクセスでした!!
まとめ
範囲を指定して書き込むときは[[hoge], [fuga], [piyo], ...]
で書き込む!