You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用python-pptx插入图片时SlidePlaceholder无insert_picture属性报错如何解决

报错原因

报错是因为你调用的SlidePlaceholder对象(也就是代码里的self.slide.placeholders[2])是普通文本/内容占位符,本身没有insert_picture方法,只有专门的图片类型占位符才支持该方法。你使用的索引为3的默认幻灯片布局,第三个占位符不是图片占位符,因此调用方法时抛出属性错误。

解决方案

推荐使用直接指定位置插入图片的方案,兼容性更强,排版可控度更高:

  1. 首先新增依赖导入:在代码开头加入from pptx.util import Inches,用于定义图片的尺寸和位置
  2. 替换插入图片的代码段:把原来的self.slide.placeholders[2].insert_picture(data[2])替换为手动指定位置的插入代码

修改后的完整代码如下:

from pptx import Presentation
from pptx.util import Inches
import os

prs = Presentation()

class MySlide:
    def __init__(self, data):
        self.layout = prs.slide_layouts[data[3]]
        self.slide=prs.slides.add_slide(self.layout)
        self.title=self.slide.shapes.title
        self.title.text=data[0]
        self.subtitle=self.slide.placeholders[1]
        self.subtitle.text=data[1]
        if data[2] != "":
            # 以下参数可根据排版需求调整,单位为英寸
            left = Inches(1) # 图片左边距
            top = Inches(2.5) # 图片上边距,可根据副标题高度调整,保证图片在副标题下方
            pic_height = Inches(4) # 图片高度
            self.slide.shapes.add_picture(data[2], left, top, height=pic_height)

slides = [
    ["Sample Title 1",       #data[0]
     "Sample Subtitle 1",
     "image1.jpg",
     3],
    ["Sample Title 2",       #data[0]
     "Sample Subtitle 2",
     "image2.jpg",
     3],
    ["Sample Title 3",       #data[0]
     "Sample Subtitle 3",
     "image3.jpg",
     3]
]

for each_slide in slides:
    MySlide(each_slide)

prs.save("stack.pptx")
os.startfile("stack.pptx")

如果想用厘米作为单位,把导入的Inches替换为Cm即可。

内容的提问来源于stack exchange,提问作者Abhishek Kamal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 01:54:01