首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Python将Excel图表粘贴到PowerPoint占位符中?

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

Stack Overflow用户
提问于 2022-02-08 09:08:10
回答 1查看 818关注 0票数 3

我在一个名为Charts的选项卡上有一个带有一系列格式化图表的excel文件。我已经命名了图表,Figure1Figure2Figure3等。

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

我想在幻灯片3的左边占位符粘贴Figure1,在幻灯片3的右边占位符粘贴Figure2。我想在python中这样做,因为数据分析是用python完成的,而excel用于与同事共享存储的结果。

尝试1:

尝试1使用win32com.client。我遵循下面的示例:How to copy chart from excel and paste it as chart into powerpoint (not image) using python

但是,我无法正确地将图表插入占位符。当我遵循解决方案中的语法时,什么都不会发生,我会收到一条消息。

<装订法粘贴>

当前代码:

代码语言:javascript
复制
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:

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

但是这个例子涉及到在PowerPoint中从头开始创建一个excel图表(我不知道你为什么要这么做),而且我也无法理解从excel插入现有图表的语法。

当前代码:

代码语言:javascript
复制
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)

Requirements:

  1. 我想将excel图表粘贴为excel对象(而不是图片),因为我的同事喜欢点击数据序列来获取底层值等等。

  1. I希望将图表粘贴到占位符中(而不是在占位符之上)。

  1. 我不想像大多数例子那样在PowerPoint中生成一个新的图表。一位同事已经准备了一个excel仪表板,并按需要格式化了许多图表,从零开始这样做是很费劲的。

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

  1. 我不想使用类似plotnineseabornmatplotlib等东西。我的同事喜欢excel对象,他可以点击这些对象来显示底层值。在这些程序中不能这样做。

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

EN

Stack Overflow用户

回答已采纳

发布于 2022-02-11 07:02:33

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

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

代码语言:javascript
复制
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中实现解决方案之后,我能够将图表直接粘贴到占位符中。有点烦人,但很管用。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71031183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档