干货 软件 Rules & Tips
1. 遵守中国大陆相关法律法规
2. 严禁发布盗版软件
3. 严禁传播破解方法或工具
4. 严禁发布甩链接的下载信息
5. 提倡分享亲测好用的软件
6. 名称、版本、平台是必要信息

批量替换 Word 文件中同一内容的技巧汇总

查看: 7238|回复: 2
2
zcore 发表于 2018-6-18 10:51:23
本帖最后由 虫子 于 2018-6-18 16:06 编辑

前言
如何高效替换100个 Word 文件中的同一文本内容,这是一周前部落奇技淫巧板块的一次分享,当时给的方案是合并后替换。我细想,把100个word合并到一个word里,搞完不还得分割开吗。如果只是打印倒可以不用分割,但发给别人、自己编辑等都不能窝在一个word里操作吧。我在那篇帖子里留下了坑,现在有了点时间,我来填坑了!

批量分割也不是不可以
合并我们可以一次性搞定,分割就要傻乎乎复制粘贴吗?NO。如果100个word比较整齐,如都是n页,那最好不过了,网上有许多工具可以搞定,比如这个。但如果word不整齐,谁都不敢保证连输100个数字不出错吧。

不能通过页数分割,那按照标题分割总行吧,一般word总是标题打头嘛!这个office自身可以帮你搞定,参考这篇教程

要是你丫就遇到没标题的word了,或者说在内容上找不到统一的分割标准,咋办?没关系,咱不合并了,换个方法。

Office插件
微软Office是可以进行宏编程的,你要是高端玩家可以直接甩一堆代码完事,但玩不转的总还是有现成的编写好的插件嘛。如恵办公这个插件,支持多文件批量替换操作,这是它们官方给的演示。Office的插件还有很多,如方方格子E灵等,这些都是个人或小工作室写的脚本做的插件,用起来都不复杂。

这时候我的强迫症属性上线了。这些插件都只是单纯的查找替换,日常生活中我们可能会遇到稍微复杂点的需求,如:把电话号码中间四位换成星号以保护隐私。稍微老道的人都知道,这都是正则表达式的强项,可我现在要多文件批量使用正则表达式,有办法吗?

Replace Studio
办法是有的,因为我平时干过不知道多少次了,GREP软件就是专门干这事的,详见我的这篇老贴——dnGrep:全文搜索利器。但是我一般使用Markdown书写,比较少用word,Markdown文件是可以直接读取源码的,但word文件的格式非常复杂,只有像Office、WPS这种文字处理软件才能处理。所以dnGrep只做到了读取word却不能编辑,我又陆续试了FileLocator、GrepWin等Grep软件都搞不定,只有PowerGrep号称可以处理Office,但这货复杂的很。

本来心想这下凉了,赶紧回去删帖子回复吧。但功夫不负有心人,我找了这个Replace Studio。厂商Funduc Software似乎是专门做这个的,Replace Studio是他们的核心产品,官网介绍:
Replace Studio Pro is the next generation windows grep utility by Funduc Software. Now with the ability to search .pdf files (seach-only), Replace Studio Pro is a utility that easily searches through text-based files and, if you want, performs replacements with another string. The program can also do search/replace on .docx, .xlsx, .pptx, and 'Open Office' files (see documentation for instructions).

官网的介绍中,它除了PDF编辑不了,搜索替换word、ppt、excel都不在话下,还支持正则表达式:

正版收费,试用版有替换数量限制,适用于Windows10,网上有爱心分享版。此外,厂商还有Replace Studio Business Edition ,支持脚本化操作:

自己动手,丰衣足食(可以不看)
这时候我的强迫症才是真的上线了。都是Grep软件,凭啥Replace Studio这么秀?为啥新的docx能用,老的doc就不行?
这肯定与docx格式有关,于是搜索一下,以下是百度百科的描述:
docx 格式文件的主要内容是保存为XML格式的,但文件并非直接保存于磁盘。它是保存在一个ZIP文件中,然后取扩展名为docx。将.docx 格式的文件后缀改为ZIP后解压, 可以看到解压出来的文件夹中有word这样一个文件夹,它包含了Word文档的大部分内容。而其中的document.xml文件则包含了文档的主要文本内容。

原来如此,docx本质是一个zip,内容是以Office Open XML标准封装的。测试了一下:

所有内容都在document.xml文件中,而文字内容都是包围在< w:t >标签下的,这可不是我推测的,这是Office Open XML的官方说明:

如果是这样,那不就好办了:100个word批量重命名为zip,我的旧贴四款 Windows 重命名工具大 PK了解一下;批量压缩解压缩Bandizip可以做到,还有我的旧贴DropIt:不用脚本也能批处理文件也可以了解一下;最后直接使用dnGrep搜索替换document.xml不就完了。

但是大伙应该注意到了,黑体两个字是我故意用的,因为< w:t >标签之外也有黑体两个字,如果替换< w:t>标签之外的东西,那严重的你的docx就打不开了(做好备份很重要)。如何只搜索< w:t >标签之内的东西呢?还是使用正则表达式:
  1. 搜索用: (<w:t>[^(</w:t>)]*?)搜索(.*?</w:t>)
  2. 替换用:$1替换$2
复制代码

这个正则表达式我测试过:
dnGrep可以保存书签,下次直接拿出来用。

最后替换成功,pptx、excel同理:

来自Bandizip的坑(可以不看)
这里有个来自Bandizip的坑,解压缩时Bandizip的自动解压功能很方便地将每个压缩文件放在一个文件夹下,而不会将他们直接扔到母文件夹下。这本来是一个很人性化的功能,但是在重新压缩时,这个文件夹会包含在压缩文件中,不仅是Bandizip,所有压缩软件都是这样:

右边那个变成docx是打不开的。正常的操作应该是:
本文出处:https://www.zypnet.cn/eb66/ ,欢迎转载!!!

萨马拉多 发表于 2018-6-20 10:40:04
高端大气上档次!
向往的歌 发表于 2018-6-30 08:24:23
学习了。谢谢!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

虫部落 陕ICP备14001577号-1川公网安备 51019002003015号联系我们FAQ关于虫部落免责声明虫部落生存法则蛙先知 - AI 玩家社区 🚧

Build with for "make search easier" Copyright © 2013-2024. Powered by Discuz! GMT+8, 2024-5-2 19:14

快速回复 返回顶部 返回列表