質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.36%
Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

6897閲覧

Python Outlookでメール送信の際に、本文にエクセルの表を挿入したい

yukino3

総合スコア1

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/11/11 02:04

前提・実現したいこと

Pythonでエクセルを作成し、Outlookで自動送信するプログラムを作成しています。
作成したエクセルファイルを添付して送信できたのですが、受信した人が確認する際に添付ファイルを開ける手間があるため、
メール本文にエクセルの表をそのまま挿入したいです。

pandasでエクセルの表からリストを作成し挿入したのですが、表のようにきれいに表示できませんでした。

メール送信の部分のコードとメールの本文、完成のイメージを載せます。

よろしくお願いいたします。

該当のソースコード

Python

1import win32com.client 2import pandas as pd 3 4# Excelからリストを作成 5last = 3 6df =pd.read_excel("売上_テスト.xlsx") 7df_hyou = df.iloc[0:last,0:3] 8 9#メールの送信 10outlook = win32com.client.Dispatch('Outlook.Application') 11mymail = outlook.CreateItem(0) 12mymail.BodyFormat = 1 13mymail.To = 'test@yahoo.co.jp' 14mymail.Subject = f'テストメール' 15mymail.Body = f'''Aさん 16 17昨日の売上です。 18 19{df_hyou} 20 21よろしくお願いいたします。 22'''+ '\n' 23 24path = r"C:\Users\user\Desktop\売上_テスト.xlsx" 25mymail.Attachments.Add (path) 26mymail.Send()

プログラムから作成されたメール本文

Aさん

昨日の売上です。

商品 個数 金額

0 シャープペンシル 50 5000
1 消しゴム 10 700
2 定規 15 1650

よろしくお願いいたします。

完成のイメージ

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

BodyFormat に何を設定しても、Body プロパティに文字列を代入した時点でテキスト形式のメールとなり、表を埋め込むことはできなくなります。
表を使いたいなら、HTMLBody プロパティに HTML 形式で本文を設定する必要があります。
おそらく以下のようにすればよいと思います。

mymail.HTMLBody = f'''<p>Aさん</p>

<p>昨日の売上です。</p> {df_hyou.to_html()} <p>よろしくお願いいたします。</p> '''+ '\n'

投稿2021/11/18 10:43

millefeuille

総合スコア226

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukino3

2021/11/19 02:34

イメージしていたメール本文になりました。 ありがとうございました。
guest

0

1 → テキスト
2 → HTML
3 → リッチテキスト

mymail.BodyFormat = 1
1を3のリッチテキストに変更し試してみて下さい。

投稿2021/11/12 02:59

ekTJ

総合スコア109

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukino3

2021/11/15 00:12

mymail.BodyFormatは1,2,3のすべて試しましが、表のようにはなりませんでした。 3のリッチテキストの場合に表示されたリストを下に載せておきます。 商品 個数 金額 0 シャープペンシル 50 5000 1 消しゴム 10 700 2 定規 15 1650 おそらくリストでは、表の罫線などを引けないのではと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問