ルドルフもわたるふもいろいろあってな

Microsoft 365、Power Platform、PowerShellについて調べたことや検証したことなどを投稿します。技術の話は面白い。

【改良版】【質問回答】【Power Automate】メールに添付されたCSVとPDFをSharePointリストに取り込みたい

ましゅまろで質問をいただいて作成した掲題のフローを一部改良しました。

経緯

今回はこの投稿の続きとなる内容です。

前回の投稿で「添付ファイルID」でファイルの実体が取得できるという解説をしました

この章です。
「ポイント1:メールに添付されたファイルの実体は「添付ファイルの取得」アクションで取得できる」
wataruf.hatenablog.com

ポイントになる部分を転記します。

[転記ここから]

「新しいメールが届いたとき 」トリガーの出力には添付ファイルの情報が含まれています。このトリガーが出力する情報には添付ファイルの実体は含まれていませんが、添付ファイルのIDが含まれています。

添付ファイルIDを「Office 365 Outlook」>「添付ファイルの取得」アクションに渡すと添付ファイルの実体を得ることができます。


[転記ここまで]


補足します。
「添付ファイルの取得」アクションに対して添付ファイルのIDを渡すための事前準備として、簡易版JSON Dictionary を使った配列を作成しています。
このフローでは簡易版JSON Dictionary の手動で作成する配列のKeyとして「新しいメールが届いたとき 」トリガーの「ContentType」プロパティを使っています。




配列のKeyに「ContentType」プロパティを使っていることが今回修正が必要になったポイントです。

公開したフローの要修正点の気付き

公開したフローについて質問者のかたからこんな連絡をもらいました。

重要なのは以下の部分です。

テストデータで動かしたところ、CSVファイルのファイルタイプが application/octet-stream になっていてエラーとなっていました。


CSVファイルの「ContentType」プロパティが "text/csv" ではなく "application/octet-stream" であったためフローが期待通り動かなかったようです。

そもそも「ContentType」プロパティとは何か?

「ContentType」プロパティの値である「application/pdf」や「text/csv」はMIMEタイプです。

MIMEタイプの説明は以下の通りです。

「タイプ名/サブタイプ名」の形式で記述され、タイプ名でデータの種類(テキスト、画像、動画など)を、サブタイプ名で具体的なデータ形式を指定する。例えば、プレーンテキストは「text/plain」、HTML文書は「text/html」、JPEG画像は「image/jpeg」などと定められている。
https://e-words.jp/w/MIME%E3%82%BF%E3%82%A4%E3%83%97.html


つまり、データ形式を表す識別子のことですね。
このフローで使うデータ形式が以下の2つです。

  • PDFファイルのMIMEタイプは「application/pdf」である
  • CSVファイルのMIMEタイプは「text/csv」である

このフローはこのMIMEタイプを根拠にしてファイルに対するアクションを決定します。

なぜフローが期待通り動作しなかったのか

では、なぜフローは期待通りに動作しなかったのか。それはファイルに付加されているMIMEタイプが想定したものと異なっていたためです。今回エラーになってしまったファイルのMIMEは「application/octet-stream」でした。

では「application/octet-stream」とは何か?

「application/octet-stream」はファイル形式が不明な場合に用いられるMIMEタイプのようです。

application/octet-streamとは、電子メールの添付ファイルやHTTP通信でファイルの種別を表すのに用いられるMIMEタイプの一つで、任意のバイナリ形式を意味するもの。ファイル形式が不明な場合などに用いられる。
https://e-words.jp/w/application-octet-stream.html


では、なぜ質問者の環境ではファイルのMIMEタイプが「application/octet-stream」だったのか。

これについてはハッキリとした理由はわかっていないです。検索してみたところ、以下のようにMIMEタイプが環境条件で変わることがあるようです。

Microsoft Excelがインストールされているどうかで、CSVファイルのMIMEタイプが変わることがわかりました。
https://qiita.com/sozaiya/items/b1346fe0346be8e45012


わかったことはMIMEタイプをKeyにしたファイル形式は判定の精度が安定しないということです。

なので、判定条件を変えることにしました。

フローの改良点:判定条件を「MIMEタイプ」から「拡張子」にしました。

配列のKey を「MIMEタイプ」から「拡張子」に変更しました。これによって、MIMEタイプには引っ張られずにファイル形式を判定することができます。




改良版のフローをGitHubにアップロードしました。

拡張子で判定するように改良したフローをGitHubにアップロードしました。こちらからダウンロードしてください。
github.com

これで解決、、かと思いきや

改良したフローをDMで質問者のかたにお渡ししました。これで解決、、かと思いきや。

入力元のCSVがShift-JISであり、フローがその中身のテキストを認識できないという事態がおきているようです。

入力元のCSVがShift-JISで当然SPOはUTF-8なので現在仮にサクラエディタUTF-8に変換してテストしております。
Power automateで何か手がないか調べてみたのですがなさそうな感じでした。何か手がありましたら....


すみません。私もそれを仕事で調査中です。まだ解決方法がわかっていないです。
(´・ω・`)


全部を解決できなくて心残りがありますが、少しでも助けになったのであれば幸いです。
(´・ω・`)

残った課題。Shift-JIS形式のCSVを読み取る方法については別途調査結果を公開したいと思います

このブログを書いている時点でまだ未解決の状況です。
解決方法しっているかた、情報いただけると助かります。

可能であればPower Automateのフローに閉じた方法で解決したいです。

おいしみさんが挫折したとなると望みは薄いかも。(´・ω・`)


今回の質問回答としてはこれで終了です。

今回は以上です。