Excelのテンプレートを使った請求書の自動発行
手作業で行っていた下記のような請求書発行の手順を、PowerAutomateで自動化することを考えます。
- 顧客管理システムなどから下記請求情報を取得
- 顧客会社名
- 請求書番号
- 請求日
- 支払期限
- 取得した情報をExcelのテンプレートに転記
- Excelのテンプレートを"{請求書番号}_{顧客会社名}.pdf"の名前で保存
Excelテンプレート
サンプルとして、下記テンプレートを使います。
赤い文字の部分を置き換えたものをPDFとして出力します。
こちらのテンプレートは、Excelでシート作成時に選択可能な「基本的なビジネス請求書」というテンプレートをベースにしています。
Excelのテンプレートは OneDrive for buisness の個人用フォルダに格納しておきます。
ExcelをPDFに変換するアクションがOneDrive上に置いたファイルでのみ使えるようです。
SharePointのファイルを利用したい場合、PDFに変換する前にファイルを一度OneDriveにコピーするなどひと手間かける必要があります。
Officeスクリプト
Excelテンプレートに値を転記する処理はOfficeスクリプトを利用します。
OfficeスクリプトはExcel上で動作するプログラミング言語です。TypeScriptで記述し、PowerAutomateからの実行をサポートしています。
- ExcelのテンプレートファイルをWeb上のOneDriveで開きます。
- 「自動化」タブをクリックし、「新しいスクリプト」ボタンをクリックします。
- コードエディタが開くので、下記のコードを入力します。
- スクリプト名を「請求書作成」に変更し、保存します。
スクリプトは、PowerAutomateから受け取った値を所定のセルに設定するだけの単純なものです。
値はmain関数の引数で受け取ることができます。
function main(
workbook: ExcelScript.Workbook,
company: string,
invoiceNumber: string,
dateOfInvoice: string,
dueDate: string
) {
let sheet = workbook.getWorksheet("請求書");
sheet.getCell(3, 1).setValue('請求書番号: '+ invoiceNumber);
sheet.getCell(4, 1).setValue('日付: ' + dateOfInvoice);
sheet.getCell(6, 1).setValue(company+ '様');
sheet.getCell(8, 1).setValue('支払期限: ' + dueDate);
}
フローの作成
作成するフローの概要は下記のようになります。
手動でフローをトリガー
今回は検証目的ですので、手動で実行するようにしています。
実際はタイマーによる定期実行など、利用するシステムに合わせたトリガーを選択します。
請求書情報を取得
今回は「変数の初期化」を使ってinputという変数に固定値のJSONを入れていますが、顧客管理システムのAPIなどから取得した請求情報が入っているものと思ってください。
JSONの解析
先ほどのinput変数に入っているJSONを解析します。
スキーマは「サンプルから生成」ボタンで開くダイアログにJSONの値を貼り付けて生成します。
Excelテンプレートファイルを取得
OnDrive for business の「ファイル コンテンツの取得」を利用して、Excelテンプレートファイルを読み取ります。
OneDriveに配置したExcelテンプレートファイルを選択します。
一時ファイルの作成
OnDrive for business の「ファイルの作成」を利用してテンプレートファイルをコピーします。
テンプレートと同じフォルダに"{請求書番号}_{請求先会社名}.xlsx"の名前でファイルを作成します。
「ファイルコンテンツ」には「Excelテンプレートファイルを取得」で読み込んだファイルの本文を指定します。
テンプレートに値を書き込むスクリプトの実行
作成した一時ファイルに対して、Officeスクリプトを実行します。
- 「場所」、「ドキュメントライブラリ」、「ファイル」で一時ファイルの場所を指定します。(「ファイル」には「一時ファイルの作成」の結果に含まれる「ID」を指定します。)
- 「スクリプト」では作成したOfficeスクリプトの名前「請求書作成」を選択します。
- スクリプトを選択すると、スクリプトのmain関数に記述した引数が入力項目に追加されます。各項目にinput変数の値を設定します。
PDFファイルへの変換
OnDrive for business の「ファイル変換」を利用してExcelファイルをPDFに変換します。
「ファイル」には一時ファイルの「ID」を指定します。
PDFファイルの作成
OnDrive for business の「ファイルの作成」を利用してPDFに変換したファイルをOneDriveに出力します。
- Excelテンプレートと同じフォルダに出力します。
- 「ファイル名」には「PDFファイルへの変換」の結果に含まれる「ファイル名」を指定します(ここには一時ファイルのファイル名の拡張子が.pdfに変わったものが入っています)。
- 「ファイルコンテンツ」には「PDFファイルへの変換」の結果に含まれる「本文」の値を指定します。
実行結果
このフローを実行すると、Excelテンプレートと同じフォルダに2つのファイルが作成されます。
- 一時ファイル:{請求書番号}_{請求先会社名}.xlsx
- PDF請求書: {請求書番号}_{請求先会社名}.pdf