Power Automate で Excel のデータを SharePoint リストにインポートする (色々はまったことの備忘録)


# はじめに

Power Platform で何らかのアプリを作成する際などに、既存の Excel からデータを SharePoint リストにインポートしたい場合があると思います。

その際、SharePoint リスト側のデータの型を考慮する必要がありますが、上手く行かずにエラーに遭遇してしまった方もいると思います (個人的に普段 Excel 使うことがほとんどなく、やってみたら色々はまってしまいました)。

そのため、今回は、以下のような様々なデータ型を持つ SharePoint リストに対して、Power Automate を利用して Excel からデータをインポートする方法を説明します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/d4f3bf26-7337-91d1-9c49-0bb2ef022464.png)

# Excel の用意

まず、以下のようなデータを用意してみます。そして、Power Automate からテーブルとしてデータを扱うため、以下のように挿入タブからテーブルを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/aaec03fb-64c6-604f-209e-d616d0a2802b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/47561792-a8b2-19eb-38de-7b07bd953130.png)

当たり前ですが、Excel の各列のデータのフォーマットを揃えます。
例えば、通貨型の場合は以下のような感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/5dce37c6-c331-695a-7718-ea6f4c1bb6fa.png)

日付と時間は一旦以下のようにしておきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/75c3accd-ce34-bfb4-c097-601be5a15bb6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/5e4d4e52-48e1-5736-99a2-484df4f79f3a.png)

# Power Automate のフロー作成

とりあえず以下のような感じでフローを作成してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/893088ae-3ce2-1f1e-bb66-8c7010e88c34.png)

## とりあえずやってみたらエラー発生

早速、以下のようなエラーが発生しました。

```
The 'inputs.parameters' of workflow operation '項目の作成' of type 'OpenApiConnection' is not valid. Error details: Input parameter 'item/Date' is required to be of type 'String/date'. The runtime value '"44992"' to be converted doesn't have the expected format 'String/date'.
```

何かフォーマットが違うみたいです。
Excel から受け取った日付のデータが何か違いそうですね。

```
{
  "@odata.etag": "",
  "ItemInternalId": "d6036dfe-fbc5-414c-b6d1-b21790b0a4ac",
  "タイトル": "テスト9",
  "日付": "44992",
  "日時": "44992.4166666088",
  "数": "100",
  "通貨": "100",
  "選択肢": "Choice3",
  "はい/いいえ": "いいえ"
}
```

Excel 側で日付を `ISO 8601` 形式にしてみたりしましたが中々上手く行きませんでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/36681671-b52a-76ac-3be5-991c40cbe902.png)

最終的に以下の設定をしたらエラー解消しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/0af2ce95-1bc4-9bb9-2127-a9c06afc778a.png)

## データ登録されたけどまだ少し問題がある・・・

一旦、以下のような感じでデータが登録されました。
数字や通貨はあらかじめ Excel で型を統一していたので上手く入ったみたいです。

ただし、DateTime 型の時間データがずれているのと、`はい/いいえ` のデータが上手く入りませんでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/5943e3f9-9f5b-6b72-872f-b163cd94202c.png)

時間については、9 時間ほどずれている感じだったので、とりあえず以下のように時間を -9 時間して一旦どうにかしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/15583d9c-a91c-215a-410e-09f2072ca650.png)

```
addHours(
formatDateTime(items('Apply_to_each')?['日時'],'yyyy-MM-dd hh:mm'),-9)
```

ただ、1 分ずれちゃっています。。。
Excel がシリアル値で時間を持っているためか、わずかなずれが生じる場合があるのかなと思っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/05bec391-fe3a-6d7f-fa2d-46774ffd574f.png)


```
      {
        "@odata.etag": "",
        "ItemInternalId": "17b1288b-8f4d-4064-b876-f0b234cd7fee",
        "タイトル": "テスト10",
        "日付": "2023-03-08T00:00:00.000Z",
        "日時": "2023-03-08T09:59:59.995Z",
        "数": "100",
        "通貨": "100",
        "選択肢": "Choice1",
        "はい/いいえ": "いいえ",
        "True/False": "False"
      }
```

## `はい/いいえ` 列にはまった

`はい/いいえ` 列について、中々直接値を入れれなかったので以下のように条件分岐にしてみました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/98803b45-b23f-c810-dba4-28198f2a5d74.png)

文字列の比較の部分は以下のような感じです。

```
equals(items('Apply_to_each_2')?['はいいいえ'],'はい')
```

それでも、上手く条件分岐されなかったのですが、どうやら、以下のヘッダーに `/` が入っていることで値を上手く取得出来ず、正しく条件分岐出来ていなかったことが原因でした (解決するまで結構時間かかっちゃいました)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/23887c0f-8d95-f973-092c-79836a75489f.png)

最終的に以下のようにすることで条件分岐が機能し、想定した通りにデータが登録されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/5893b073-8641-72ea-4631-99f706a9939c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/ad839452-d4df-88d4-9f14-629e0de0ecd3.png)

# まとめ

今回、Power Automate で Excel のデータを SharePoint リストにインポートする方法について、はまったことを中心に紹介しました。

個人的に、"日付"、"日時"、"はい/いいえ"、そして、列の名前辺りは少し注意する必要があると感じました。

また、インポート先のデータの型を考慮してインポート元となる Excel のデータの型を揃えておくことも重要です (Excel の場合、あまり型を気にせずデータを自由に入れれるため、特に注意が必要と思います) 。

せっかく元データがあるのにこの辺で躓いて時間がかかってしまい、アプリの作成等に取り掛かれないのはもったいないと思いますし、本記事が躓きポイントを少しでも減らすことに役立てば幸いです。