如何使用 Python 将 Excel 图表粘贴到 PowerPoint 占位符中?
How to paste an Excel chart into PowerPoint placeholder using Python?
我有一个 excel 文件,在名为 Charts
的选项卡上有一系列格式化图表。我已将图表命名为 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
但我无法获得将图表插入占位符的正确语法。当我遵循解决方案中的语法时,没有任何反应,我收到一条消息
<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)
要求:
我想将 excel 图表粘贴为 excel 对象(而不是图片),因为我的同事希望能够单击数据系列来获取基础值等
我想将图表粘贴到占位符内(而不是在它上面)。
我不想像大多数示例那样在 PowerPoint 中生成新图表。一位同事准备了一个 excel 仪表板并根据需要格式化了一些图表,从头开始做这一切会很费力。
我不想在 VBA 中这样做。我想在 python 中进行,因为它是更广泛计划的一部分。
我不想使用 plotnine
、seaborn
、matplotlib
等。根据 1,我的同事喜欢 excel他可以单击以显示潜在值的对象。这不能在这些程序中完成。
Python应该可以做到这一点。有什么想法吗?
你非常接近! Copy
和 Paste
是方法,因此要调用它们,您需要在它们之后添加方括号,例如Copy()
.
要获取幻灯片 2,您需要使用 Slides
class 的 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()
编辑:在尝试实施此 中的解决方案后,我能够将图表直接粘贴到占位符中。它有点 hacky,但它有效。
我有一个 excel 文件,在名为 Charts
的选项卡上有一系列格式化图表。我已将图表命名为 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
但我无法获得将图表插入占位符的正确语法。当我遵循解决方案中的语法时,没有任何反应,我收到一条消息
<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)
要求:
我想将 excel 图表粘贴为 excel 对象(而不是图片),因为我的同事希望能够单击数据系列来获取基础值等
我想将图表粘贴到占位符内(而不是在它上面)。
我不想像大多数示例那样在 PowerPoint 中生成新图表。一位同事准备了一个 excel 仪表板并根据需要格式化了一些图表,从头开始做这一切会很费力。
我不想在 VBA 中这样做。我想在 python 中进行,因为它是更广泛计划的一部分。
我不想使用
plotnine
、seaborn
、matplotlib
等。根据 1,我的同事喜欢 excel他可以单击以显示潜在值的对象。这不能在这些程序中完成。
Python应该可以做到这一点。有什么想法吗?
你非常接近! Copy
和 Paste
是方法,因此要调用它们,您需要在它们之后添加方括号,例如Copy()
.
要获取幻灯片 2,您需要使用 Slides
class 的 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()
编辑:在尝试实施此