ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 7786|回复: 5

[原创] word查找指定内容批量替换为或加上自动连续编号(域)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-1-19 08:19 | 显示全部楼层 |阅读模式
本帖最后由 chendeyan126 于 2019-1-19 16:00 编辑

word查找指定内容批量替换为或加上自动连续编号(域)

有时候为了方便对文章进行修订,希望在文章里每一个段落的每个句子前进行连续编号。如题是一篇几十万字的文档,如何快速实现这个需求呢?
最终需要实现的效果如下图所示:


这个需求的关键有两个方面,一个是能够实现自动连续编号的域,一个是能够实现查找每一句话的正则表达式。
每句话编号1.png

能够实现自动连续编号的域在word中能够实现这一功能的域有AutoNum、AutoNumLgl、AutoNumOut和ListNum等。
前三个域仅可以实现每个段落的连续编号,不能实现段落内每个句子的连续编号,且不能调整编号开始的数字。在同一个文档内,AutoNum、AutoNumLgl和AutoNumOut三个域之间是相互影响的,如前面几段使用了AutoNum域进行编号,后面使用AutoNumLgl域进行编号,后面的编号是接续前面AutoNum域的编号的,不是重新开始的。
ListNum可以实现文档内每个句子的自动连续编号。ListNum是一种多级列表域,有四种内置列表。域代码与相应的输出如下。
(1)、{ LISTNUM \l 1 }——输出内置默认列表的一级编号“1)”
(2)、{ LISTNUM LegalDefault \l 1 }——输出输出内置LegalDefault列表的一级编号“1.”
(3)、{ LISTNUM NumberDefault \l 1 }——输出输出内置NumberDefault 列表的一级编号“1)”
(4)、{ LISTNUM OutlineDefault \l 1 }——输出输出内置OutlineDefault列表的一级编号“I.”
ListNum域,可以在任意位置设置编号重新以任意数字开始,编号的样式也比较多,而且是多级的编号,使用起来是很方便的。
所以使用第(2)个域代码可以实现上图所示的编号功能。
首先使用快捷键Ctrl+F9,输入一对域代码专用的大括号,
然后将代码LISTNUMLegalDefault \l 1 写入大括号内,
按F9刷新即可得到域结果1.。
如果文档内容较少,那么我们可以手动复制这个域到其他位置,即可实现连续自动编号。
但文档内容多,我们需要将此域用于查找替换对话框中,以实现批量替换。
由于不能直接复制域代码放入替换框中,所以我们输入了第一个域代码后,需要将其剪切,然后在替换框中使用“^c”(剪贴板内容)来代替它。

能够实现查找每一句话的正则表达式接下来,只要求在“查找和替换”对话框中,批量查找每一个句子,并在其前面加上这个域代码即可。根据每个句子总是以文字开头,并以特定的几个标点结尾,写出如下表达式:
查找内容:([!^13^l]*[.\?\!。!?……])
替换:^c\1
勾选“使用通配符”
最后点击“全部替换”即可完成整篇文档每个句子的自动连续编号。
切记,在点击“全部替换”之前,一定要将输入的第一个域代码剪切到剪贴板中,因为替换框中“^c”代表的剪贴板内容。
查找和替换的界面如下图所示。

正则表达式.png

以上方法,可以将文档中任意指定字符或内容替换为或加上自动连续编号,并不局限于文首所说的需求。


评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-1-19 09:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感谢分享!

TA的精华主题

TA的得分主题

发表于 2020-8-27 16:09 | 显示全部楼层
好棒,学习到了,最近在研究查找和替换,功能太强大了

TA的精华主题

TA的得分主题

发表于 2020-8-27 18:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 cuanju 于 2020-8-28 09:23 编辑

根据chendeyan126老师的文章,写如下代码。
'========================
Sub d0()
Rem 将文章每个句子前自动编号
    Set oRng = ActiveDocument.Range(0, 0)
    With oRng
        .Fields.Add Range:=ActiveDocument.Range(0, 0), Text:=" LISTNUM LegalDefault \l 1"
        .End = .End + 1
        .Select
        .Cut
    End With
    ActiveDocument.Content.Find.Execute FindText:="([!^13]@[.\?\!。!?……])", ReplaceWith:="^c\1", Replace:=wdReplaceAll, MatchWildcards:=True
End Sub







TA的精华主题

TA的得分主题

发表于 2020-9-6 11:01 | 显示全部楼层
补充修改后的代码,
================================================
Sub d6()
'修改后
Rem 将文章每个句子前自动编号
    Set oRng = ActiveDocument.Range(0, 0)
    With oRng
        .Fields.Add Range:=ActiveDocument.Range(0, 0), Text:="LISTNUM LegalDefault \l 1"
        .End = .End + 1
        .Select
        .Cut
    End With
    ActiveDocument.Content.Find.Execute FindText:="([!^13]@[\?\!。!?…])", ReplaceWith:="^c\1", Replace:=wdReplaceAll, MatchWildcards:=True
    ActiveDocument.Content.Fields.Unlink '域代码转为值
End Sub

TA的精华主题

TA的得分主题

发表于 2021-12-26 17:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
学习了 虽然目前看不明白 应该以后能用到
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-23 12:09 , Processed in 0.041323 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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