使用 Python 将图表从 Excel 转换为 PowerPoint

Posted

技术标签:

【中文标题】使用 Python 将图表从 Excel 转换为 PowerPoint【英文标题】:Charts from Excel to PowerPoint with Python 【发布时间】:2015-12-14 21:18:18 【问题描述】:

我有一个使用出色的“xlsxwriter”模块创建的 excel 工作簿。在这本工作簿中,大约有 200 个嵌入式图表。我现在正试图将所有这些图表导出到几个 power point 演示文稿中。理想情况下,我想保留原始格式和嵌入数据而不链接到外部 Excel 工作簿。

我确信有一种方法可以使用 VBA 来做到这一点。但是,我想知道是否有办法使用 Python 来做到这一点。有没有办法将 xlsxwriter 图表对象放入 powerpoint 中?

我查看了 python-pptx,找不到任何关于从 excel 工作簿获取图表或数据系列的信息。

任何帮助表示赞赏!

【问题讨论】:

您可以尝试 OprnPyXl 从我相信它支持的 Excel 文件中读取图表,写入文件缓冲区,然后添加到 PowerPoint。编辑:0penPyXl 仍然不支持图表阅读,所以我怀疑这在 python 中是可能的。 试试 www.pptxbuilder.com 【参考方案1】:

我没有足够的声誉发表评论,但如果您遇到与 @R__raki__ 相同的问题,那么您可以使用 VBA 参考定义的整数值。在这种情况下,它将是 12。

所以替换

Slide=presentation.Slides.Add(presentation.Slides.Count+1,constants.ppLayoutBlank)

Slide=presentation.Slides.Add(presentation.Slides.Count+1,12)

请参阅here 了解更多信息。

【讨论】:

【参考方案2】:

在花了几个小时尝试不同的事情之后,我找到了解决这个问题的方法。希望它可以帮助某人节省一些时间。以下代码会将所有图表从“workbook_with_charts.xlsx”复制到“Final_PowerPoint.pptx”。

由于某种原因,我还不明白,从 CMD 终端运行这个 Python 程序时效果更好。如果您尝试多次运行它,有时它会崩溃,即使第一次运行通常是可以的。

另一个问题是,在第五行中,如果您使用“presentation=PowerPoint.Presentations.Add(False)”将其设为 False,则它不适用于 Microsoft Office 2013,即使“True”和“False”都将仍然可以使用 Microsoft Office 2010。

如果有人能就两个问题澄清这些,那就太好了。

# importing the necessary libraries
import win32com.client
from win32com.client import constants

PowerPoint=win32com.client.Dispatch("PowerPoint.Application")
Excel=win32com.client.Dispatch("Excel.Application")


presentation=PowerPoint.Presentations.Add(True)
workbook=Excel.Workbooks.Open(Filename="C:\\.........\\workbook_with_charts.xlsx",ReadOnly=1,UpdateLinks=False)

for ws in workbook.Worksheets:
    for chart in ws.ChartObjects():
    # Copying all the charts from excel
        chart.Activate()
        chart.Copy()  

        Slide=presentation.Slides.Add(presentation.Slides.Count+1,constants.ppLayoutBlank)
        Slide.Shapes.PasteSpecial(constants.ppPasteShape)

    # WE are going to make the title of slide the same chart title
    # This is optional 
    textbox=Slide.Shapes.AddTextbox(1,100,100,200,300)
    textbox.TextFrame.TextRange.Text=str(chart.Chart.ChartTitle.Text)

presentation.SaveAs("C:\\...........\\Final_PowerPoint.pptx")
presentation.Close()
workbook.Close()

print 'Charts Finished Copying to Powerpoint Presentation'

Excel.Quit()
PowerPoint.Quit()

【讨论】:

我正在和AttributeError: ppLayoutBlank打交道 @nyan314sn 你好!这是一个非常简洁的基本使用示例。你能告诉你在哪里找到了支持材料(帮助、指南、教程等),其中解释了代码及其用法,如 PowerPoint.Presentations.Add()Slide.Shapes.PasteSpecial()Slide.Shapes.AddTextbox() @Mike,一旦你获得了从 python 控制 excel 和/或 powerpoint 文件的基本设置,其他复杂的东西基本上来自 VBA 指南,因为我们基本上是从更有效的代码结构编写 VBA 代码Python 的...例如,docs.microsoft.com/en-us/office/vba/api/… 或 docs.microsoft.com/en-us/office/vba/api/excel.workbook @R__raki__ 您好,这段代码应该可以解决您的问题:from win32com.client import constants【参考方案3】:

我倾向于使用当前 python-pptx 版本的方法是读取 Excel 表中的数据并在 python-pptx 中重新创建图表。这当然需要知道图表格式是什么,等等,所以我可以明白你为什么不想这样做。

过去已经直接从 Excel 导入图表,请参阅 GitHub 上的拉取请求:https://github.com/scanny/python-pptx/pull/65

但它在 python-pptx 上涉及了大量的手术,现在有很多版本,所以它最多可能是一个很好的指南,说明哪些策略可能有效。你需要很糟糕,我想走那条路:)

【讨论】:

您好,Scanny,感谢您的回答。我不介意用 python-pptx 重新创建图表,即使我怀疑 python-pptx 在图表方面提供的复杂程度与“xlsxwriter”相同。此外,我找不到任何从 python-pptx 读取 excel 工作表数据的示例。有的话请分享。 您需要使用另一个包来读取 Excel 数据。我在想使用 xlsxwriter 是一种选择,因为无论如何它都是由 python-pptx 导入的,但现在请记住它不适用于阅读。它必须是我想的其他 Excel 包之一,或者可能导出为 CSV。 嗨 @scanny 是堆积图、水平条形图和面积图,很快就会支持 python-pptx 图表功能? @vagabond 这是一个单独的问题,最好在 python-pptx GitHub 问题列表中解决。简短的回答是现在大部分都在那里。

以上是关于使用 Python 将图表从 Excel 转换为 PowerPoint的主要内容,如果未能解决你的问题,请参考以下文章

2022年最新Python大数据之Excel基础

用于将Excel文件中的图表转换为图像文件的Java代码示例

用于将Excel文件中的图表转换为图像文件的Java代码示例

如何使用python将excel文件中的时间戳列表从UTC转换为旧金山时间(太平洋时间)? [复制]

在 Python 3.9 中使用 Pandas 将 Excel 转换为 JSON

Python导出Excel图表