PowerAutomate: Backlog ファイルに保存した Excel を集約して Wiki を自動更新する

# 背景
ある会合で参加者の情報を Excel 提出して集めてたが、横断で見るなんて面倒 :cry: 
で、当然集約する必要が出た。

アンケートサービスで収集してればこんな作業不要なんですけどね・・。
Excel 大好きさんはいまだに多いので、API 利用チャンスと捉えて作ってみることにした記録


以下で準備してたら早速使いどころがあったというお話

https://qiita.com/baku2san/items/d1fba1154aab99bf6fe7

# 概要
- Backlog API でファイル取得
- ファイルから Office Scripts でデータ取得
- 取得した結果から Wiki Contents 生成して、Upload

## Backlog ファイル からファイルを取得して、OneDrive へ保存
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/61a5301e-36ae-5739-fa92-1b5f5b14ca50.png)

## Excel からのデータ取得　by Office Scripts
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/fd8418ca-22cd-6c37-86bb-8b2c8da4e06c.png)


## 取得結果を元に、Backlog wiki を更新
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/f2c69764-e0e7-381a-7613-ce6c0a822b26.png)


全員分まだそろってないので、上手くいったら定期的に実行しておくだけじゃないかな、と


# 疑問点
まったく同一の wiki を更新した場合、更新検知はされるのか？

Yes → ファイル取得時に周期内の更新がある場合のみに動作に、かな。

No → メール通知も有りで、放置しておけば、差があるときだけ通知されていい感じ

# 課題と解決策
## wiki の Update API を使うと、差分が無くても更新扱いになる
差分無ければ更新されないかな、とか思ったんだけど・・ダメでした

解決策
- 事前に差分確認して Update 判断をしておくだけ


## ファイル作成には上書きオプションがない
解決策
- 事前に OneDrive のフォルダを空にしておく

外部ファイルのコンテンツ情報から **[ファイルを作成する](https://docs.microsoft.com/ja-jp/connectors/onedriveforbusiness/#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)** アクションでファイルを作成するわけだが、コピーアクションなどと違って、上書きオプション等がない。故に、先にフォルダ内を全部消しておく方が良い。そうしないと削除直後に作成をしてしまい、Lock に引っかかると思われる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/7ec7dbf1-8c5f-cb1a-dde9-6f2f31e7be41.png)

## Excel ファイルだから・・書式がいい加減
解決策
- Office Scripts で頑張って処理する・・

方眼紙エクセルまで酷くは無くても似たようなものなので、以下のような点も気を付けて JSON Object として取得する
- 単一セルに入ってるか確定してない
- 人によっては、項目と値を同一セルに書き込んでる。例）「名前：〇〇　太郎」が同一セル

## クエリパラメータをURL パラメータとして使うと文字数制限がある
解決策
- Body に渡して使う

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/2d1c1c71-5a3c-c2fb-5570-1b9cd945f703.png)


API の記述をちゃんと見てれば、見分けられたとは思うんですが・・Web 開発経験の浅さのせいですね。 :laughing: 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/be9de2b3-5676-2e0a-1700-2ec908051131.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/83c307af-e440-36fc-95d7-6633918cd2ff.png)

## Wiki でテーブルを作る際に列が多くて狭くなった
解決策
- リンク表記を使って、インチキポップアップを :laughing: 

こんな感じ。ただし、URLを書くべき括弧内に、括弧や空白があると反応しなくなるので、Encode か全角変換が必要。[encodeUriComponent](https://docs.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#encodeUriComponent) が楽かな。
> \[名前](会社名) 
> \[Date](DateTime)

## ファイルの作成者が複数同じになっていた（代理投稿だそうな）
解決策
- ファイル内にある「社名／個人名」を取得

特定のセルに書いてるわけじゃないので、面倒だけど、まぁ、Office Scripts でよしなに

## 存在するファイルより何故か少ない情報がWikiにあがる
問題点
- 多分・・**[ファイルを作成する](https://docs.microsoft.com/ja-jp/connectors/onedriveforbusiness/#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)** が確定する前に、**[フォルダー内のファイルを検索](https://docs.microsoft.com/ja-jp/connectors/onedriveforbusiness/#%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%BC%E5%86%85%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E6%A4%9C%E7%B4%A2)** をしてるせい？

解決策
- とりあえず、Delay で様子見

# あとがき
Data Loss Policy の関係上会社では外部APIを使えないけど、やっぱり使えるようにしてくれると色々と捗るよねって思った。