我在一个名为Charts的选项卡上有一个带有一系列格式化图表的excel文件。我已经命名了图表,Figure1,Figure2,Figure3等。
我有一个现有的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
但是,我无法正确地将图表插入占位符。当我遵循解决方案中的语法时,什么都不会发生,我会收到一条消息。
<装订法粘贴>
当前代码:
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插入现有图表的语法。
当前代码:
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:
plotnine、seaborn、matplotlib等东西。我的同事喜欢excel对象,他可以点击这些对象来显示底层值。在这些程序中不能这样做。Python应该能够做到这一点。有什么想法吗?
发布于 2022-02-11 07:02:33
您非常接近!Copy和Paste是方法,因此要调用它们,需要在它们后面添加括号,例如Copy()。
要获得幻灯片2,您需要使用Item类的Slides方法: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/questions/71031183
复制相似问题