OneDriveにファイルが登録されたらPower AutomateでExcelに情報を書き込む
OneDriveに保存したファイルの情報を管理したい場合に有効です。また少し変えればExcelに書き込むのではなくメールに送信したりもできます。
- トリガーは「ファイルが生成されたとき」を選ぶ
- 他に必要な情報があればアクションで作る
- 記録するExcelを用意する。
- Excelのアクションを追加する
- もしpng画像の時だけフローを実行したいなら
- おまけ:画像を解析した結果も記録してみる
- ということで
トリガーは「ファイルが生成されたとき」を選ぶ
OneDriveのトリガーに「ファイルが生成されたとき」がありますのでこれを使います。 Power Automateで[+作成]-[自動フロー]で選択できます。
情報を取得したいフォルダを選択します。また、サブフォルダを含めたい場合は詳細オプションを開いて「サブフォルダーを含める」を「はい」にします。
折角なので以前OneDriveに保存したドローンの情報を取り込んでみます。
するとある程度のファイルの情報はアクションの中で選択できるようになります。これをExcelに書き込みます。
項目 | 説明 | サンプル |
---|---|---|
ファイル コンテンツ | ファイルそのもの。画像ファイルであれば画像。オブジェクトタイプに格納できる | {"$content-type": "image/jpeg","$content": "/*************....."} |
ファイル コンテンツの種類 | 種類情報の文字列 | image/jpeg |
ファイル パス | リソースのアドレス | /drives/*********/root:(パス)/(ファイル名) |
ファイルのエンティティ タグ | データ転送の節約に使いたいときのタグ。サーバにデータを再リクエストするときにこのタグもつけると「もう送ったよ」という情報だけが返ってくる。それをクライアント側が受けてキャッシュを参照することで転送量を節約する設計ができる。 | "{----************},1" |
ファイル名 | ファイルの名前 | *******.jpg |
識別子 | 一意に識別できる文字列。 | (一意の文字列) |
【関連記事】 www.papasensei365.info
他に必要な情報があればアクションで作る
トリガーから取得できる情報以外で必要なものがあればアクションで作ります。 今回は「現在時刻」「画像のURL」も追加で記録したいと思います。
現在時刻は「タイムゾーンの変換」で日本時間にする
現在時刻はutcNowという関数で取得できます。ただUTC/協定世界時になりますので日本時間に変換が必要です。 変換のアクションがタイムゾーンの変換になります。 基準時間を「utcNow()」、変換元タイムゾーンを「(UTC)協定世界時」、変換先のタイムゾーンを「(UTC)+09:00」とします。
画像のURLを作る
ファイルの情報には画像のURLが含まれていませんので実際に保存された画像から仕様を探ります。 URLはOneDrive上で画像を選択してプレビューを表示した後、「オリジナルの表示」で確認できます。
そこを見るとURLの仕様が確認できます。 私の場合はこんなURLでした。
https://********.sharepoint.com/personal/*******************/Documents/(フォルダ名)/(ファイル名)
まずはこのURLのフォルダ名までを変数に代入しておきます。
アクションの中から「データの選択 作成」を追加してURLの文字列を保存します。アクションの名前も「URL」に変更しておきました。
ファイル名も一旦変数に保存します。ファイル名は「変数を初期化する」のアクションに入れます。
ファイル名を「変数を初期化する」アクションに入れる理由は以下の記事に詳細を書いています。簡単に言えば「文字化けを回避するため」です。
【関連記事】 www.papasensei365.info
記録するExcelを用意する。
クラウド上にExcelファイルを用意しておきます。現在、Power AutomateのExcel操作はテーブルに対するアクションがメインなので、見出しを作ったらテーブル化しておきます。
この見出しがPower Automateにそのまま表示されるはずです。
トピック:ホントはExcelをデータベースにしない方が良い
今回、データの記録先にExcelを使いましたが、本当は別のデータベースの方が良いです。SharePointでもよいですができればMySQLとかPostgreSQLのようなデータベースに記録した方が快適です。 Excelはファイルがロックしていてアクションを失敗したり、Power Appsのようなツールから参照しようとするときに失敗するケースがあります。 調査やモックを作るくらいの簡単に済ませたい時にだけ使いましょう。
Excelのアクションを追加する
「Excel Online 表に行を追加する」のアクションを追加してフィールドに項目を設定します。 画像のURLの部分だけはconcatを使って文字列結合をします。
// imageURL concat(outputs('URL'),variables('fileName'))
以上で完成です。これでファイが生成されると記録が増えていきます。
全体の流れはこんな感じです。
もしpng画像の時だけフローを実行したいなら
指定の条件の時だけフローを流したい場合は、トリガーの設定で「トリガーの条件」を指定します。
↓
条件の式は先頭に@をつけて記述します。これでpng画像の時だけフローが流れます。
@equals(triggerOutputs()['headers']['Content-Type'],'image/png')
詳しい説明は@h-nagaoさんが詳しく書いてくださっています。以下をご覧ください。
おまけ:画像を解析した結果も記録してみる
せっかくなので画像をCustom Visionで解析して結果もExcelに保存してみます。 Custom Visionの設定は別の記事にまとめてますのでそちらをご覧ください。
https://www.papasensei365.info/entry/2020/04/08/070000www.papasensei365.info
Excelに新しいシートを作って解析結果を記録するテーブルを追加します。
あとはCustom VisionのアクションとExcelのアクションを追加するだけです。 ただし、Custom VissionからのレスポンスはJSON形式で複数のレコードを持っているので、JSONを解析の上「Apply to each」アクションで1レコードずつ記録します。
JSONを解析するときに使うスキーマはこんな形です。
{ "type": "array", "items": { "type": "object", "properties": { "probability": { "type": "number" }, "tagId": { "type": "string" }, "tagName": { "type": "string" } } } }
うまく解析できました。
ということで
OneDriveに保存されたことをトリガーに記録をつけるフローを作成してみました。 アクションを少し変えればメールを送ったり更にファイルを生成したりできるようになりそうですね。