📃
Google フォームとスプレッドシートを連携してPDF出力する
概要
Google フォームで送信した入力データをスプレッドシートに追加して、スプレッドシートのデータを PDF 形式で出力します。
作成するファイル
ファイル名 | ファイルの種類 | 補足 |
---|---|---|
PDFテンプレート | スプレッドシート | PDF のテンプレート |
入力データ | スプレッドシート | Google フォームで送信した入力データを保持します。 |
入力フォーム | Google フォーム | データを入力して送信します。 |
データ連携 | Apps Script | 入力フォームで送信したデータをスプレッドシートに追加します。 |
PDF 出力 | Apps Script | PDF テンプレートに入力データをコピーして PDF を出力します。 |
手順
事前準備
- Google ドライブにフォルダ「フォームスプレッドシート連携」を作成します。今回作成するファイルはすべてこのフォルダに保存します。
PDFテンプレート
- スプレッドシートで PDF のフォーマットを作成します。
入力データ
- 入力データを保持するためのスプレッドシートを作成します。1行目のヘッダーに PDF を出力するためのボタンを図形で作成します。
入力フォーム
- データを入力するための入力フォームを作成します。
データ連携
-
入力フォームのデータをスプレッドシートと連携するためのスクリプトを作成します。
-
データ連携のスクリプトを記述します。
// 入力データのスプレッドシートを取得します。 const inputDataSheet = SpreadsheetApp.openById("スプレッドシートのID").getSheetByName("入力データ"); function onSubmit(e) { // 入力フォームのデータを取得します。 const formData = e.response.getGradableItemResponses(); // 項目1を取得します。 const field1 = formData[0].getResponse(); // 項目2を取得します。 const field2 = formData[1].getResponse(); // スプレッドシートの2行目に新しい行を挿入します。 inputDataSheet.insertRows(2); // 挿入した行のA列にチェックボックスを設定します。 inputDataSheet.getRange("A2").insertCheckboxes(); // 挿入した行の項目1にデータを設定します。 inputDataSheet.getRange("B2").setValue(field1); // 挿入した行の項目2にデータを設定します。 inputDataSheet.getRange("C2").setValue(field2); }
-
フォーム送信時にデータ連携スクリプトを実行するトリガーを作成します。
PDF 出力
-
データを PDF 出力するためのスクリプトを作成します。
-
PDF 出力のスクリプトを記述します。
// PDF を保存する Google ドライブのフォルダ const exportFolder = DriveApp.getFolderById("フォルダの ID"); // 入力データのスプレッドシート const inputDataSheet = SpreadsheetApp.openById("スプレッドシートの ID").getSheetByName("入力データ"); // PDF テンプレートのスプレッドシート const pdfTempSheet = SpreadsheetApp.openById("スプレッドシートの ID").getSheetByName('PDFテンプレート'); function exportPDF() { // 全ての入力データを取得します。 const values = inputDataSheet.getDataRange().getValues(); // チェックボックスにチェックが入っているデータを取得します。 const selectedValues = values.filter(value => value[0] === true) || []; // チェックボックスにチェックが入っているデータが存在しない場合は、メッセージを表示して処理を終了します。 if (selectedValues.length === 0) { SpreadsheetApp.getUi().alert('チェックボックスにチェックを入れてください'); return; } // PDF テンプレートの項目1を取得します。 const field1 = pdfTempSheet.getRange("C3"); // PDF テンプレートの項目2を取得します。 const field2 = pdfTempSheet.getRange("C4"); // チェックボックスにチェックが入っているデータを PDF で出力します。 selectedValues.forEach((value, index) => { // PDF テンプレートの項目1にデータを設定します。 field1.setValue(value[1]); // PDF テンプレートの項目2にデータを設定します。 field2.setValue(value[2]); // PDF テンプレートのスプレッドシートを PDF に変換します。 const pdf = pdfTempSheet.getParent().getAs('application/pdf'); // PDF の名前を設定します。 pdf.setName(`export_pdf_${index}`); // PDF を Google ドライブに保存します。 exportFolder.createFile(pdf); }); }
-
PDF 出力ボタンに PDF 出力のスクリプトを設定します。
動作確認
-
入力フォームでプレビューボタンをクリックし、プレビュー画面を開きます。
-
入力フォームのプレビュー画面でデータを入力し送信します。
-
入力データにデータが追加されていることを確認します。
-
チェックボックスにチェックを入れて PDF 出力ボタンをクリックし、データを PDF で出力します。
-
Google ドライブのフォルダに保存された PDF を開いて内容を確認します。
Discussion