使用 Python 在 Outlook 中发送图表
Send Graphs in Outlook with Python
我想通过包含视觉效果而不仅仅是文本来创建更好的自动化报告。我想做的具体方法是通过 win32com.client
.
引用 outlook.application
我知道发送电子邮件的基础知识,我尝试通读 VBA 参考资料,我找到的最接近的是 View Object,但我一直在寻找的是能力添加饼图、条形图等
我通过 GUI 知道,一旦从应用程序弹出一条打开的消息,您就可以 Insert > Chart
和 select 将所需的图表加载到消息中。
在 outlook API 中有没有办法能够利用 Insert Chart
window 中可用的这些 graphs/charts?或者,在消息 styling/formatting 方面,与应用程序相比,API 的可用功能是否相对有限?
这是消息的基本代码created/sent,我想将这些视觉效果添加到消息正文中。
import win32com.client as win32
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = 'some@name'
mail.Subject = 'Subject'
mail.Body = 'Body'
# or
mail.HTMLBody = '<h2>HTML body</h2>'
mail.Send()
更新
我目前正在深入研究它,但我发现 vba 应该可以满足我的需求。我也在 excel 中弄乱了一些图表对象。这是我需要理解的代码
Sub CopyAndPasteToMailBody()
Set mailApp = CreateObject("Outlook.Application")
Set mail = mailApp.CreateItem(olMailItem)
mail.Display
Set wEditor = mailApp.ActiveInspector.wordEditor
ActiveChart.ChartArea.Copy
wEditor.Application.Selection.Paste
End Sub
这是我拥有的一些用于创建图表对象的基本代码:
from win32com import client
excel = client.Dispatch("excel.application")
excel.Visible = True
wb = excel.Workbooks.Add()
ws = wb.Worksheets.Add()
chs = ws.ChartObjects()
co = chs.Add(0,0,500,500)
更新
下面我已经回答了如何在 Excel 中生成图表并通过 Outlook 发送它。它不是 'Outlook API',因为必须使用整个 Office。如果您像我一样因为缺少使用 win32com 与 Office 应用程序交互的文档而感到困惑,那是因为它们都在 VBA Reference 中,只需要相应地转换为 python。
经过更多的测试,我明白了。这是我用我周围的样本数据制作的一部分。请注意 ch.ChartType = 5 # Pie chart
行,因为它回答了问题。是的,可以通过 API 访问图形和图表,并且可以找到 ChartTypes here。这回答了具体问题,以及如何获取 Office 外部存在的数据并将其加载到图表中以通过 API.
通过 Outlook 发送的更大问题。
from win32com import client
from random import randint
labels = []
ch_data = []
for x,y in _data:
labels.append(x)
ch_data.append(y)
_range = range(1,len(labels)+1)
l_plot = map(lambda x: 'A'+str(x),_range)
d_plot = map(lambda x: 'B'+str(x),_range)
start_end = '{}:{}'.format(l_plot[0],d_plot[-1])
excel = client.Dispatch('excel.application')
excel.Visible = True # optional
wb = excel.Workbooks.Add()
ws = wb.Worksheets.Add()
cnt = 0
for i in l_plot:
ws.Range(i).Value = labels[cnt]
cnt += 1
cnt = 0
for i in d_plot:
ws.Range(i).Value = ch_data[cnt]
cnt += 1
chs = ws.ChartObjects()
co = chs.Add(100,0,250,250)
ch = co.Chart
ch.HasTitle = True
ch.ChartTitle.Text = 'Chart Title'
ch.ChartType = 5 # Pie chart
series = ch.SeriesCollection()
series.Extend(ws.Range(start_end))
co.Copy()
outlook = client.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.Display() # required to paste chart
mail.To = 'alias@email.com'
mail.Subject = 'Test Mail Item with Chart'
mail.HTMLBody = '<h3>Hello sir. This is a test</h3><br><br>'
inspector = mail.GetInspector
editor = inspector.WordEditor
editor.Select()
editor.Application.Selection.Start = editor.Application.Selection.End
editor.Application.Selection.Paste()
mail.HTMLBody += '<p>I\'m glad this is finally figured out</p>'
mail.Send()
我想通过包含视觉效果而不仅仅是文本来创建更好的自动化报告。我想做的具体方法是通过 win32com.client
.
outlook.application
我知道发送电子邮件的基础知识,我尝试通读 VBA 参考资料,我找到的最接近的是 View Object,但我一直在寻找的是能力添加饼图、条形图等
我通过 GUI 知道,一旦从应用程序弹出一条打开的消息,您就可以 Insert > Chart
和 select 将所需的图表加载到消息中。
在 outlook API 中有没有办法能够利用 Insert Chart
window 中可用的这些 graphs/charts?或者,在消息 styling/formatting 方面,与应用程序相比,API 的可用功能是否相对有限?
这是消息的基本代码created/sent,我想将这些视觉效果添加到消息正文中。
import win32com.client as win32
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = 'some@name'
mail.Subject = 'Subject'
mail.Body = 'Body'
# or
mail.HTMLBody = '<h2>HTML body</h2>'
mail.Send()
更新
我目前正在深入研究它,但我发现 vba 应该可以满足我的需求。我也在 excel 中弄乱了一些图表对象。这是我需要理解的代码
Sub CopyAndPasteToMailBody()
Set mailApp = CreateObject("Outlook.Application")
Set mail = mailApp.CreateItem(olMailItem)
mail.Display
Set wEditor = mailApp.ActiveInspector.wordEditor
ActiveChart.ChartArea.Copy
wEditor.Application.Selection.Paste
End Sub
这是我拥有的一些用于创建图表对象的基本代码:
from win32com import client
excel = client.Dispatch("excel.application")
excel.Visible = True
wb = excel.Workbooks.Add()
ws = wb.Worksheets.Add()
chs = ws.ChartObjects()
co = chs.Add(0,0,500,500)
更新
下面我已经回答了如何在 Excel 中生成图表并通过 Outlook 发送它。它不是 'Outlook API',因为必须使用整个 Office。如果您像我一样因为缺少使用 win32com 与 Office 应用程序交互的文档而感到困惑,那是因为它们都在 VBA Reference 中,只需要相应地转换为 python。
经过更多的测试,我明白了。这是我用我周围的样本数据制作的一部分。请注意 ch.ChartType = 5 # Pie chart
行,因为它回答了问题。是的,可以通过 API 访问图形和图表,并且可以找到 ChartTypes here。这回答了具体问题,以及如何获取 Office 外部存在的数据并将其加载到图表中以通过 API.
from win32com import client
from random import randint
labels = []
ch_data = []
for x,y in _data:
labels.append(x)
ch_data.append(y)
_range = range(1,len(labels)+1)
l_plot = map(lambda x: 'A'+str(x),_range)
d_plot = map(lambda x: 'B'+str(x),_range)
start_end = '{}:{}'.format(l_plot[0],d_plot[-1])
excel = client.Dispatch('excel.application')
excel.Visible = True # optional
wb = excel.Workbooks.Add()
ws = wb.Worksheets.Add()
cnt = 0
for i in l_plot:
ws.Range(i).Value = labels[cnt]
cnt += 1
cnt = 0
for i in d_plot:
ws.Range(i).Value = ch_data[cnt]
cnt += 1
chs = ws.ChartObjects()
co = chs.Add(100,0,250,250)
ch = co.Chart
ch.HasTitle = True
ch.ChartTitle.Text = 'Chart Title'
ch.ChartType = 5 # Pie chart
series = ch.SeriesCollection()
series.Extend(ws.Range(start_end))
co.Copy()
outlook = client.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.Display() # required to paste chart
mail.To = 'alias@email.com'
mail.Subject = 'Test Mail Item with Chart'
mail.HTMLBody = '<h3>Hello sir. This is a test</h3><br><br>'
inspector = mail.GetInspector
editor = inspector.WordEditor
editor.Select()
editor.Application.Selection.Start = editor.Application.Selection.End
editor.Application.Selection.Paste()
mail.HTMLBody += '<p>I\'m glad this is finally figured out</p>'
mail.Send()