📃

Google フォームとスプレッドシートを連携してPDF出力する

2023/07/27に公開

概要

Google フォームで送信した入力データをスプレッドシートに追加して、スプレッドシートのデータを PDF 形式で出力します。

作成するファイル

ファイル名 ファイルの種類 補足
PDFテンプレート スプレッドシート PDF のテンプレート
入力データ スプレッドシート Google フォームで送信した入力データを保持します。
入力フォーム Google フォーム データを入力して送信します。
データ連携 Apps Script 入力フォームで送信したデータをスプレッドシートに追加します。
PDF 出力 Apps Script PDF テンプレートに入力データをコピーして PDF を出力します。

手順

事前準備

  1. Google ドライブにフォルダ「フォームスプレッドシート連携」を作成します。今回作成するファイルはすべてこのフォルダに保存します。

PDFテンプレート

  1. スプレッドシートで PDF のフォーマットを作成します。

入力データ

  1. 入力データを保持するためのスプレッドシートを作成します。1行目のヘッダーに PDF を出力するためのボタンを図形で作成します。

入力フォーム

  1. データを入力するための入力フォームを作成します。

データ連携

  1. 入力フォームのデータをスプレッドシートと連携するためのスクリプトを作成します。

  2. データ連携のスクリプトを記述します。

    // 入力データのスプレッドシートを取得します。
    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);
    }
    
  3. フォーム送信時にデータ連携スクリプトを実行するトリガーを作成します。

PDF 出力

  1. データを PDF 出力するためのスクリプトを作成します。

  2. 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);
        });
    }
    
  3. PDF 出力ボタンに PDF 出力のスクリプトを設定します。

動作確認

  1. 入力フォームでプレビューボタンをクリックし、プレビュー画面を開きます。

  2. 入力フォームのプレビュー画面でデータを入力し送信します。

  3. 入力データにデータが追加されていることを確認します。

  4. チェックボックスにチェックを入れて PDF 出力ボタンをクリックし、データを PDF で出力します。

  5. Google ドライブのフォルダに保存された PDF を開いて内容を確認します。

Discussion