公的機関などへの申請書類の様式がWord形式のファイルで支給されるケースが増えていますよね。
そうした書類を書式崩れを気にしながら作成するたび「このようになると、申請側も受け取り側も便利なのに…」と感じていたので、冬休みの自由研究にGoogle Apps Script(GAS)の自習を兼ねて作ってみました。
Googleフォームへの入力内容を .docx(Word形式)、または .odt(OpenDocument Text形式)で作成したテンプレートに挿入し、管理者にファイル添付でメール送信するGASです。
スクリプト(form2docx.js)はGitHubにて公開しています。リポジトリにテンプレートのサンプル(template-sample.odt)もあるので、あわせてご参照ください。
リポジトリのREADMEやスクリプトのコメントを英語で記述したので、下記に日本語マニュアルを載せておきます。
スクリプト(form2docx.js)を使うまでの流れをざっくりと
- プレースホルダー(Googleフォームへの入力内容が挿入される箇所)を含めたテンプレートファイルをWordやLibreOffice Writerなどで作成して保存(.docx でも .odt でも可 サンプルも参考にしてください)
- 作成したテンプレートをGoogleドライブにアップ
- アップしたテンプレートをGoogleドキュメントアプリで開く(.docx / .odt からGoogleドキュメント形式に自動変換されます)
- 変換されたテンプレートファイルのIDを取得
- テンプレートのプレースホルダーに沿って、Googleフォームで新規にフォームを作成
- 作ったフォームのスクリプトエディタを開き、スクリプト(form2docx.js)をエディタにペースト
- スクリプトの User settings の各項目(変換後のテンプレートファイルのIDなど)を編集
- スクリプトにトリガーイベントと実行権限を設定
- フォームを一般公開
詳しい説明
1. テンプレートファイルの作成
サンプル(template-sample.odt)も参考にしてください。
- 日本語フォントの利用もOK
- 罫線を使った表組の利用もOK
- プレースホルダーは「波括弧(ブレース)2個+フォームの項目名+波括弧2個」の組み合わせで記述します
- Wordで作成する場合、段落設定の「1ページの行数を指定時に文字を行グリッド線に合わせる」にチェックを入れないことを推奨します
3. アップしたテンプレートをGoogleドキュメントアプリで開く
Googleドライブにテンプレートをアップしたら、右クリック→[アプリで開く]→[Google ドキュメント]を選択します。
4. 変換されたテンプレートファイルのIDを取得
Googleドキュメント形式に変換されたテンプレート(拡張子が無い点にご注目)を右クリック→[リンクを取得]を選択します。
[リンクをコピー]をクリック→[完了]をクリック。
コピーされた文字列のうち https://docs.google.com/document/d/
と /edit?usp=sharing
の間にある文字列がIDとなります。
このIDは、「7. スクリプトの user settings の各項目を編集」の項で使います。
6. 作ったフォームのスクリプトエディタを開き、スクリプトをエディタにペースト
フォーム作成画面右上部の[︙]をクリック→[スクリプトエディタ]を選び、スクリプトエディタを呼び出します。
デフォルトで記されている
function myFunction() {
}
というコードを form2docx.js で上書き。プロジェクト名(「無題のプロジェクト」の箇所)の設定は任意でOKです。
7. スクリプトの User settings の各項目を編集
下記の項目を設定します(* は必須)。メールのタイトルや本文は日本語もOKです。
mailBody と errorMailBody はテンプレートリテラルで記述できる初期設定にしてあります。
- fileId(*) … 「4. 変換されたテンプレートファイルのIDを取得」で取得したID
- adminEmail(*) … 添付ファイルを受け取る管理者のメールアドレス
- subject … 管理者あてメールのタイトル
- mailBody … 管理者あてメールの本文
- errorSubject … エラー発生時の管理者あてメールのタイトル
- errorMailBody … エラー発生時の管理者あてメールの本文
- suffixField … 生成するファイル名末尾に追記するフォーム項目名
- timeZone(*) … 生成するファイル名となる日付タイムゾーン(日本時間なら JST)
- fileFormat(*)… 生成するファイルのフォーマット(docx または odt)
- placeHolder … テンプレートに挿入するフォーム項目名
生成される .docx / .odt ファイルのファイル名は 年-月-日_時-分-秒_{suffixField}.{fileFormat} となります。
8. スクリプトにトリガーイベントと実行権限を設定
スクリプトエディタ左側のメニューより[トリガー]を選択します。
画面右下の[トリガーを追加]をクリック。
下記のようにトリガーを設定します。
- 実行する関数を選択 … form2docx
- 実行するデプロイを選択 … Head
- イベントのソースを選択 … フォームから
- イベントの種類を選択 … フォーム送信時
「アカウントの選択」メッセージが表示されます。表示されたアカウントに誤りがないことを確認してクリック。
(警告が表示されたら)[詳細]をクリック。
(警告が表示されたら)「{プロジェクト名}(安全ではないページ)に移動」をクリック。
(アクセスリクエストが表示されたら)アカウントに誤りがないことを確認した上で、画面を下にスクロールし[許可]をクリック。
もう一度[保存]をクリック。
トリガーが登録されると下のスクリーンショットのようになります。フォームを公開する前にテスト送信して動作を確認しておきましょう。
使用上の留意点
GASの仕様により、1アカウントあたりのメール送信数に下記の制限があります。
1宛先=1通 のカウントではなく、複数の To や Cc を設定した場合はその数もカウントに含まれるのでご注意ください。
- 個人アカウント(=Gmailアカウント)ならびにG Suite無償版(2022年6月30日でサービス終了予定)…100宛先/日
- Google Workspace … 1500宛先/日(同一ドメイン内への送信は2000宛先/日)
〈関連ページ〉
以上、オフィスなどにおけるワークフロー自動化の一助となれば幸いです。
不具合や提案などがあれば、プルリクエストやIssueなどでお知らせいただけますとうれしいです。