Power AutomateでExcelのデータを元に定型文章を生成する

# はじめに

このようなケースでの利用を想定しています

* ユーザーIDと初期パスワード一覧をExcelで管理している
* 一人一人に各自が利用するユーザーIDと初期パスワードを配布したい
* IDと初期パスワード以外の定型文は全員同じ

今回は、一人一人にIDと初期パスワードを書いた紙を配布する、というシナリオを考えます。
（IDとパスワードを紙で配布することの是非はありますが、ハンズオン研修などその場限りのID/パスワードの提供を今回は想定しています）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/9da6247d-11b6-a7de-ae58-46a4d64c3394.png)

# Excelの準備

このように、ユーザー名と初期パスワードの一覧表があるとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/595edc3c-1f9e-4425-83fa-e8ddd8ae18c7.png)

これをPower Automateで利用するために、以下の準備をします。

* User IDとPasswordが含まれた表を「テーブル」として定義する
* ExcelファイルをOneDrive または SharePoint Onlineに保存し、Power Automateからアクセスできるようにする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/6876d632-1c27-29ab-a152-1bedbb580836.png)

# OneNoteの用意

Power Automateから直接印刷することはできないので、いったん、データとして出力します。今回はOneNoteを利用します。

準備として、OneNoteに、今回のデータを収めるセクションを作成しておきます。ノートは作成しません。
（こうすることで、後程セクション内の全ノートを印刷することができます。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/ca140e9b-97c7-d791-55ab-1e04470b560a.png)

# フローの作成

Power Automateでフローを作成します。今回は手動でしか実行しないので、トリガーは「手動でフローをトリガーします」を使います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/5452c1f6-da24-9bc1-bea2-b73f8048a7db.png)

Excel Online(Business)コネクタから、「表内に存在する行を一覧表示」を選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/d3fb3686-755d-2d2c-02bc-25b6e1b1f662.png)

今回はExcelのデータをOneDrive上に保存したので、場所を「OneDrive for Business」と指定し、保存したファイルを選び、テーブルの名前を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/6887fed3-ee14-6718-7589-6d9620ea2d2b.png)

続いて、OneNoteの「セクションにページを作成」アクションを選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/fc0c10ef-3912-03b2-9489-fd66586191eb.png)

ノートブックキーには、先ほど空のセクションを作ったノートブックの名前を入れます。ノートブックのセクションは、先ほど作成した空のセクションそのものを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/435f68af-2d0e-e29c-a8c3-d83cd3c08d0f.png)

今回は、OneNote内に表を埋め込みたいのですが、標準のリッチテキストエディタでは表を扱えないため、htmlを直接記述できるモードに切り替えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/0a8cab41-01b3-d8cf-f180-e41d81855408.png)

ベースとしてこのようなHTML文を用意します。

```html
<html>
  <head>
    <title>研修用O365 アカウント</title>
    <meta name="created" content=""/>
  </head>
  <body>
<p>あなたのユーザー名と初期パスワードはこちらです</p>

<table border="1">
    <tr>
        <td>
            ユーザー名
        </td>
        <td>

        </td>
    </tr>
    <tr>
        <td>
            初期パスワード
        </td>
        <td>

        </td>
    </tr>
</table>

<p>※ 初回ログオン時に各自のパスワードに変更してください</p>
  </body>
</html>
```

これを先ほどのOneNoteアクションのページコンテンツに書いたうえで、ユーザー名や初期パスワードにExcelから読み込んだ値を当てはめていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/0f72f63e-8c94-0c80-6acc-71f4dc134a3d.png)


ソースで書くとこのようになります。

```html

<html>
  <head>
    <title> @{items('Apply_to_each')?['User ID']}研修用 アカウント</title>
    <meta name="created" content="@{formatDateTime(addhours(utcnow(),9),'yyyy-MM-dd')}"/>
  </head>
  <body>
<p>あなたのユーザー名と初期パスワードはこちらです</p>

<table border="1">
    <tr>
        <td>
            ユーザー名
        </td>
        <td>
@{items('Apply_to_each')?['User ID']}
        </td>
    </tr>
    <tr>
        <td>
            初期パスワード
        </td>
        <td>
@{items('Apply_to_each')?['Password']}
        </td>
    </tr>
</table>

<p>※ 初回ログオン時に各自のパスワードに変更してください</p>
  </body>
</html>
```

このうち、

```html

<meta name="created" content="@{formatDateTime(addhours(utcnow(),9),'yyyy-MM-dd')}"/>
```

の部分はOneNoteの作成日にあたる部分で、フローを実行した日時を日本時間に直して入れるようにしています。

# フローの実行

フローを実行すると、OneNoteに複数のページが作成されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/ba2c197b-ff43-ceea-59a8-bf0132b920ec.png)

# 印刷

生成されたOneNoteのページをセクションごとまとめて印刷します。今回はPDFに出力してみます。
（試した限り、この操作はOneNote Onlineだと利用できず、デスクトップクライアントが必要になります）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/902bf0a7-9ea7-acac-f391-51ab3ecf6948.png)

これで、ユーザーごとのIDとパスワードの一覧が出来ました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/56596bf9-1a44-6d1a-5416-a97f5603862c.png)

# 終わりに

Excelなどのテーブルデータを元に定型文章を作るフローは、強力かつ効果が分かりやすいものだと感じており、個人的には好きな使い方の一つです。

今回は印刷しましたが、メールで個々の情報を送信するケースでも便利だと思います。ぜひ活用してみてください。