有一些word文档会存在大量空行,特别是一些从网路上下载的,或是其他软体转换而来的文档。需要批量删除这些空行以方便排版。
先来看看空行的类型。
1. 多余手动换行符产生的空行
如下图所示。可以使用查找替换功能,批量删除。
先执行:
查找:^l{1,}^13
替换:^p
勾选使用通配符,点击全部替换
再执行:
查找:^l{2,}
替换:^l
2. 多余段落标志产生的空行
查找:^13{2,}
3. 表格间多余段落标志空行
如下图所示。若表格间只有一个空行,且混杂在一个大文档中,则难以使用查找替换功能,批量删除。
4. 表格单元格内多余段落标志空行
如下图所示,若单元格内第一段就是空行时,且该表格混杂在一个大文档中,则该空行难以用查找替换功能删除。另外,单元格至少都有一个段落标志,所以空单元格的段落标志无法删除。其他空行可以用查找替换功能删除。
5. 分节符空行
一个段落可以以段落标志结束,也可以以分节符结束。如下图所示,一个段落标志跟著一个分节符,其实这里算是两个空行。这种空行很可能是不应该被删除的。
代码1:
代码来源于书本《WORD排版之道》(宋翔 著)283页。
以段落为基本单元,判断段落字元长度为1,则删除。所以也会把分节符删除。除了手动换行符的空行和空单元格空行外,都会删除。
Sub 删除文档内的所有空行() Dim oPara As Paragraph, I As Long Application.ScreenUpdating = False For Each oPara In ActiveDocument.Paragraphs If Len(oPara.Range) = 1 Then oPara.Range.Delete i = i + 1 End If Next oPara MsgBox "已删除" & i & "个空行" Application.ScreenUpdating = True End Sub
代码2:
在代码1的基础上加了一句And Right(oPara.Range, 1) = Chr(13),删除文档内的所有带段落标志空行,而不删除分节符空行。
除了手动换行符的空行和空单元格空行外,都会删除。
Sub 删除文档内的所有带段落标志空行() Dim oPara As Paragraph, I As Long Application.ScreenUpdating = False For Each oPara In ActiveDocument.Paragraphs If Len(oPara.Range) = 1 And Right(oPara.Range, 1) = Chr(13) Then oPara.Range.Delete I = I + 1 End If Next oPara MsgBox "已删除" & I & "个带段落标志空行" Application.ScreenUpdating = True End Sub
手动换行符的空行,可以使用查找替换的办法,事先处理。也可以通过录制宏的方式,录制查找替换的过程,得到vba代码后,放到前面两个代码中。