当前位置: 代码网 > it编程>前端脚本>Python > python-docx如何删除所有bookmarks

python-docx如何删除所有bookmarks

2024年09月14日 Python 我要评论
python-docx删除所有bookmarks由于当时生成文档过于潦草,我想把当时的docx文档中的所有bookmark全部删除,然后重新生成。原理在这里依然使用branch为bookmark的py

python-docx删除所有bookmarks

由于当时生成文档过于潦草,我想把当时的docx文档中的所有bookmark全部删除,然后重新生成。

原理

在这里依然使用branch为bookmark的python-docx作为基础库,找遍整个库,发现并没有删除指定元素的功能,只有清空所有内容的clear_content的函数。

但是这个函数太过粗暴,不符合我们的要求。于是我自己想了一个删除bookmark的方法。

在python-docx中提供了许多功能,类似于clear_content函数的实现原理。

我的思路

  • 我们首先要知道bookmark位于哪些标签下面,(docx文档的主要成分是一个xml文件,可以用.zip打开查看),此时,我们发现部分bookmark被挂在了body下面,部分bookmark被挂在了paragraph下面。
  • 经过搜索,我们docx类中有一个element元素,该元素可以表示整个用于构造xml的docx类,docx.element包含body元素,body包含paragraph、bookmark等等元素
  • 于是,我们可以参照clear_content,使用for ... in ...的方法遍历元素,再通过if判断element类型,删除指定element

代码

def deleteallbookmark(d):
    for element in d.element.body:
        if (element.__class__.__name__ == 'ct_bookmark') or (element.__class__.__name__ == 'ct_markuprange'):
            d.element.body.remove(element)
            print(element.id)
        else:
            for ele in element:
                if (ele.__class__.__name__ == 'ct_bookmark') or (ele.__class__.__name__ == 'ct_markuprange'):
                    element.remove(ele)

该函数能够直接使用

总结

其实python-docx这个库本身功能不太完善,但是,其实它提供了很多对xml的操作模板,可供各位二次开发,只是目前我对于这个库还是不太熟悉,想实现自己的一些想法还是有点困难。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com