【问题标题】:Python-pptx: How to update chart data for the second chart, if two chart are present on same slidePython-pptx:如果两个图表出现在同一张幻灯片上,如何更新第二个图表的图表数据
【发布时间】:2026-02-14 02:55:01
【问题描述】:

我想更新现有 powerpoint 演示幻灯片的图表数据,有 2 个图表,即条形图和饼图。我成功地更新了条形图,因为它是我的内容幻灯片占位符上的第一个元素。现在我不确定如何更新第二张图表,即同一张幻灯片上的饼图。 我的代码如下:

prs = Presentation("Request_Slide.pptx")
slide = prs.slides[0]
for shape in slide.placeholders:
     print('%d %s' %(shape.placeholder_format.idx, shape.name))

上面我得到了以下回复:

0 Title 1
1 Content Placeholder 5

在此帮助下,我设法导航到 Slide[0] 上的第一个图表并更新了其图表数据,但是我正在努力导航到内容占位符中存在的第二个图表。任何建议都会有很大帮助,并提前致谢。

【问题讨论】:

  • 占位符只是形状的一种特殊类别,并非所有形状都是占位符。尝试改用for shape in slide.shapes,看看如何以这种方式识别第二张图表。它可能是第二张图表被添加为自己的“独立”形状。据我所知,一个占位符不能直接容纳两个图表。
  • @Scanny:使用 Slide.shapes 我得到了所有的形状,但是我发现我无法按照以下代码访问形状索引:prs = Presentation("A-Sample_slide.pptx" ) slide1 = prs.slides[0] for shape in slide1.shapes: print('%d %s' % (prs.slides.index(shape), shape.name)) 相反,我收到如下错误消息:“ raise ValueError ('%s is not in slide collection' % slide) ValueError: is not in slide collection"

标签: python-3.x charts python-pptx


【解决方案1】:

通过使用以下代码,通过列出形状名称索引和使用形状索引更新图表数据来解决:

 list_shape_names = [shape.name for shape in slide.shapes]

    if shape_name not in list_shape_names:
        shape_index = None
    else:
        shape_index = list_shape_names.index(shape_name)

但是在传递 shape_name 时要小心,因为它会区分大小写。

【讨论】:

    最近更新 更多