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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

3454閲覧

GAS,webhookを使ったkintoneとスプレッドシート間データ連携(スプレッドシートに書き込めません)

yukiyama.

総合スコア11

kintone

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

Google Apps Script

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

0グッド

1クリップ

投稿2021/12/03 07:56

お世話になっております。下記のご相談があり、解決策のご教授願います。

実現したいこと

webhookでkintoneからデータを取得し、WebアプリとしてデプロイしたGASでスプレッドシートへデータを転記する。


エラー箇所

不明です。GAS側で実行ログを確認しましたが原因がどこに書いてあるかわかりませんでした、、

下記の項目は確認済なのでエラーの原因ではないと思われます。

  • リストkintoneのwebhook実行(毎回成功していました)
  • リストGASのバージョン更新忘れ

試したこと

下記のようにフィールドコートの指定部分に問題があるのではと思い、いくつかの書き方試してみましたがいずれもエラーでした。

google

1// 短縮案件名 2let project = params.record.短縮案件名.value; 3let project = params.record["短縮案件名"].value; 4let project = params.record.["短縮案件名"].value;

そもそもエラーの原因になっているのは別の部分なのでしょうか?
初学者のためわからないことばかりで、、、
すみませんが、宜しくお願い致します。


コード

google

1function doPost(e) { 2 3 // kintoneからの更新データをeで受け取ったものをパースする 4 let params = JSON.parse(e.postData.getDataAsString()); 5 6 // kintoneで付けたアプリ名を取得 7 let kintoneAppName = params.app.name; 8 9 //フィールドコート 10 //開始、終了、短縮案件名、工事番号、顧客名、現場住所、内容、当日担当者 11 12 13 // 開始日時 14 let start_date = params.record.開始.value; 15 start_date = new Date(start_date); 16 start_date = Utilities.formatDate(start_date, 'Asia/Tokyo', 'yyyy年MM月dd日 hh:mm'); 17 18 19 // 終了日時 20 let end_date = params.record.終了.value; 21 end_date = new Date(end_date); 22 end_date = Utilities.formatDate(end_date, 'Asia/Tokyo', 'yyyy年MM月dd日 hh:mm'); 23 24 // 短縮案件名 25 let project = params.record.短縮案件名.value; 26 27 // 工事番号 28 let number = params.record.工事番号.value; 29 30 31 // 顧客名 32 let customer = params.record.顧客名.value; 33 34 35 // 現場住所 36 let adders = params.record.現場住所.value; 37 38 39 // 内容 40 let contents = params.record.内容.value; 41 42 43 // 当日担当者 44 let manager = params.record.当日担当者.value; 45 46 47 // 取得したデータを整形 48 let output = []; 49 output.push.start_date; 50 output.push.end_date; 51 output.push.project; 52 output.push.number; 53 output.push.customer; 54 output.push.adders; 55 output.push.contents; 56 output.push.manager; 57 58 59 // スプレッドシートに出力 60 let sheetOutput = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1'); 61 sheetOutput.getRange(2, 1, output.length+1, output[0].length).setValues(output); 62 63 64}

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

修正

1.短縮案件名へのアクセスですが、
params.record["短縮案件名"].value;
または
params.record.短縮案件名.value;

という書き方が正と思われます。

2.配列に要素を追加するには push() 関数を使いますが、ドットでつなぐのではなく、
下記のように「push(~)」の括弧の中に追加したい要素を記述します。

diff

1 // 取得したデータを整形 2 let output = []; 3- output.push.start_date; # 間違い 4     ↓ 5+ output.push(start_date); # 正しい

 

全体を直すと下記のようになるかと思います。

js

1function doPost(e) { 2 3 // kintoneからの更新データをeで受け取ったものをパースする 4 let params = JSON.parse(e.postData.getDataAsString()); 5 6 // kintoneで付けたアプリ名を取得 7 let kintoneAppName = params.app.name; 8 9 //フィールドコート 10 //開始、終了、短縮案件名、工事番号、顧客名、現場住所、内容、当日担当者 11 12 13 // 開始日時 14 let start_date = params.record["開始"].value; 15 start_date = new Date(start_date); 16 start_date = Utilities.formatDate(start_date, 'Asia/Tokyo', 'yyyy年MM月dd日 hh:mm'); 17 18 19 // 終了日時 20 let end_date = params.record["終了"].value; 21 end_date = new Date(end_date); 22 end_date = Utilities.formatDate(end_date, 'Asia/Tokyo', 'yyyy年MM月dd日 hh:mm'); 23 24 // 短縮案件名 25 let project = params.record["短縮案件名"].value; 26 27 // 工事番号 28 let number = params.record["工事番号"].value; 29 30 31 // 顧客名 32 let customer = params.record["顧客名"].value; 33 34 35 // 現場住所 36 let adders = params.record["現場住所"].value; 37 38 39 // 内容 40 let contents = params.record["内容"].value; 41 42 43 // 当日担当者 44 let manager = params.record["当日担当者"].value; 45 46 47 // 取得したデータを整形 48 let output = []; 49 output.push(start_date); 50 output.push(end_date); 51 output.push(project); 52 output.push(number); 53 output.push(customer); 54 output.push(adders); 55 output.push(contents); 56 output.push(manager); 57 58 59 // スプレッドシートに出力 60 let sheetOutput = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1'); 61 sheetOutput.getRange(2, 1, output.length+1, output[0].length).setValues(output); 62 63 64}

投稿2021/12/04 02:32

編集2021/12/04 02:38
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukiyama.

2021/12/06 04:41

ご回答ありがとうございます。 ご指摘の箇所修正しました! ですが、やはりまだエラーになっていて動作しません、、、 コメントアウトしながら実行しエラー個所を探していくと、どうやら下記の最終行が原因のようでした。 sheetOutput.getRange(2, 1, output.length+1, output[0].length).setValues(output); 自分でも探していますが、可能でしたら引き続きご教授お願いします。
退会済みユーザー

退会済みユーザー

2021/12/06 10:07

sheetOutput.getRange(2, 1, 1, output.length).setValues([output]); とした場合どうでしょうか?
yukiyama.

2021/12/07 04:56

sheetOutput.getRange(2, 1, 1, output.length).setValue([output]); これで動きました!!!! 感動!!!! 本当に助かりました、ありがとうございます!! またなにか躓いたときはよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問