有没有办法用python-pptx删除形状

问题描述

@scanny我浏览了python-pptx文档,但未找到删除形状的任何方法。我正在查看的用例正在根据辅助条件更改演示文稿中存在的形状。有什么方法可以轻松地做到这一点,或者有什么方法可以帮助我构建此功能

感谢帮助。

解决方法

您可以,它对于简单的形状也可以很好地工作,但是由于形状可能与演示文稿中的其他对象具有关系(粗略地“链接”),而使这些“悬空”的关系可能引起问题,因此使情况变得复杂。 / p>

基本思想是使用lxml调用删除shape元素,因此如下所示:

sp = shape._sp             # --- get reference to XML element for shape ---
sp.getparent().remove(sp)  # --- remove that shape element from its tree ---

这是lxml.etree._Element的文档,python-pptx中的每个XML元素都是子类的(因此具有所有这些方法)。 https://lxml.de/api/lxml.etree._Element-class.html

如果尝试加载已保存的.pptx文件时收到“修复”错误,您将知道出了点问题。像矩形和直线这样的简单形状应该没问题。图片,图表以及可能带有超链接的形状可能会出现问题,但尝试起来很容易,并且可以查看它是否适合您的情况。

,

遗憾的是,当我尝试删除一个形状时,scanny 的答案中的两行代码无法成功。可能是因为我不知道在使用“pptx”时如何使用 lxml(例如共享对象)我认为 lxml 和 'pptx' 之间。但他的回答激励我在操作 xml 中找到答案。找了好久的答案,终于找到删除形状的方法了! 例如,我想删除形状序列的第一个形状,只需使用子代码:

shapes.element.remove(shapes[0].element)  

它有效! 谢谢@scanny,你做得非常出色,对我帮助很大!