如何批量删除docx文档内数量众多的相同图片
需求是这样的,文档中存在很多相同的重复的图片,想要批量删除。
注意,操作前请备份数据
VBA代码
因为有明显的可被识别的特征,所以使用VBA代码是一个好办法。要被删除的图片的尺寸相同。
但用尺寸特征编写的VBA代码有以下缺点。
1.可能会误删其他尺寸相同的图片
2.同一个图片,如果只是被缩放、旋转、或者更改了版式等,反而不能被删除。
现在AI编写代码都很容易,大家把需求描述清楚,交给DeepSeek或者wps灵犀,一般都可以生成可用的代码。
利用docx文档的文件结构特征
一、解压docx文档后删除
docx文档其实是一个压缩包。直接把.docx的后缀改为.zip后,即可解压。修改完成,再压缩,把.zip改回.docx,就又可以正常打开了。
注意:再压缩时,需要进入内层文件,选中_rels、docProps、word和[Content_Types].xml这几个文件夹和文件,然后压缩,而不要直接对外层的总文件夹压缩。
解压后可以得到如图所示的文件目录。
展开\word\media,就可看到文档内的所有图片。注意这里应该是不包括由word创建的形状、smartart图的。在这里找到你要删除的图片,直接删除就可以。
比如我把image1.png删除,删除后效果如图所示,会留有一个白框。
可以发现一个特点:对于同一张图片,复制到文档多处、改变了大小、旋转了,在\word\media中都只保存了一个图片。
所以对于文档中相同的图片,只是一张图片的众多分身。只要删除这张图片,分身也就删除了。
到了这一步,应该就可以满足一些需求了。
如果你还想进一步删除这些白框,请看下面。
二、在document.xml文件中删除
Docx文档是基于xml语言的。
xml可扩展标记语言,是一种用于存储和传输结构化数据的文本文件格式。它通过自定义标签和嵌套结构来描述数据,具有可读性强、灵活、跨平台等特点,广泛应用于配置文件、数据交换、Web服务等领域。
在document.xml文件中存储了Docx文档的大部分内容,进入\word就可以找到它。
编辑xml文件需要专门的编辑器,但由于它是纯文本,所以也可以用记事本打开它,但看不到它的结构化的特征,会比较乱。
复制这些文本,粘贴到word中,方便使用word的查找替换功能对文本进行修改。形如<w:drawing>...</w:drawing>这样的节点就是图片节点。如下图灰底部分就是一个完整的图片节点。以<w:drawing>开头,以</w:drawing>结束。其中的name=”图片 4”就是图片的分身,r:embed=”rld4”就是图片的本体。
打开word的选择窗格,就可以看到图片的分身名字了。就是选中自己要删除的图片,在选择窗格中找到分身名称,就是可以找到图片的本体名称。
确定图片的本体名称后,回到有xml文本的word中,Ctrl+H启用查找和替换对话框,勾选使用通配符,在查找内容处输入\<w:drawing\>*rId4*\<\/w:drawing\>,替换处留空,单击全部替换,即可删除所有rId4本体的图片。
复制修改过后的xml文本,回到记事本中,以覆盖的方式粘贴文本,然后保存。再压缩那几个文件夹和文件,恢复docx文档,就大功告成了。
上述方法,我在本地的小文档中测试过,确实可行。但它肯定也不是完美的,不知道它遇到大的复杂文件会怎么样。
大家可以试试后,来这里反馈一下,也不枉我写了这么多。