Power Automateのクラウドフローには、いくつもPDFへの変換関連のアクションがあるのですが、APIの登録を使わずに使えるものが案外少なく、OneDriveの「ファイルの変換」系しか見当たりませんでした。
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をお使いの方であれば、メールをドラッグしてデスクトップなんかに持ってきたときにできるあのファイルです。
英語ならばPDF化できるのに、やはり日本語を含んでいるとエラーとなってしまいます。
オフィス系のファイルでOKならばWordは?
今回は届いたメールをPDFにしたいですが、Office系のファイルが使えるならばいったんWordのファイルである.docxにしたいところですが、残念ながらWord系のアクションはプレミアムでした。
ならばExcelだよ。
今回は標準コネクタ縛りですので、多少強引ですがExcelを使います。
OneDrive上にこんなExcelのテーブルを作成しました。もうだいたい想像がつきますよね。
こちらがクラウドフローの全体図です。
前半
やっていることは極めて単純です。メールの本文はHTMLの場合があるので、「Htmlからテキスト(プレビュー)」をつかってプレーンテキストに変換してやります。
それをあらかじめ用意したエクセルのテーブルに書き込んでやります。行の追加でもよいのですが、それだとどんどん行が追加されて、最終的にPDFにする際に過去のメールも表示されてしまうので、ID列を作って同じ列を更新していくことにします。
後半
エクセルのテーブル行更新をした内容を変換するのですが、更新されてすぐに次の変換がかかると間に合わないことがある様でしたので、待ち時間20秒を挟んでみました。このタイミングは適当に変更してみてください。
変換できたらOneDriveにファイル作成で書き出します。
最後にエクセルのテーブルをクリアします。ちなみにクリアは式で''を入れてやるとうまくいきます。
日本語対応してくれればよいのですが・・・
エンコードの問題かな?と思ってBOMを入れてみたりといろ試してみましたがギブアップして多少強引な方法でアプローチしてみました。