質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
kintone

kintone(キントーン)とは、サイボウズ社が提供する業務改善プラットフォームです。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

カーソルAPIを使ったGASでのkintoneレコード一括取得からスプレッドシートへの500件以上の出力について

kinpika
kinpika

総合スコア29

kintone

kintone(キントーン)とは、サイボウズ社が提供する業務改善プラットフォームです。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

1回答

0グッド

0クリップ

510閲覧

投稿2022/10/25 08:07

前提

https://www.shanaidx.com/kintone_data_get/ 
を参考に、kintoneアプリからGASでレコード情報を取得、
取得したデータをスプレッドシートに出力したいと思っています。

解決策をご存じの方がいらっしゃいましたらご教授お願いします。

問題点

レコード情報を取得→取得したデータをスプレッドシートに出力までは上手くいったが、500件以上のデータが書き込めず困っています(※元のアプリのデータは5000件あります)

コードの位置を変えてみたりしたがなかなかうまくいかないので、500件以上アプリのデータがある場合のスプレッドシートの出力方法を、もしくはヒントを教えてほしいです。

ソースコード

const api_url = 'https://xxxxxxxx.cybozu.com/'; const authorization = encodeBase64Text('xxxxxxxx:xxxxxxxx'); function myFunction() { let app_id = 16; let data = { 'app':app_id, 'fields': ['レコード番号','レコード作成日時','メールアドレス','チェック'], 'query': 'レコード作成日時 = THIS_YEAR() order by レコード番号 asc', 'size': 500 } let result = CreateCursor(data); let records_data = GetCursor(result.id); console.log(records_data.records);//consoleにレコード情報を表示  //レコード情報をすべて取得するまで繰り返す while(records_data.next){ records_data = GetCursor(result.id); console.log(records_data.records);//consoleにレコード情報を表示 // 取得したデータを整形 var output = []; records_data["records"].forEach(function(record){ var row = []; row.push(record["レコード番号"].value); row.push(Utilities.formatDate(new Date(record["レコード作成日時"].value), 'JST', 'yyyy/M/d HH:mm')); row.push(record["メールアドレス"].value); row.push(record["チェック"].value); output.push(row); }); // スプレッドシートに出力 var sheetOutput = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1'); sheetOutput.getRange(2, 1, output.length, output[0].length).setValues(output); } } //カーソルの作成 function CreateCursor(data) { let headers = { 'Content-Type':'application/json', 'X-Cybozu-Authorization':authorization }; let options = { 'method' : 'post', "headers" : headers, 'payload' : JSON.stringify(data) }; let response = UrlFetchApp.fetch(api_url+'/k/v1/records/cursor.json', options); return JSON.parse(response); } //カーソルIDからレコード情報の取得 function GetCursor(id) { let headers = { //'Content-Type':'application/json', 'X-Cybozu-Authorization':authorization }; let options = { 'method' : 'get', "headers" : headers }; let response = UrlFetchApp.fetch(api_url+'/k/v1/records/cursor.json?id='+id, options); return JSON.parse(response); } // Base64エンコード function encodeBase64Text(text) { return Utilities.base64Encode(text, Utilities.Charset.UTF_8) }

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

ベストアンサー

下記のように、一回書き込むたびに書き込み開始行をずらしていけばよいのではないでしょうか。

js

1function myFunction() { 2 let app_id = 16; 3 let data = { 4 'app':app_id, 5 'fields': ['レコード番号','レコード作成日時','メールアドレス','チェック'], 6 'query': 'レコード作成日時 = THIS_YEAR() order by レコード番号 asc', 7 'size': 500 8 } 9 let result = CreateCursor(data); 10 let records_data = GetCursor(result.id); 11 console.log(records_data.records);//consoleにレコード情報を表示 12 13 // 出力対象のスプレッドシート 14 var sheetOutput = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1'); 15 // 書き込み開始行 16 let line = 2; 17 //レコード情報をすべて取得するまで繰り返す 18 while(records_data.next){ 19 records_data = GetCursor(result.id); 20 console.log(records_data.records);//consoleにレコード情報を表示 21 22 // 取得したデータを整形 23 var output = []; 24 records_data["records"].forEach(function(record){ 25 var row = []; 26 27 row.push(record["レコード番号"].value); 28 row.push(Utilities.formatDate(new Date(record["レコード作成日時"].value), 'JST', 'yyyy/M/d HH:mm')); 29 row.push(record["メールアドレス"].value); 30 row.push(record["チェック"].value); 31 32 output.push(row); 33 }); 34 35 sheetOutput.getRange(line, 1, output.length, output[0].length).setValues(output); 36 line += output.length; 37 } 38}

投稿2022/10/25 10:31

編集2022/10/25 10:39
qnoir

総合スコア7910

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

kinpika

2022/10/26 09:17

ありがとうございます!! qnoirさんから頂いた回答を元にコードを修正した結果、上手く思い通りの動作ができるようになりました!
kinpika

2022/10/26 09:24

最終的に以下のようになりました function myFunction() { // 出力対象のスプレッドシート let sheetOutput = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1'); // 書き込み開始行 let line = 2; let app_id = 16; let data = { 'app':app_id, 'fields': ['レコード番号','レコード作成日時','メールアドレス','チェック'], 'query': 'レコード作成日時 = THIS_YEAR() order by レコード番号 asc', 'size': 500 } let result = CreateCursor(data); let records_data = GetCursor(result.id); console.log(records_data.records);//consoleにレコード情報を表示 // 取得したデータを整形 var output = []; records_data["records"].forEach(function(record){ var row = []; row.push(record["レコード番号"].value); row.push(Utilities.formatDate(new Date(record["レコード作成日時"].value), 'JST', 'yyyy/M/d HH:mm')); row.push(record["メールアドレス"].value); row.push(record["チェック"].value); output.push(row); }); sheetOutput.getRange(line, 1, output.length, output[0].length).setValues(output); line += output.length; //レコード情報をすべて取得するまで繰り返す while(records_data.next){ records_data = GetCursor(result.id); console.log(records_data.records);//consoleにレコード情報を表示 // 取得したデータを整形 var output = []; records_data["records"].forEach(function(record){ var row = []; row.push(record["レコード番号"].value); row.push(Utilities.formatDate(new Date(record["レコード作成日時"].value), 'JST', 'yyyy/M/d HH:mm')); row.push(record["メールアドレス"].value); row.push(record["チェック"].value); output.push(row); }); sheetOutput.getRange(line, 1, output.length, output[0].length).setValues(output); line += output.length; } }

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

kintone

kintone(キントーン)とは、サイボウズ社が提供する業務改善プラットフォームです。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。