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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

2201閲覧

Google Formsの選択式グリッドを引用したい

mutcha

総合スコア7

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2021/02/15 13:25

前提・実現したいこと

Google Formsで回答があった際にメールを自動送信するスクリプトを作成しました。
しかし、選択式グリッドの回答で列を引用しようとするとエラーになります。
グリッドであれば列と回答を、それ以外は回答だけを表示したいのですが、
どのようにすれば宜しいでしょうか。

発生している問題・エラーメッセージ

関数:sendForm エラーメッセージ:Exception:アイテムタイプのコンバージョンが無効です:DATE トリガー:formSubmit

該当のソースコード

function sendForm(e){ // 件名 var subject = "報告書が記入されました"; // 本文 var body = "内容は下記の通りです。"; // メール送信先 var to = "xxxx"; var itemResponses = e.response.getItemResponses(); for (var i = 0; i < itemResponses.length; i++) { var itemResponse = itemResponses[i]; var question = itemResponse.getItem().getTitle(); var type = itemResponse.getItem().getType(); var rows = itemResponse.getItem().asGridItem().getRows(); var answer = itemResponse.getResponse(); // 回答項目 body += "\n\n【" + question + "】\n\n"; // 回答内容 if(type === 'GRID'){ body +=rows + ": " + answer; }else{ body += answer; } } MailApp.sendEmail({to:to,subject:subject, body:body}) }

試したこと

「Exception:アイテムタイプのコンバージョンが無効です:DATE」について
ネットで調べてみましたが、アイテムタイプもコンバージョンも正しい意味が見つかりません。
DATEはgetypeの返り値のことかもしれませんが、やはり分かりません。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

選択式グリッドの回答で列を引用しようとするとエラーになります。

グリッドであれば列と回答を、それ以外は回答だけを表示したい

やりたいこととコードが合ってないです。(あと列ではなく行では?)

itemResponse.getItem().asGridItem().getRows(); を全ての設問に対して実行してるので、選択式グリッド式でない質問の際にエラーとなっているのかと。

上記のコードを if(type === 'GRID')の中へ移動して、GRIDと判別された時にだけ実行するように修正してみてください。

投稿2021/02/16 02:31

sawa

総合スコア3002

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

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

mutcha

2021/02/16 17:11 編集

下記のコードで、行と列を取得することが出来ました。 いつも大変に有難うございます! 「type == 'GRID'」では成功し、「type === 'GRID'」では失敗しました(厳密すぎる?)。 GRIDの複数行を並べるために、こちらを使ったところきれいに出来ました。 「for(var j = 0; j < rows.length; j++)」 ------------------------------------------------------------------------------------- function sendForm(e){ // 件名 var subject = "報告書が記入されました"; // 本文 var body = "内容は下記の通りです。"; // メール送信先 var to = "xxxx"; var itemResponses = e.response.getItemResponses(); for (var i = 0; i < itemResponses.length; i++) { var itemResponse = itemResponses[i]; var type = itemResponse.getItem().getType(); var question = itemResponse.getItem().getTitle(); var answer = itemResponse.getResponse(); if(type == 'GRID'){   var rows = itemResponse.getItem().asGridItem().getRows();  // 回答項目   body += "\n\n【" + question + "】\n\n";  for(var j = 0; j < rows.length; j++){ var rowname = rows[j]; var answercol = answer[j];   // 回答内容   body += rowname + ": " + answercol + '\n'; }  }else{ // 回答項目  body += "\n\n【" + question + "】\n\n";  // 回答内容 body += answer; } } MailApp.sendEmail({to:to,subject:subject, body:body}) } ------------------------------------------------------------------------------------- ※\はバックスラッシュ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問