Quantcast
Channel: 配列タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 757

GASでスプレッドシートに書き込むのにハマった話

$
0
0
何をしようとしていたか スプレッドシートの内容を取得する JSONで内容の結果を取得 結果をスプレッドシートに書き込むの 語彙力ないですがこんな感じです ※具体的には、Twitterのユーザーネームをスプレッドシートから取得し、JSONからidを持ってきて書き込むということをしようとしていました どうしてハマったのか 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 = '1z1c9W6dS37n-OL-zyFQtv659MwrxTIHqqOhoYUdwoH0'; 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], ...]で書き込む!

Viewing all articles
Browse latest Browse all 757

Trending Articles