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

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

新規登録して質問してみよう
ただいま回答率
86.12%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

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

Google Apps Script

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

解決済

GAS 任意のスプレッドシートにフォームの回答を反映させる際にチェックボックスのチェック項目をすべて反映させたい

e-y
e-y

総合スコア3

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

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

Google Apps Script

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

1回答

0リアクション

0クリップ

232閲覧

投稿2022/09/08 12:51

前提

フォーム送信時に、任意のスプレッドシートにフォームの回答を反映させ、任意の宛先に自動通知メールが飛ぶようにしたいのですが
任意のスプレッドシートが2種類あり(PDF、エクセル)、それぞれに必要な項目を該当セルに反映させたときに、チェックボックス
の回答が一部しか拾えない状態です。

実現したいこと

  • 任意のスプレッドシート(今回は2種類あり)に、フォームで複数選択したチェックボックスの回答を反映させたい。
  • チェックボックスの質問項目が複数あり、回答必須(最低1つはどれかにチェックが必要)のものと、

   チェックゼロでもOKな項目があるため、チェックゼロでもOKとする処理方法についても教えていただきたいです。

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

チェックボックスにチェックされた複数項目のうち、ひとつめしか反映されない状態です。

該当のソースコード

GAS

//フォーム送信時にPDFとスプシを添付して指定宛先にメールを送信 // FormApp.getActiveForm() function myFunction(event) { //今日の日付 var request_date = new Date(); // フォーム var res = event.response.getItemResponses(); var staff_name; var cc_mailaddress; var proposal_num; var project_title; var address; var resuest_timing; var resuest;  //以下60項目くらいあり for (var n in res) { var item = res[n]; var name = item.getItem().getTitle(); var value = item.getResponse(); switch (name) { case '担当': staff_name = value; break; case 'CC送付先': cc_mailaddress = value; break; case '番号': proposal_num = value; break; case '件名': project_title = value; break; case '住所': address = value; break; case '依頼タイミング': resuest_timing = value; break; case '依頼内容': resuest = value; break;   //以下60項目くらいあり } } // スプレッドシートURLから抽出したIDを入力 var ssid1 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; var ss = SpreadsheetApp.openById(ssid1); // 変換元のスプレッドシート名(タブ名) var pdfss = ss.getSheetByName("【依頼】"); var sheetid = ss.getActiveSheet().getSheetId(); pdfss.getRange("U3").setValue(request_date); //依頼日 pdfss.getRange("C3").setValue(staff_name); //担当 pdfss.getRange("H3").setValue(cc_mailaddress); //CC送付先(メールアドレス) pdfss.getRange("F5").setValue(proposal_num); //番号 pdfss.getRange("F9").setValue(project_title); //件名 pdfss.getRange("F10").setValue(address); //住所 pdfss.getRange("K5").setValue(resuest_timing); //依頼タイミング pdfss.getRange("F6").setValue(resuest); //依頼内容 //チェックボックス(複数回答可)必須項目  //以下60項目くらいあり SpreadsheetApp.flush(); // 以下PDF化コード(サイズ=A4) var url = "https://docs.google.com/spreadsheets/d/SSID/export?".replace("SSID", ssid1); //////////// var url_ext = []; var opts = { format: "pdf", size: "A4", fzr: "false", portrait: "true", gridlines: "false", printtitle: "false", pagenumbers: "false", fitw: "true", sheetnames: "false", gid: sheetid }; // 上記のoptsのオプション名と値を「=」で繋げて配列url_extに格納 for (optName in opts) { url_ext.push(optName + "=" + opts[optName]); } // url_extの各要素を「&」で繋げる var options = url_ext.join("&"); Logger.log(options) try { // API使用のためのOAuth認証 var token = ScriptApp.getOAuthToken(); var response = UrlFetchApp.fetch(url + options, { headers: { "Authorization": "Bearer " + token } }); // Googleドライブ上のPDF格納先フォルダからIDを入力 var folder = DriveApp.getFolderById("yyyyyyyyyyyyyyyyyyyyyyyyyyyyy"); // PDFファイルを作成:ファイル名「番号_依頼(依頼タイミング)yyMMdd.pdf」 var pdfName = proposal_num + "_" + project_title + "(" + resuest_timing + ")" + Utilities.formatDate(request_date, "JST", "yyMMdd") + '.pdf'; var pdf = response.getBlob().setName(pdfName); folder.createFile(pdf); // テンプレートシートの取得 var ssid2 = 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz'; var sheetname2 = 'フォーマット'; // 変換元のシート名(タブ名) var ss2 = SpreadsheetApp.openById(ssid2); var sheet = ss2.getSheetByName(sheetname2); // テンプレートシートの内容をフォーム入力値に置き換える。 sheet.getRange("A4").setValue(staff_name); sheet.getRange("A5").setValue(Utilities.formatDate(request_date, "JST", "yy/MM/dd")); sheet.getRange("C7").setValue(proposal_num); sheet.getRange("C8").setValue(project_title); sheet.getRange("C9").setValue(aaa); sheet.getRange("C10").setValue(bbb); sheet.getRange("C11").setValue(resuest); //チェックボックス(複数回答可)必須項目 sheet.getRange("C15").setValue(ccc); //チェックボックス(複数回答可)チェックなしでもOK sheet.getRange("G15").setValue(ddd); //チェックボックス(複数回答可)チェックなしでもOK sheet.getRange("C16").setValue(eee); //チェックボックス(複数回答可)チェックなしでもOK sheet.getRange("G16").setValue(fff); //チェックボックス(複数回答可)チェックなしでもOK sheet.getRange("C17").setValue(fin_num); SpreadsheetApp.flush(); // エクセルファイルを作成:ファイル名「番号_ファイル名_yyMMdd.xlsx」 var excelName = proposal_num + "_" + "ファイル名" + "_" + Utilities.formatDate(request_date, "JST", "yyMMdd") + '.xlsx'; var excel = getExcel(ssid2, sheetname2, excelName); folder.createFile(excel); // メールを送信する。 MailApp.sendEmail("abc@def.jp", "【新規依頼】" + proposal_num + "_" + project_title + "(担当:" + staff_name + ")", "---------------自動通知---------------\n" + "\n" + "新規依頼を受け付けました。\n" + "エクセルファイルは必要に応じてダウンロードしてください。\n" + "\n" + Utilities.formatDate(request_date, "JST", "yyyy/MM/dd H:mm"), {//------- attachments: [pdf, excel] }); } catch (e) { Logger.log("ファイル生成に失敗しました\n" + e.stack); } } //以下はエクセルファイル作成用 // ssid;スプレッドシートID、 // sheetname;シート名 // filename;保存するファイル名 function getExcel(ssid, sheetname, filename) { const ss = SpreadsheetApp.openById(ssid); const sh = ss.getSheetByName(sheetname) const sheetid = sh.getSheetId() const url = 'https://docs.google.com/spreadsheets/d/' + ssid + '/export?format=xlsx&gid=' + sheetid; const option = { "headers": { Authorization: "Bearer " + ScriptApp.getOAuthToken() }, "muteHttpExceptions": true }; const blob = UrlFetchApp.fetch(url, option).getBlob().setName(filename); return blob; }

試したこと

複数回答取得のためにチェックボックスの項目をsetValuesにすればいいのかなと思い試してみましたが、エラーとなってしまいました。
エラー Exception: The parameters (number[]) don't match the method signature for SpreadsheetApp.Range.setValues. at myFunction(◯◯宛:243:24)

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

・フォームアンケートの該当チェックボックス項目(必須の項目もあれば、必須でない項目もあります、その他に記述も可能な状態です)
イメージ説明

・スプレッドシートのどのセルに、どのように記入したいのか(一例ですが、すべておなじような感じで横並びに表示したいです)
イメージ説明

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

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

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

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

Google Apps Script

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