Power Platform で請求書作成処理を効率化しよう


# はじめに

Power Platform を利用して業務効率化をしたいものの、例えば、最終的には以下のような Excel などのファイルを作成する必要がある場合など、いきなり全ての業務を最適化することは難しいと感じる方もいると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/1c5644c2-c61d-eebe-950f-18fbf3e4f709.png)

もちろん、所有しているライセンス含め、いきなり全ての業務を最適化することは難しい場合はございますが、今回は、上記のようなファイルをテンプレート化して、ファイルの生成を自動化する例を紹介します。

処理のイメージは以下のような感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/804c9b2f-ded9-ebe7-11e3-f2d316d29e2f.png)

# Excel ファイルの用意

まず、上記 Excel ファイル内の表について、以下のようにテーブル化します。
また、"会社名" の箇所のように、情報を入力する場所のセルの場所を控えておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/efd46554-c7e7-c77a-ed66-98475949b4f1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/ebc06347-f877-bc68-8870-f5da7a00e453.png)

テーブル化する方法については以下の記事などを参考になさってください。

https://support.microsoft.com/ja-jp/office/excel-%E3%81%A7%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-bf0ce08b-d012-42ec-8ecf-a2259c9faf3f

# データソースの用意

今回は、SharePoint リストにしておきます。


社外からの注文に対してデータを保存してその後 Power Automate で処理するという意味ですと、Power Pages (データソースは Dataverse) にしてもいいかもです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/a0b2be99-87e0-25ad-dbca-8bb9e7a3a78c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/3408c46c-7e43-861f-f667-1bd6957fee70.png)

# Power Apps アプリの作成

今回は、サクッと Power Apps で以下のようなアプリを作成して利用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/ae502659-d6cb-c8f9-20ee-3e9b918412cb.png)

:::note
以下の箇所から SharePoint リストを指定し、サクッと作成しています。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/d21e9914-c16e-1909-ad4a-40ce87fd1a29.png)

# Power Automate クラウドフローの作成 with Office スクリプト

ここからがメインの処理の部分です。
まず、全体の流れは以下のような感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/38a6d6f4-2be4-5893-d4c4-9b304a7d1293.png)

先に実行結果をお見せすると、以下のように、リストの該当業の添付ファイルに請求書ファイルが作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/dbe71ae8-30c4-bebf-8bde-7df8adceb245.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/ed1d6d2c-409d-a331-4747-b7789d1a9af3.png)

## Excel のセルに情報を入力 (Office スクリプト)

以下の 2 箇所では Office スクリプトを実行しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/d2408b84-3e48-efd0-3a09-a04293f80e8e.png)

こちらは、自動化タブより追加することで、Power Automate から実行できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/e67f5f2b-8b90-8d1c-37ab-6fe32f4e269c.png)

今回、テンプレートファイルを OneDrive において置き、一旦中身をクリアにしてからデータを追加し、SharePoint リストの該当行の添付ファイルとして保存するため、先に以下のスクリプトを実行しています。

```
function main(workbook: ExcelScript.Workbook) {
  // Get the worksheet with tables.
  let sheet = workbook.getWorksheet("明細書");
  // Get all the tables in the worksheet.
  let table = sheet.getTable("請求書");

  // Get the row count
  let rowCount = table.getRangeBetweenHeaderAndTotal().getRowCount();
  
  if (rowCount > 1) {
    // Delete all the rows
    table.deleteRowsAt(0, rowCount);
  }
}
```

プログラム経験のない人からするとちょっと難しく感じるかもですが、実は、Bing Chat にほとんど書いてもらいました。本当に優秀です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/d3a71184-e79c-cda7-5154-8a571ec7dbd9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/5615853c-b324-4aae-0ff6-1b2b0567ee74.png)

請求書情報の入力についても、Bing Chat の回答をベースに以下のような処理を書いて Power Automate から引数を渡して実行しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/2d8f3124-df56-ef19-860d-9fe744d5eea7.png)

```
function main(workbook: ExcelScript.Workbook, CompanyName: string, PhoneNumber: string, Email: string, PostalCode: string, Address: string) {
    // ワークシートを取得
    let sheet = workbook.getWorksheet("明細書");

    // セルを取得
    let cellCompanyName = sheet.getRange("B1");
    let cellPhoneNumbe = sheet.getRange("F3");
    let cellEmail = sheet.getRange("F4");
    let cellPostalCode = sheet.getRange("C3");
    let cellAddress = sheet.getRange("C4");

    // セルに値を入力
    cellCompanyName.setValue(CompanyName);
    cellPhoneNumbe.setValue(PhoneNumber);
    cellEmail.setValue(Email);
    cellPostalCode.setValue(PostalCode);
    cellAddress.setValue(Address);
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/fe4d2d74-7907-d606-ea48-ec30c5d843b8.png)

## テーブルへの情報の入力

テーブルについては以下のアクションで行を追加しました。
Office スクリプトでも可能ですが、数式の範囲で実現できる利用した方が簡単だと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/35fb8af0-f27a-6a59-c8be-5689481e5d08.png)

## その他

最後に、SharePoint リストの該当行 (トリガーで取得した ID 列の情報を利用して) の添付ファイルとして保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/154dbc47-a89e-3eab-8a66-179b38690292.png)

# まとめ

今回は、Office スクリプトと Power Automate を組み合わせて Excel の請求書の作成処理を効率化してみる例を紹介しました。

実際はもう少し情報を入力する必要があると思いますが、ファイルのテンプレートがあり、入力項目が決まっている場合は、このようなファイルの作成処理含め、Power Platform で自動化することは可能です。

案件ごとにこのようなファイルを作成する必要があり、手動での情報転記作業等が必要になり一気通貫での自動化が難しかったという場合もあると思います。

そのような業務がある場合は、段階的でもいいので、是非、Power Platform と Office スクリプトを組み合わせて効率化してみることにもチャレンジしてみてもらえたら幸いです。