Python PPTX库更新后替换图片报SlidePart无related_parts属性问题求助
问题根因
你遇到的AttributeError: 'SlidePart' object has no attribute 'related_parts'报错,是因为新版python-pptx库移除了公开的related_parts属性,官方替换方案为get_rel_by_id()方法,通过关系ID直接获取关联部件。
修复后的函数代码
def replace_img_slide(prs, slide_nbr, shape_nbr, img_path): slide = prs.slides[slide_nbr] img = slide.shapes[shape_nbr] try: imgPic = img._pic except AttributeError: raise AttributeError( f"Error for slide: {slide_nbr}, shape: {shape_nbr}, path: {img_path}") imgRID = imgPic.xpath('./p:blipFill/a:blip/@r:embed')[0] # 仅修改这一行即可,把related_parts字典访问改为get_rel_by_id方法调用 imgPart = slide.part.get_rel_by_id(imgRID) with open(img_path, 'rb') as f: rImgBlob = f.read() # replace imgPart._blob = rImgBlob return prs
注意事项
- 该改动完全兼容原有逻辑,图片替换效果和旧版代码完全一致
- 其余业务中用到
xxx.part.related_parts[rid]的写法,都可以统一替换为xxx.part.get_rel_by_id(rid) - 无需修改其他赋值逻辑,
ImagePart对象的_blob属性操作方式保持不变
内容的提问来源于stack exchange,提问作者Reda
相关产品推荐
相关产品推荐

