GoogleフォームからPDF作成しメール送信

フォームから送信するとPDFを作成しフォルダに保存、指定したメールアドレスと入力した本人のアドレスにPDFが送信されます

どうせならみかんボランティアが作らずに宇和島社協が作ればいいのに スプレッドシート共有しておけば役所の確認も楽だと思う。

スプレッドシート

docs.google.com

上記URLをクリック、スプレッドシートが開いたら

メニューの「ファイル」-「コピーの作成」でファイル名を指定し保存

スプレッドシートが開くのでURLをコピー

https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/edit

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxは下のスクリプトで必要

フォルダ

www.google.com

Googleドライブからフォルダ作成 ※PDFを保存するフォルダを作成

フォルダを開きURLをコピー

https://drive.google.com/drive/folders/yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyは下のスクリプトで必要

フォーム

名前を同じように作成してください

f:id:imabari_ehime:20181027164826p:plain f:id:imabari_ehime:20181027164846p:plain

フォームのスクリプト

変更する箇所は3箇所

上でコピーしたIDを貼り付け

var ssid = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

var folder = DriveApp.getFolderById("yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy");

あとMailApp.sendEmail(["xxxxx@xxxxx.com", mail],

のxxxxx@xxxxx.comに社協のメールアドレスを入力

// FormApp.getActiveForm()
function myFunction(event) {

  //今日の日付
  var request_date = new Date();

  // フォーム
  var res = event.response.getItemResponses();

  var name_kanji;
  var name_furi;
  var postal_code;
  var address;
  var tel_num;
  var fax_num;
  var mail;
  var start_date;
  var end_date;
  var place;
  var content;

  for (var n in res) {
    var item = res[n];
    var name = item.getItem().getTitle();
    var value = item.getResponse();

    switch (name) {
      case '氏名':
        name_kanji = value; break;
      case 'フリガナ':
        name_furi = value; break;
      case '郵便番号':
        postal_code = value; break;
      case '住所':
        address = value; break;
      case '電話番号':
        tel_num = value; break;
      case 'FAX番号':
        fax_num = value; break;
      case 'メールアドレス':
        mail = value; break;
      case '活動開始日':
        start_date = value; break;
      case '活動終了日':
        end_date = value; break;
      case '活動場所':
        place = value; break;
      case '活動内容':
        content = value; break;
    }
  }

  // スプレッドシートURLから抽出したIDを入力
  var ssid = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
  var ss = SpreadsheetApp.openById(ssid);

  var pdfss = ss.getSheetByName("証明書");
  var sheetid = ss.getActiveSheet().getSheetId();

  pdfss.getRange("F11").setValue(request_date); //依頼日
  pdfss.getRange("F12").setValue(name_furi); //ふりがな
  pdfss.getRange("F13").setValue(name_kanji); //氏名

  pdfss.getRange("G14").setValue(postal_code); //郵便番号
  pdfss.getRange("F15").setValue(address); //住所
  pdfss.getRange("G16").setValue(tel_num); //電話番号
  pdfss.getRange("G17").setValue(fax_num); //FAX番号
  pdfss.getRange("H18").setValue(mail); //メールアドレス

  pdfss.getRange("F19").setValue(start_date); //活動開始日
  pdfss.getRange("F20").setValue(end_date); //活動終了日
  pdfss.getRange("F21").setValue(place); //活動場所
  pdfss.getRange("G25").setValue(content); //活動内容

  SpreadsheetApp.flush();

  // 以下PDF化のためのプログラムです。今回はA4サイズでPDF化するため、オプション設定も下記のようになります。

  var url = "https://docs.google.com/spreadsheets/d/SSID/export?".replace("SSID", ssid);
  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
      }
    });

    // ファイル名を作成「活動日時開始日_名前.pdf」
    var fileName = start_date + "_" + name_kanji + ".pdf";
    // Googleドライブでフォルダを作成してURLからIDを入力
    var folder = DriveApp.getFolderById("yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy");
    var fileBlob = response.getBlob().setName(fileName);

    folder.createFile(fileBlob);
    // メールアドレス(社協の受付アドレス)
    MailApp.sendEmail(["xxxxx@xxxxx.com", mail], "災害派遣等従事車両証明書発行 お願い", "みかんボランティアセンターより災害派遣等従事車両証明書発行に係るボランティア活動を行う予定であることを確認願います。", {
      attachments : [fileBlob]
    });

  } catch (e) {
    Logger.log("ファイル生成に失敗しました" + e)
  }
}