4
4

Power AutomateでPremiumコネクタを使わずメール本文をPDFにする

Last updated at Posted at 2023-11-03

Power Automateのクラウドフローには、いくつもPDFへの変換関連のアクションがあるのですが、APIの登録を使わずに使えるものが案外少なく、OneDriveの「ファイルの変換」系しか見当たりませんでした。
image.png

2バイト文字はダメ?

そんでもって、このアクションはどうも癖があって、.htmlや.msgなど日本語が入っていなければPDFに変換ができるのに、1文字でも2バイト文字を含んでいると変換できずエラーになってしまいます。
この症状については、こちらの記事で紹介されています。
https://qiita.com/ks4050kt/items/c9a1798c945ae025ae5c

いろいろ試してみると、XLSXやDOCX、PPTXなどオフィス系のファイルならば日本語でも問題なくPDFにしてくれることがわかりました。

日本語を含まない 日本語を含む
.xlsx OK OK
.docx OK OK
.pptx OK OK
.html OK NG
.txt OK NG
.msg OK NG

.msgファイルはOutlookから「メールのエクスポート」アクションで書き出せるものです。アプリ版のOutlookをお使いの方であれば、メールをドラッグしてデスクトップなんかに持ってきたときにできるあのファイルです。
image.png
英語ならばPDF化できるのに、やはり日本語を含んでいるとエラーとなってしまいます。

オフィス系のファイルでOKならばWordは?

今回は届いたメールをPDFにしたいですが、Office系のファイルが使えるならばいったんWordのファイルである.docxにしたいところですが、残念ながらWord系のアクションはプレミアムでした。
image.png

ならばExcelだよ。

今回は標準コネクタ縛りですので、多少強引ですがExcelを使います。
OneDrive上にこんなExcelのテーブルを作成しました。もうだいたい想像がつきますよね。
image.png
こちらがクラウドフローの全体図です。
image.png

前半

やっていることは極めて単純です。メールの本文はHTMLの場合があるので、「Htmlからテキスト(プレビュー)」をつかってプレーンテキストに変換してやります。
image.png

それをあらかじめ用意したエクセルのテーブルに書き込んでやります。行の追加でもよいのですが、それだとどんどん行が追加されて、最終的にPDFにする際に過去のメールも表示されてしまうので、ID列を作って同じ列を更新していくことにします。

後半

エクセルのテーブル行更新をした内容を変換するのですが、更新されてすぐに次の変換がかかると間に合わないことがある様でしたので、待ち時間20秒を挟んでみました。このタイミングは適当に変更してみてください。
変換できたらOneDriveにファイル作成で書き出します。
image.png
最後にエクセルのテーブルをクリアします。ちなみにクリアは式で''を入れてやるとうまくいきます。

image.png

こちらが出力できたPDFのプレビュー画面です。
image.png

日本語対応してくれればよいのですが・・・

エンコードの問題かな?と思ってBOMを入れてみたりといろ試してみましたがギブアップして多少強引な方法でアプローチしてみました。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4