【问题标题】:Send Graphs in Outlook with Python使用 Python 在 Outlook 中发送图表
【发布时间】:2018-11-09 22:57:50
【问题描述】:

我想通过包含视觉效果而不仅仅是文本来创建更好的自动化报告。我想做的具体方法是通过win32com.client引用outlook.application

我知道发送电子邮件的基础知识,我尝试阅读 VBA 参考资料,发现最接近的是View Object,但我正在寻找的是添加饼图、条形图等的能力.

我通过 GUI 知道,一旦从应用程序中弹出一条打开的消息,您可以Insert > Chart 并选择要加载到消息中的所需图表。

Outlook API 中有没有一种方法可以利用Insert Chart 窗口中提供的这些图形/图表?或者在消息样式/格式化方面,与应用程序相比,API 的可用功能相对有限?

这是创建/发送消息的基本代码,我想将这些视觉效果添加到消息正文中。

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。

【问题讨论】:

    标签: python vba outlook-restapi


    【解决方案1】:

    在做了更多测试后,我想通了。这是我用我放置的样本数据所做的一部分。请注意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()
    

    【讨论】:

    • 你能把你正在使用的样本数据放上去吗?
    猜你喜欢
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 2017-12-08
    • 2016-10-20
    • 1970-01-01
    • 2021-08-15
    • 2017-08-24
    相关资源
    最近更新 更多