Power Automate for desktop（RPA）を使ってローカルのExcelに自動で情報を書き込む

こんにちわ、 のりじ です。

今回は、Power Automateのクラウドフロー（DPA）＋AI Builder＋デスクトップフロー（RPA）を利用して、名刺画像をOneDriveの指定フォルダーに置いたらAI Builderで画像の文字を読み取り、結果をローカルPCのExcelファイルに記載する仕組みを作りたいと思います。
本記事は、まずはPower Automate for desktopのフロー作成についてです。

# 0. 事前準備

![pad0803-000.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/ad004299-ed59-0eef-ef53-58b26bc77f46.jpeg)
事前に図のようなExcelファイルをローカルに作成しておきます。  
今回は名刺の内容を記載していきたいので、Excelファイルの項目は以下の内容にします。

- 登録日
- 会社名
- 部署
- 役職
- 名前
- 住所
- 電話番号
- Email

# 1. 作成するフロー全体図

![pad0803-001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/6bd59104-75bd-adb4-d341-4f58c7f576d4.jpeg)
Power Automate for desktopで作成するフローはこのような形です。

# 2. 入力変数の準備

![pad0803-002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/ca1c9081-20ba-365c-bb90-77b6afcb2111.jpeg)

クラウドフローから渡される内容を受け取るために「入力変数」の準備をします。
入力変数の「入力」をクリック。
今回はAI Builderで読み取った内容を受け取るので、AIモデルで抽出するフィールドの名前を参考に新規の入力変数を作成していきます。

- 会社名：CompanyName
- 部署：Department
- 役職：Position
- 名前：Name
- 住所：Address
- 電話番号：Tel
- Email：Email
- 日付：date

![pad0803-003.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/10ba3797-5edd-00a0-b1b0-dd08ddd1d7bc.jpeg)

1. 変数名：Power Automate for desktopで利用する変数（半角英数）
2. 外部名、説明：クラウドフローのコネクタで表示される部分なので、わかりやすい名前で（日本語可）

全部で8個、入力変数を作成します。

# 3. フローの作成

デスクトップ版のPower Automate for desktopを起動し「新しいフロー」を作成します。

## 3-1. Excelの起動

左メニューの「Excel」から「Excelの起動」アクションを選択します。  
（アクションからフローデザイナーにドラッグアンドドロップ）

![pad0803-004.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/85a656b7-492b-88f3-e06f-f340f22356f2.jpeg)

「全般」の内容を図のように入力します。  
今回は「0. 事前準備」で作成したExcelファイルを利用するので「ドキュメントパス」は作成したExcelファイルを指定。  
「読み取り専用」はオフにしておきます。（上書き保存できなくなるため）

## 3-2. Excelワークシートから最初の空の列や行を取得

左メニューの「Excel」から「Excelワークシートから最初の空の列や行を取得」アクションを選択します。  

![pad0803-005.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/a195ab4d-32ce-d927-7358-0af302a89247.jpeg)

1. Excelインスタンス：「Excelの起動」で自動生成された変数「%ExcelInstance%」を選択
2. 生成された変数：「FirstFreeRow」だけをオンに変更

## 3-3. Excelワークシートから読み取る

左メニューの「Excel」から「Excelワークシートから読み取る」アクションを選択します。  
この部分で2行目以降に内容を順次書き込むように設定していきます。（1行目は項目が入っているため）  

![pad0803-006.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/95edeb60-4556-a25e-85c2-e1a1fb04997b.jpeg)

1. Excelインスタンス：「%ExcelInstance%」を選択
2. 取得：「セル範囲の値」を選択
3. 先頭列：「1」と入力
4. 先頭行：「1」と入力
5. 最終列：8個項目があるので「8」と入力
6. 最終行：空白の行の一つ前を指定したいので「%FirstFreeRow-1%」と入力

「詳細」と「生成された変数」のところはデフォルト設定のままで大丈夫です。
「生成された変数」の「%ExcelData%」には、セル範囲の値が入ります。（今回だと8）

## 3-4. For each（ループ）

左メニューの「ループ」から「For each」アクションを選択します。  

![pad0803-007.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/83b50cfc-663d-60c7-05d1-02c4dc315d0c.jpeg)

「Excelワークシートから読み取る」アクションで生成された変数「%ExcelData%」には項目の値が入っているので選択します。  
これで8回処理がループします。

## 3-5. Excelワークシートに書き込む

左メニューの「Excel」から「Excelワークシートに書き込む」アクションを選択し、For eachとEndの間にアクションを入れていきます。

![pad0803-009.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/dbcea9d0-3380-6002-348b-3fe6b4dd0411.jpeg)

最初に1列目の「登録日」を入力するアクションを作成します。  
それぞれの項目にあう列番号を入力していきます。

![pad0803-008.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/9fd580ba-61a3-17a3-4079-12ccc9b1a032.jpeg)

1. Excelインスタンス：「%ExcelInstance%」を選択
2. 書き込む値：「2. 入力変数の準備」で準備した変数の中から「%date%」を選択
3. 書き込みモード：「指定したセル上」を選択
4. 列：1列目の「登録日」なので「1」を入力
5. 行：空白の行に書き込むため「%FirstFreeRow%」を入力

これを8項目分作成します。

## 3-6. Excelを閉じる

左メニューの「Excel」から「Excelを閉じる」アクションを選択します。

![pad0803-010.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103396/b6a879bd-3737-4ea6-9f1e-6bd5c7feb389.jpeg)

1. Excelインスタンス：「%ExcelInstance%」を選択
2. Excelを閉じる前：同一ファイルに順次書き込みを行っていきたいので「名前を付けてドキュメントを保存」を選択
3. ドキュメント形式：「既定（拡張機能から）」を選択
4. ドキュメントパス：今回は「0. 事前準備」で作成したExcelファイルを指定

以上でフローが完成したので、忘れずに「保存」します。

# 4. さいごに

これでデスクトップフロー（Power Automate for desktop）の準備ができました。  
次はクラウドフローの作成を行いますが、それは別の記事で！

# 5. 参考

- [AI Builderの「カスタムモデル」で日本語対応の「名刺リーダー」を作る](https://qiita.com/nori790822/items/8a2303adace8dde68fab)