前提・実現したいこと
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
こちらのサイトを参考にして作成しました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/09 02:39