HTML メールを通知や転記で再利用するときに画像を消す方法
Power Automate のクラウド フローを利用して、HTML メールを Teams や SharePoint、Excel に転記するとき、このように感じることはありませんか?
- Teams のチャネルに通知したり、SharePoint に転記したいんだけど、画像付きの HTML メールだと画像が表示できないのに img タグだけ残ってしまう
- Excel のセルに文字情報だけ転記したいけど、テキスト情報だけ取り出したい。
- Power Automate の [Html からテキスト] アクションを活用してテキスト情報にすることができても画像があった場所に不要な文字が残るのでなんとかしたい
そこで今回は、HTML メールを綺麗に転記するためのテクニックをご紹介したいと思います。
解決アプローチの検討:テキスト抽出 or HTML 整形
HTML メールを SharePoint や Excel に転記して再利用しようとしたとき、まず考えるのが 「HTML をそのまま使う?」 それとも 「テキストに変換する?」 という選択肢です。
一見すると、Power Automate の 「Html からテキスト」 アクションを使えば、すべてうまくいきそうに感じます。しかし実際には、いくつかの問題に直面し悩む方も。
テキスト化で発生する問題 (例)
Power Automate の [Html からテキスト] アクションで本文をテキスト化してみると、以下のようなケースが頻繁に発生します。
<img>
タグが[cid:c8607569-294f-403a-a990-b14c64520d7f]
として残り、意味不明な文字列が出力される<table>
構造が崩れて、可読性が著しく落ちる- リンクがあった場所に
[https://XXXX~]
と表示され、URL が長い場合に可読性が悪い - 強調、段落構造などが全て失われる
簡単な選択肢として:REGEXREPLACE() 関数との組み合わせ
表が存在しないメールが転記のターゲットとなる場合、特に大きな問題にはならないのでシンプルなアプローチがオススメです。
- Power Automate の [Html からテキスト] アクションで文字列のみ取り出し、取得した情報を Excel の列にセットしていきます。
- Excel に転記したあと、以下のような式で不要な文字列を除去
Excel 関数の例
=REGEXREPLACE([@本文],"\[cid:.{37}",,0)
REGEXREPLACE 関数は正規表現で柔軟な置換が可能なので、特定の不要な文字列の消去も簡単に行えます。画像の証跡を消すだけなどの場合に活躍しそうですね♪
次は、SharePoint の拡張リッチテキストや Teams への転記で崩れが出ない方法をお伝えします。
実践!Office Scripts で img タグを削除
ここでは、Office Scripts を使って HTML の中から <img>
タグを削除し、必要な部分の HTML を取得する方法をご紹介します。
用意するもの
- Excel ブック
Office Scripts を動かす土台として利用するだけのため空のブックで OK - Office Scripts
クラウド フローから受け取った HTML を不要なタグを削除しクラウド フローに返します - Power Automate のクラウド フロー
手順:Excel 側の作業
- SharePoint ライブラリに処理用の空のブックを作成し保存します。
- 作成した空のブックを開き、Office Scripts を新規作成します。
[新しいスクリプト] をクリックすると画面右側の作業ウィンドウに新しいスクリプトが編集画面が表示されます。 - コードエディターに以下のコードを貼り付けます。
function main(workbook: ExcelScript.Workbook, rawHtml: string) { // 画像タグを消す rawHtml = rawHtml.replace(/<img\b[^>]*>/gi, ""); // そのまま返す return { cleanHtml: rawHtml.trim() }; }
- スクリプトに名前を付けて保存します。
手順:Power Automate クラウド フロー側の設定
- 自動化されたクラウド フローを作成し、トリガーに [メールを受信したとき (Office 365 Outlook)] を指定します。
- [スクリプトの実行 (Excel Online (Business)] アクションと [チャットまたはチャネルでメッセージを投稿する (Microsoft Teams)] を追加し以下の様に設定します。
投稿させるチームやチャネルは任意のものを選択してください。
完成!! HTML メールを送信しテストしてみましょう。画像のみが削除された形で綺麗に転記されたのが確認できます。
✅ このスクリプトの特徴
- セルを使わず直接 HTML を受け取り、整形結果を返す形式なので、セルの文字数制限に悩まされることがありません。
- 画像だけを消して構造を残す処理なので、表や段落も崩れず再利用できます。
参考:Excel セルにテキスト形式で転記したい場合
おまけですが、HTML の構造は要らず、文字情報だけ抽出しテーブルもなるべく崩したくないという場合もありえますよね。そんな方は以下のスクリプトをご利用ください。
/**
* HtmlToTsv
* rawHtml : メール本文 (HTML)
*
* 戻り値 : { summary: 先頭200字, full: タブ区切りプレーンテキスト, fullHtml: <br>付きHTML風テキスト }
* ※ワークブックには一切書き込まず JSON で返却
*/
function main(
workbook: ExcelScript.Workbook,
rawHtml: string
) {
const colSep: string = "\t";
const rowSep: string = "\n";
// 0) 画像 <img ...> を改行に置換
rawHtml = rawHtml.replace(/<img\b[^>]*>/gi, rowSep);
// 1) テーブル行 → タブ区切り
rawHtml = rawHtml.replace(/<tr[^>]*>([\s\S]*?)<\/tr>/gi, (_, cells) =>
cells
.replace(/<\/t[dh]>\s*<t[dh][^>]*>/gi, colSep)
.replace(/<[^>]+>/g, "")
.trim() + rowSep
);
// 2) 残タグ → 改行、空白整理(改行は残す)
const text = rawHtml
.replace(/<[^>]+>/g, rowSep)
.replace(/[^\S\r\n]+/g, " ")
.replace(new RegExp(`${rowSep}{2,}`, "g"), rowSep)
.trim();
return {
summary: text.slice(0, 200), // ← Excel セル保存用(最初の200文字だけ)
full: text, // ← Excel セル保存用
fullHtml: text.replace(/\n/g, '<br>') // ← Teams 投稿用
};
}
まとめ
HTML メールを Teams や SharePoint、Excel に転記して再利用する際、「画像が表示されない」「余計な文字が残る」「構造が崩れる」といった課題は、よくある悩みのひとつです。
本記事では、こうした課題をスッキリ解決するために、Office Scripts を使ったタグ削除やテキスト抽出の方法をご紹介しました。
また、最近注目されている Python in Excel を活用することで、HTML からのテキスト抽出や整形をさらに柔軟に処理することも可能です。
Excel in Python は =PY() とセルに入力するだけでコードがブックに追加できる手軽な開発♪
便利なオープンソースライブラリも沢山利用可能なので、興味のある方は調べてみてくださいね。
Copilot 関連コース
-
CI713-H Copilot Studio による Microsoft 365 チャットボット作成
Microsoft Copilot Studio を利用したチャットボット (Copilot) の作成を Teams や Microsoft 365 に含まれるライセンスの範囲でご紹介します。
チャットボットを作成する方や Microsoft 365 に含まれるライセンス範囲でチャットボットを活用されたい方におすすめのコースです。 -
CI714-H Copilot Studio による生成 AI エージェント構築
Microsoft Copilot Studio (有償ライセンス) を活用し、生成 AI による柔軟な応答設計、SharePoint Online のナレッジ活用、条件分岐を伴う処理設計まで幅広くカバーし、業務に即した AI エージェントの構築方法を解説します。
Microsoft Copilot Studio が提供する機能を短時間で体系的に習得し、実践的な AI エージェント設計スキルを習得いただけます。 -
CI711-H Microsoft 365 Copilot による業務効率化
Microsoft 365 Copilot を使って業務を効率化する方法を学習します。ケーススタディを通じて Microsoft 365 Copilot の機能を理解、使い方を知ることで、日常業務をより効率よく進めることができます。
-
CI618-H Power Automate クラウド フロー 実践
Power Automate の基本操作を習得した方を対象に、関数を用いた数式記述、繰り返し処理、JSON データ処理、さらに安定したフローを構築するためのエラーハンドリング手法など、Power Automate の応用力を高めるために必要なスキル習得をめざします。