如何使用 Python 将 Excel 图表粘贴到 PowerPoint 占位符中?

2024-04-08

我有一个 excel 文件,其中一个名为的选项卡上有一系列格式化图表Charts。我已经给图表命名了,Figure1, Figure2, Figure3, etc.

我有一个现有的 PowerPoint 模板。该模板每张幻灯片有 2 个占位符(以便每张幻灯片可以容纳 2 个图表)。

我想粘贴Figure1在幻灯片 3 的左侧占位符中,以及Figure2在幻灯片 3 的右侧占位符中。我想在 python 中执行此操作,因为数据分析是在 python 中完成的,并且使用 excel 与同事共享存储的结果。

尝试1:

尝试1使用win32com.client。我正在遵循这个例子:如何使用Python从Excel复制图表并将其作为图表粘贴到powerpoint(而不是图像)中 https://stackoverflow.com/questions/60445740/how-to-copy-chart-from-excel-and-paste-it-as-chart-into-powerpoint-not-image-u

但我无法获得正确的语法来将图表插入占位符。当我遵循解决方案中的语法时,没有任何反应,并且收到一条消息

>

当前代码:

xlApp = win32.Dispatch('Excel.Application')
wb = xlApp.Workbooks.Open(outputPath+'Chart Pack.xlsb')
        
pptApp = win32.Dispatch('PowerPoint.Application')
ppt = pptApp.Presentations.Open(template)
        
# attempt 1
wb.sheets('Charts').ChartObjects('Figure1').Copy
ppt.slides[2].Shapes.Paste
    
# attempt 2
wb.sheets('Charts').ChartObjects('Figure1').Copy
ppt.slides[2].placeholders[1].Paste

尝试2:

尝试2使用python-pptx。我查看了这里的文档:https://python-pptx.readthedocs.io/en/latest/user/placeholders-using.html https://python-pptx.readthedocs.io/en/latest/user/placeholders-using.html

但该示例涉及在 PowerPoint 中从头开始创建 Excel 图表(我不确定您为什么要这样做),并且我无法弄清楚从 Excel 插入现有图表的语法。

当前代码:

from pptx import Presentation

xlApp = win32.Dispatch('Excel.Application')
wb = xlApp.Workbooks.Open(outputPath+'Chart Pack.xlsb')
    
prs = Presentation(template)
slide = prs.slides[3]
    
for shape in slide.placeholders:
    print('%d %s' % (shape.placeholder_format.idx, shape.name))

placeholder = prs.slides[3].placeholders[1]
placeholder.name
placeholder.placeholder_format.type
placeholder.insert_chart(wb.sheets('Charts').ChartObjects('Figure1').Copy)

要求:

  1. 我想将 Excel 图表粘贴为 Excel 对象(而不是图片),因为我的同事希望能够单击数据系列来获取基础值等。

  2. 我想将图表粘贴到占位符内(而不是在其顶部)。

  3. 我不想像大多数示例那样在 PowerPoint 中生成新图表。一位同事准备了一个 Excel 仪表板,并根据需要格式化了许多图表,从头开始做这一切会很费力。

  4. 我不想在 VBA 中这样做。我想用 python 来完成它,因为它是更广泛的程序的一部分。

  5. 我不想使用类似的东西plotnine, seaborn, matplotlib等等。根据 1,我的同事喜欢 Excel 对象,他可以单击这些对象来显示基础值。这在这些程序中是无法完成的。

Python 应该能够做到这一点。有任何想法吗?


你非常接近!Copy and Paste是方法,因此要调用它们,您需要在它们后面添加括号,例如Copy().

要获取幻灯片 2,您需要使用Item的方法Slides class: ppt.Slides.Item(2)

import win32com.client as win32

xlApp = win32.Dispatch('Excel.Application')
wb = xlApp.Workbooks.Open(outputPath+'Chart Pack.xlsb')

pptApp = win32.Dispatch('PowerPoint.Application')
ppt = pptApp.Presentations.Open(template)

slide_num = 3
LEFT_PLACEHOLDER = 3
RIGHT_PLACEHOLDER = 2

# Figure1
window.View.GotoSlide(slide_num)
wb.sheets('Charts').ChartObjects('Figure1').Copy()
ppt.Slides.Item(slide_num).Shapes.Paste().Select()
window.Selection.Cut()
ppt.Slides.Item(slide_num).Shapes(LEFT_PLACEHOLDER).Select()
window.View.Paste()

# Figure2
window.View.GotoSlide(slide_num)
wb.sheets('Charts').ChartObjects('Figure2').Copy()
ppt.Slides.Item(slide_num).Shapes.Paste().Select()
window.Selection.Cut()
ppt.Slides.Item(slide_num).Shapes(RIGHT_PLACEHOLDER).Select()
window.View.Paste()

编辑:在尝试实现此解决方案之后,我能够将图表直接粘贴到占位符中answer https://stackoverflow.com/a/60061100/3589122。这有点hacky,但它确实有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Python 将 Excel 图表粘贴到 PowerPoint 占位符中? 的相关文章

随机推荐