word:一键清理已有的标题序号

之前介绍了如何一键设置多级标题

但对于已经手动设置了多级标题的论文,使用结果是如此蛋疼:

运行结果

注:左方是新加的自动多级标题,右方是残留的手动多级标题。

这种情况是很常见的,此时使用手动删除操作是非常麻烦的。因此需要使用模糊查找、替换功能。

首先介绍一下如何通过通配符进行查找、替换的操作。如下图:

选中“使用通配符”之后,就能使用正则表达式来进行模糊匹配了。

表达式:[0-9]表示单个数字,括号表示其内部为一个子表达式,{1,}表示前面的子表达式最少匹配1次,没有指定最多匹配次数。因此“([0-9]){1,}.([0-9]){1,}.([0-9]){1,} ”正好匹配了三级标题。

注:正式的表达式后面加了一个空格,因为word是默认非贪婪匹配的,如果标题后方不是个位数会造成漏掉后面的数字

同时,我们需要筛选格式,选取段落>大纲级别(设置为当前要清理的级别号),避免清理掉正文内容。

为此,我录制了一个一键清理 标题1 标题2 标题3 内的手动标题的宏。仅限修改手动标题为“X.X.X ”的情况,如有不同需要手动更改代码内

.Text = "([0-9]){1,}.([0-9]){1,2}.([0-9]){1,} "

的表达式。

代码如下:

Sub 清理()
'
' 清理 宏
'
'
    Selection.Find.ClearFormatting
    With Selection.Find.ParagraphFormat
        .OutlineLevel = wdOutlineLevel3'筛选大纲级别为3的
    End With
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "([0-9]){1,}.([0-9]){1,2}.([0-9]){1,} "
        .Replacement.Text = " "
        .Forward = True
        .Wrap = wdFindAsk
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    With Selection.Find.ParagraphFormat
        .OutlineLevel = wdOutlineLevel2
    End With
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "([0-9]){1,}.([0-9]){1,} "
        .Replacement.Text = " "
        .Forward = True
        .Wrap = wdFindAsk
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    With Selection.Find.ParagraphFormat
        .OutlineLevel = wdOutlineLevel1
    End With
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "([0-9]){1,} "
        .Replacement.Text = " "
        .Forward = True
        .Wrap = wdFindAsk
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>