本記事では、Microsoft 365の一部であるOffice ScriptsとPower Automateを活用して、Formsで入力された申込情報を自動的にPDF化し、SharePointに保存するシステムの構築方法を解説します。
目次
1. Office Scriptsとは?2. システムの概要
3. 事前準備
4. Office Scriptsの構築
5. Power Automateフローの全体像
6. Power Automateフローの各種設定
7. 動作確認
8. まとめ
1.Office Scriptsとは?
Office ScriptsはExcel Onlineでの作業を自動化し、作業効率を向上させるための便利なツールです。たとえば、データを特定の形式で整理したい場合や、定期的にレポートを生成したい場合、Office Scriptsを使うことで、手動で行うことなく自動で処理を実行できます。似たようなツールにVBAがありますが、VBAはデスクトップ版のExcelで動作するのに対し 、Office Scriptsはクラウド版のExcelで操作する点が大きな違いです。
2.システムの概要
今回、Formsで記入した申込内容を元に申込書をPDFで出力し、SharePointに格納するシステムをPower Automateで構築しました。システム全体の流れは下図の通りです。▼Forms
ユーザーが記入するための入力フォームです。
▼SharePoint
申込書の雛形(Excelファイル)の格納先という役割とPower AutomateでPDF変換したファイルの格納先の役割を持っています。
▼OneDrive
Power Automateでは、SharePoint上でPDF変換する処理ができないため、OneDrive上でPDF変換を行います。また、申込書の雛形を編集する場所の役割を持っています。
▼Office Scripts
Formsで入力した値を、申込書の雛形をコピーしたExcelに書き込む役割を持っています。
▼Power Automate
SharePoint、OneDrive、Office Scriptsと連携して図の処理を実行する役割を持っています。また、Formsでの回答保存をトリガーに起動させます。
3.事前準備
Power AutomateとOffice ScriptsはMicrosoft 365のライセンスを所持していれば利用できます。 システム構築前に必要な準備について下記に記載します。▼Forms
申込の入力フォームをFormsで作成します。例として、今回は下図のような内容で作成しました。
▼Excel(申込書雛形)
申込書の雛形を作成します。レイアウトは自由で構いませんが、項目はFormsと揃えてください。
▼SharePointライブラリ
申込書の雛形を格納するためのライブラリとPDF変換したファイルを格納するためのライブラリの2つを用意します。
列やライブラリの設定は不要です。
4.Office Scriptsの構築
Office Scriptsの構築手順を下記に記載します。4-1.下記URLよりOneDriveにアクセスし、Power Automateを構築予定のアカウントと同じアカウントでサインインします。
https://www.microsoft365.com/onedrive/
4-2. OneDriveのホーム画面から任意のExcelファイルをブラウザで開きます。(開くExcelファイルはなんでも良いです。)
4-5.下記画像の赤枠をクリックし、スクリプトの名前を変更します。
4-6.スクリプトの入力欄に下記コードを入力します。
function main(
workbook: ExcelScript.Workbook,
aName: string,
aFurigana: string,
aEmail: string,
bServiceName: string,
bDesiredDay: string,
bSalesPerson: string,
cRemarks: string) {
let applicationSheet = workbook.getWorksheet("申込用紙");
if (applicationSheet != void 0) {
// お名前
range = applicationSheet.getRange("C15");
range.setValue(aName);
// ふりがな
range = applicationSheet.getRange("C16");
range.setValue(aFurigana);
// メールアドレス
range = applicationSheet.getRange("C17");
range.setValue(aEmail);
// サービス名
range = applicationSheet.getRange("C20");
range.setValue(bServiceName);
// 希望日付
range = applicationSheet.getRange("C21");
range.setValue("'" + bDesiredDay.substring(0, 4) + "/" + bDesiredDay.substring(5, 7) + "/" + bDesiredDay.substring(8));
// 受付担当者
range = applicationSheet.getRange("C22");
range.setValue(bSalesPerson);
// 備考欄
range = applicationSheet.getRange("B25");
range.setValue(cRemarks);
}
}
このスクリプトは、Excelの「申込用紙」というワークシートに、 Formsで入力された情報を自動で書き込むため の関数 main を定義しています。いくつかコードの解説を記載します。
・引数の設定
3~9行目の「aName: string,」といった形で記載されている部分はFormsに記載した値を受け取るために設定しています。例えば、「aName」の部分はユーザーの名前を格納するための引数で雛形に記載する値に応じて適宜設定します。また、「string」の部分はデータの型を指定する箇所あり、今回の場合は文字列型として指定しています。
・ワークシートの取得
let applicationSheet = workbook.getWorksheet("申込用紙");
10行目に記載の上記のコードはExcelワークブックの中から「申込用紙」という名前のシートを取得し、その情報を applicationSheet という変数に格納します。
・シートの存在確認
if (applicationSheet != void 0) {
11行目に記載の上記のコードは取得した applicationSheet が存在するかを確認し、存在しない場合は処理をスキップします。
・情報の入力処理
各引数の値をシート内の特定のセルに設定します。以下はその具体的な処理です。
// お名前
range = applicationSheet.getRange("C15");
range.setValue(aName);
14~15行目に記載の上記のコードは引数 aName をシートのセル C15 に入力する部分です。お名前が指定された位置にセットされます。
同様に、ふりがな (C16)、メールアドレス (C17)、サービス名 (C20)、希望日 (C21)、受付担当者 (C22)、備考 (B25) についても設定します。
・希望日の日付フォーマット
range.setValue("'" + bDesiredDay.substring(0, 4) + "/" + bDesiredDay.substring(5, 7) + "/" + bDesiredDay.substring(8));
31行目の上記のコードは希望日の日付を YYYY/MM/DD 形式に整形して、指定されたセルに入力しています。日付文字列を分割して並べ替えることで、正しいフォーマットに変換しています。
4-7.[スクリプトを保存]をクリックします。
4-8.[実行]をクリックします。
4-9下記入力画面が表示されたら[×]をクリックします。
※コードにエラーがある場合、下記画面は表示されません。
5.Power Automateフローの全体像
今回作成するPower Automateフロー(以下フロー)の全体像です。 Formsで回答を送信すると、フローが自動で実行されます。大まかな構成としては下記の順にフローが進みます。
- SharePointからExcelの雛形の中身情報を取得
- OneDriveにファイルを作成 + 1で取得した雛形の情報を登録
- Formsに入力した値を取得
- Office Scriptsを実行してOneDriveに作成したExcelファイルにFormsで入力した値を登録
- Excel ファイルをOneDrive内でPDF変換
- 変換したPDFファイルをSharePointに格納
- 2と4でOneDrive内に作成したExcelファイルを削除
6. Power Automateフローの各種設定
フローの各種設定について解説します。▼トリガーの設定
トリガーは[新しい応答が送信されるとき]を選択します。
トリガーを選択するとフォームIDを設定する項目が表示されるのでFormsで作成したフォーム名を指定します。
▼変数の設定
今回、PDF出力するファイルのファイル名が被らないように「(実行日付)_申込サービス出力先.pdf」として出力します。この実行日付の部分の値を格納するために変数を指定します。
具体的には「変数を初期化する」アクションを1つ追加し、以下のように設定します。
設定値
Name | Type | Value |
---|---|---|
ファイル名日付 | String | formatDateTime(getFutureTime(9, 'Hour'), 'yyyy-MM-dd') |
Valueの部分は「式」に入力します。
▼ファイルファイルコンテンツの取得
申込書の雛形のフォーマットを取得するために[ファイル コンテンツの取得]アクションを追加し、以下の設定を行います。
設定値
サイトのアドレス | ファイル識別子 | コンテンツタイプの推測 |
---|---|---|
雛形を格納したSharePointサイト | 雛形のファイルパス | はい |
▼ファイルの作成
OneDriveにファイルを作成するために[ファイルの作成]アクションを追加し、以下の設定を行います。
設定値
フォルダーのパス | ファイル名 | ファイルコンテンツ |
---|---|---|
任意のパスを指定 | concat(variables('ファイル名日付'),'_申込サービス出力先.xlsx') | 動的なコンテンツの「ファイルコンテンツの取得」から<本文>を選択 |
ファイル名の部分は「式」に入力します。
▼応答の詳細を取得する
Formsで入力された値を取得するために[応答の詳細を取得する]アクションを追加し、以下の設定を行います。
設定値
フォームID | ファイルコンテンツ |
---|---|
Formsで作成したフォーム名を指定 | 動的なコンテンツの「新しい応答が送信されるとき」から<応答ID>を選択 |
▼スクリプトの実行
Office Scriptsを実行してOneDriveに作成したExcelファイルにFormsで入力した値を登録するために[スクリプトの実行]アクションを追加し、以下の設定を行います。
No | 項目 | 設定値 | 備考 |
---|---|---|---|
1 | 場所 | OneDrive for Business | |
2 | ドキュメントライブラリ | OneDrive for Business | |
3 | ファイル | OneDrive for Business | <名前>の部分は動的なコンテンツの「ファイル」から選択 |
4 | スクリプト | OneDrive for Business | Office Scriptsの構築時に命名した名前を指定 |
5 | ScriptParameters/aName* | OneDrive for Business | <名前>の部分は動的なコンテンツの「応答の詳細を取得する」から選択 |
6 | ScriptParameters/aFurigana* | OneDrive for Business | <名前>の部分は動的なコンテンツの「応答の詳細を取得する」から選択 |
7 | ScriptParameters/aEmail | OneDrive for Business | <名前>の部分は動的なコンテンツの「応答の詳細を取得する」から選択 |
8 | ScriptParameters/bServiceName* | OneDrive for Business | <名前>の部分は動的なコンテンツの「応答の詳細を取得する」から選択 |
9 | ScriptParameters/bDesiredDay* | OneDrive for Business | <名前>の部分は動的なコンテンツの「応答の詳細を取得する」から選択 |
10 | ScriptParameters/bSalesPerson* | OneDrive for Business | <名前>の部分は動的なコンテンツの「応答の詳細を取得する」から選択 |
11 | ScriptParameters/cRemarks* | OneDrive for Business | <名前>の部分は動的なコンテンツの「応答の詳細を取得する」から選択 |
▼ファイルの変換(pdf変換)
Office Scriptsを実行してFormsで入力した値が登録されたExcelファイルをPDF変換するために
[ファイルの変換]アクションを追加し、以下の設定を行います。
設定値
ファイル | ターゲットの種類 |
---|---|
動的なコンテンツの「ファイルの作成」からを選択 |
▼ファイルの作成(SharePointに格納)
PDF変換したファイルをSharePointに格納するために[ファイルの作成]アクションを追加し、以下の設定を行います。
サイトのアドレス | フォルダーのパス | ファイル名 | ファイルコンテンツ |
---|---|---|---|
(PDF格納用ライブラリを作成したサイトを指定) | (PDF格納用ライブラリのパスを指定) | concat(variables('ファイル名日付'),'_申込サービス出力先.pdf') | 動的なコンテンツの「ファイルの変換(pdf変換)」から<本文>を選択 |
ファイル名の部分は「式」に入力します。
▼10分待機
フロー内でExcelのテーブルを使うとそのExcelファイルは数分間ロックされる仕様のため、ファイルロックのエラーを回避するために、[遅延]アクションを追加し、以下の設定を行う。
設定値
count | unit |
---|---|
10 | Minute |
▼ファイルの削除
OneDriveで作成したExcelファイルは不要になるので[ファイルの削除]アクションを追加し、以下の設定を行う
設定値
ファイル |
---|
動的なコンテンツの「ファイルの作成)」からを選択 |
7.動作確認
一通り、システムを構築したので実際の動きを確認します。Power Automateの実行履歴からフローの処理が成功したことを確認します。
PDF格納用ライブラリにPDFが格納されたことを確認し、中身を開いて内容に問題がないことを確認します。
8.まとめ
Office ScriptsとPower Automateを使ったシステムの構築例をご紹介しました。本記事の内容は「フォーム入力→Excelに記録→PDFで保存」の流れを自動化したもので、申請業務の効率化や書類の自動生成に役立てることが可能です。 他にも、Office ScriptsとPower Automateを組み合わせることで売上データを自動集計したり、複数のExcelファイルのデータを自動で統合して一元管理できるようにしたりとExcelを使った業務を効率化させることが出来るので、是非本記事をきっかけにExcel業務の効率化に挑戦してみてください。最後に
テンダでは、「こんなプロジェクトに挑戦したい」「こんなチームで働きたい」「理想のチームを創りたい」と願う仲間を求めています。
カジュアル面談も随時受付中です。ぜひ一度お話ししましょう。
募集職種一覧
カジュアル面談の申込
テンダで働く人や社風について