使用 PasteExcelTable 将 Excel 数据复制到带有 Python 的 Outlook 电子邮件正文



复制到 Word 文件的格式化 Excel 区域

这会从 Excel 复制一系列单元格,并将它们粘贴到保留格式的 Word 文档中。代码适用于此。但是,我还想将数据粘贴到带有单元格样式的电子邮件正文中。

import sys
from pathlib import Path
import win32com.client as win32

excel_path = str(Path.cwd() / 'input.xlsx')
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = False
excel.DisplayAlerts = False
wb = excel.Workbooks.Open(excel_path)
ws = wb.Worksheets(1)
ws.Range("A1:B2").Copy()
wb.Close()
word_path = str(Path.cwd() / 'output.docx')
word = win32.gencache.EnsureDispatch('Word.Application')
doc = word.Documents.Open(word_path)
doc.Content.PasteExcelTable(False, False, True)
doc.Close()
# That works, but now I want to paste the copied Excel range into the body of
# an email. The solution may look something like the following with the "X"
# as a "Selection" or "Range" object for the PasteExcelTable method.
outlook = win32.gencache.EnsureDispatch('Outlook.Application')
new_mail = outlook.CreateItem(0)
new_mail.To = 'person@email.com'
new_mail.Body = ws.Range("A1:B2").PasteExcelTable(False, False, True)
new_mail.Send()
sys.exit()

我相信[PasteExcelTable]2可以用来在Outlook上做到这一点,就像它对Word文件所做的那样,也许有人知道如何做到这一点。

我没有正确定义范围。这是我的一个尝试示例:

    new_mail.Body = ws.Range("A1:B2").PasteExcelTable(False, False, True)

我知道这可以用VBA完成,但我想使用Python,看看PasteExcelTable是否适用于此。如果不可能,我将捕获数据范围的图像并将其粘贴到电子邮件中。

经过数小时的研究和实验,我发现了如何在Outlook中使用PasteExcelTable。我希望这会有所帮助。您只需要在剪贴板中拥有 Excel 表格。

import win32com.client

outlook = win32com.client.Dispatch('Outlook.Application')
mail = outlook.CreateItem(0)
mail.To = "person@email.com"
mail.Subject = "Subject"
mail.Display()
inspector = outlook.ActiveInspector()
word_editor = inspector.WordEditor
word_range = word_editor.Application.ActiveDocument.Content
word_range.PasteExcelTable(False, False, True)

希望这会有所帮助...

import win32com.client as win32
import pandas as pd
df = pd.read_excel('fullexelpath.xlsx', index_col=False, nrows = 5,  usecols = "A:D")
body = df.to_html()
outlook = win32.gencache.EnsureDispatch('Outlook.Application')
mail = outlook.CreateItem(0)
mail.To = 'abc@gmail.com'
mail.HTMLBody = (body)
mail.Send()

这会从 Excel 复制一系列单元格,并将它们粘贴到保留格式的 Word 文档中。代码适用于此。但是,我还想将数据粘贴到带有单元格样式的电子邮件正文中。

在 Outlook 中处理正文有三种主要方法:

  1. 正文 - 表示邮件正文的纯文本。
  2. HTMLBody.
  3. 文字编辑器。Outlook 使用 Word 作为电子邮件编辑器。类提供 WordEditor 属性,该属性从表示邮件正文的 Word 对象模型中返回 Document 类的实例。或者只是使用 MailItem 类的 [GetInspector] 方法来检索Inspector类的实例。您可以在第 17 章:使用项目正文中阅读更多相关信息。

因此,基本上您可以在Outlook的情况下重复使用用于Word的相同代码库。

我无法使用PasteExcelTable,但我能够使用以下代码使用HTMLBody完成此操作:

import sys
from pathlib import Path
import win32com.client as win32
from PIL import ImageGrab
excel_path = str(Path.cwd() / 'input.xlsx')
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = False
excel.DisplayAlerts = False
wb = excel.Workbooks.Open(excel_path)
ws = wb.Worksheets(1)
win32c = win32.constants
ws.Range("A1:B2").CopyPicture(Format=win32c.xlBitmap)
img = ImageGrab.grabclipboard()
image_path = str(Path.cwd() / 'test.png')
img.save(image_path)
outlook = win32.gencache.EnsureDispatch('Outlook.Application')
new_mail = outlook.CreateItem(0)
new_mail.To = 'person@email.com'
new_mail.Attachments.Add(Source=image_path)
body = "<h1>Email text...</h1><br><br> <img src=test.png>"
new_mail.HTMLBody = (body)
new_mail.Send()
wb.Close()
sys.exit()

相关内容

  • 没有找到相关文章

最新更新