gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 19:49:35 24 4
gpt4 key购买 nike

我有一个 excel 文件,其中包含一系列格式化图表,位于名为 Charts 的选项卡上。我已将图表命名为 Figure1Figure2Figure3 等。

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

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

尝试 1:

尝试 1 使用 win32com.client。我正在关注这个例子:How to copy chart from excel and paste it as chart into powerpoint (not image) using python

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

<bound method Paste of <COMObject >>

当前代码:

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

但该示例涉及在 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. 我不想使用 plotnineseabornmatplotlib 等。根据 1,我的同事喜欢他可以单击以显示基础值的 excel 对象。这不能在这些程序中完成。

Python 应该可以做到这一点。有什么想法吗?

最佳答案

你非常接近! CopyPaste 是方法,所以要调用它们需要在它们后面加上括号,例如复制()

要获取幻灯片2,需要使用Slides类的Item方法: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 中的解决方案后,我能够将图表直接粘贴到占位符中。 .这有点 hacky,但它确实有效。

关于python - 如何使用 Python 将 Excel 图表粘贴到 PowerPoint 占位符中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71031183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com