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

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

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

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

Google フォーム

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

Google Apps Script

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

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Google

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

Q&A

解決済

1回答

4297閲覧

Googleフォーム複数回答を別のスプレッドシートに入力したい

yashiron

総合スコア2

Google スプレッドシート

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

Google フォーム

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

Google Apps Script

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

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Google

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

0グッド

0クリップ

投稿2020/09/04 07:23

編集2020/09/04 07:24

前提・実現したいこと

googleフォームにアンケート入力、入力された内容を様式(別のスプレッドシート)
に当てはめて入力してPDF出力するシステムを作っています。
回答を取得し、設定したセルに入力する際に回答が複数あるもの
(googleフォームのチェックボックスで複数選べるようにしています。)
が、セルに入力される際に一番初めに選んだものしか反映されません。
例えば、☑A ☑B □C ☑D
と回答するとAしかセルに反映されません。

できればカンマ区切りでA、B、Dと表示されるようにしたいです。

またPDF化の際、シート1とシート2の両方を1つのPDFに出力する方法はありますでしょうか。

もしできなければ、シート1とシート2をどちらも(別々でも可)PDF化できる方法を教えていただきたいです。
現在のソースコードではシート1しかPDF化されず困っています。

GASを勉強したてで色々不足しているかもしれないですが、
回答よろしくお願いします。

該当のソースコード

GAS

1// FormApp.getActiveForm() 2function myFunction(event) { 3 4 //今日の日付 5 var request_date = new Date(); 6 7 // フォーム 8 var res = event.response.getItemResponses(); 9 10 var name_kanji;//氏名 11 var name_furi;//フリガナ 12 var reason;//知ったきっかけ チェックボックス式の複数回答可を使用 13 14 15 for (var n in res) { 16 var item = res[n]; 17 var name = item.getItem().getTitle(); 18 var value = item.getResponse(); 19 20 switch (name) { 21 case '氏名': 22 name_kanji = value; break; 23 case 'フリガナ': 24 name_furi = value; break; 25 case '知ったきっかけ': 26 reason = value; break; 27 28 29 } 30 } 31 32 // スプレッドシートURLから抽出したIDを入力 33 var ssid = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; 34 var ss = SpreadsheetApp.openById(ssid); 35 36 var pdfss = ss.getSheetByName("シート1"); 37 var sheetid = ss.getActiveSheet().getSheetId(); 38 39 pdfss.getRange("V1").setValue(request_date); //入力日 40 pdfss.getRange("C5").setValue(name_furi); //フリガナ 41 pdfss.getRange("C6").setValue(name_kanji); //氏名 42 pdfss.getRange("J6").setValue(reason); //知ったきっかけ  43 44 45 46 //2ページ目 47 var ssid = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"; 48 var ss = SpreadsheetApp.openById(ssid); 49 50 var pdfss = ss.getSheetByName("シート2"); 51 var sheetid = ss.getActiveSheet().getSheetId(); 52 pdfss.getRange("V1").setValue(request_date); //入力日 53 pdfss.getRange("C5").setValue(name_furi); //ふりがな 54 pdfss.getRange("C6").setValue(name_kanji); //氏名 55 pdfss.getRange("J6").setValue(reason); //知ったきっかけ  56 57 58 59 60 SpreadsheetApp.flush(); 61 62 // 以下PDF化のためのプログラムです。今回はA4サイズでPDF化するため、オプション設定も下記のようになります。 63 64 var url = "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz".replace("SSID", ssid); 65 var url_ext = []; 66 67 var opts = { 68 format: "pdf", 69 size: "A4", 70 fzr: "false", 71 portrait: "true", 72 gridlines: "false", 73 printtitle: "false", 74 pagenumbers: "false", 75 fitw: "true", 76 sheetnames: "false", 77 gid: sheetid 78 }; 79 80 // 上記のoptsのオプション名と値を「=」で繋げて配列url_extに格納 81 for (optName in opts) { 82 url_ext.push(optName + "=" + opts[optName]); 83 } 84 85 // url_extの各要素を「&」で繋げる 86 var options = url_ext.join("&"); 87 Logger.log(options) 88 89 try { 90 // API使用のためのOAuth認証 91 var token = ScriptApp.getOAuthToken(); 92 93 var response = UrlFetchApp.fetch(url + options, { 94 headers: { 95 "Authorization": "Bearer " + token 96 } 97 }); 98 99 // ファイル名を作成「入力日_名前.pdf」 100 var fileName = request_date + "_" + name_kanji + ".pdf"; 101 // Googleドライブでフォルダを作成してURLからIDを入力 102 var folder = DriveApp.getFolderById("1P6R6JlBU5g1nREOv7-l8dtGp08BdEJK2"); 103 var fileBlob = response.getBlob().setName(fileName); 104 105 folder.createFile(fileBlob); 106 107 108 } catch (e) { 109 Logger.log("ファイル生成に失敗しました" + e) 110 } 111} 112 113 114 115

参考資料

https://imabari.hateblo.jp/entry/2018/10/25/225825
こちらのサイトを参考にして作成しました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

質問は1つに絞った方が良いです。

今回解決したい チェックボックスの方は、取得した回答が ['A','B','C']みたいな配列になっているので、
setValueで書き込むと 最初の1つのみ反映となります。

解決方法としては join で結合して 配列→文字列の変換をしたものをsetValueで良いと思います。
回答が1つだった場合でも大丈夫です。

pdfss.getRange("J6").setValue(reason.join(',')); //知ったきっかけ 

シート1とシート2の両方を1つのPDF

こっちは "スプレッドシート PDF GAS まとめて" とかで検索すると幾つかサイトありますので、まずは検索してコード修正を試してみてください。別々でも可ならPDF化の処理を2回やってもいいと思いますが。

投稿2020/09/08 09:45

sawa

総合スコア3002

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

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

yashiron

2020/09/09 02:39

回答ありがとうございました。 PDFのほうも調べていくつか試してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問