MS Word - 找到 table 行包含换行的文本
MS Word - find table rows with wrapped text
我有一个 table,其中所有单元格都有 Cell.WordWrap
set to true
. Some of them have text longer than cell width so it's wrapped. I need to find them (with longer text) and set them Cell.FitText
= True
,但不知道如何。
我试图阅读 row/cell .height.
但它不是 return 真实 row/cell 高度而是最小高度,无论 Cell.HeightRule
如何设置。
感谢您的提示!
确定单元格内容是否换行的一种方法是比较单元格内容开头和结尾的行号,如以下代码示例所示。
- Word对象模型提供了
Information
属性,它有很多枚举成员,包括wdFirstCharacterLineNumber
.
- table 中的每个单元格都在循环中检查。确定单元格中第一个字符的行号后,将 Range 折叠到它的终点(即下一个单元格的开头),然后向后移动一个字符(将其放在原始单元格中)和行号检查单元格中最后一个字符的字符。
- 如果第二个大于第一个,则将单元格添加到数组中。 (注:有可能直接处理单元格,但如果影响到其他单元格,最好先把它们都加到一个数组中,再处理数组。)
- 最后,数组被循环并且每个单元格格式化为
FitText = True
Sub ChangeCellWrapForLongLinesOfText()
Dim tbl As Word.Table
Dim cel As Word.Cell
Dim rngCel As Word.Range
Dim multiLineCells() As Word.Cell
Dim firstLine As Long
Dim lastLine As Long
Dim i As Long, x As Long
Set tbl = ActiveDocument.Tables(1)
For Each cel In tbl.Range.Cells
Set rngCel = cel.Range
firstLine = rngCel.Information(wdFirstCharacterLineNumber)
rngCel.Collapse wdCollapseEnd
rngCel.MoveEnd wdCharacter, -1
lastLine = rngCel.Information(wdFirstCharacterLineNumber)
If lastLine > firstLine Then
ReDim Preserve multiLineCells(i)
Set multiLineCells(i) = cel
i = i + 1
End If
Next
'Debug.Print i, UBound(multiLineCells())
For x = LBound(multiLineCells()) To UBound(multiLineCells())
'Debug.Print multiLineCells(x).Range.Text
multiLineCells(x).FitText = True
Next
End Sub
我有一个 table,其中所有单元格都有 Cell.WordWrap
set to true
. Some of them have text longer than cell width so it's wrapped. I need to find them (with longer text) and set them Cell.FitText
= True
,但不知道如何。
我试图阅读 row/cell .height.
但它不是 return 真实 row/cell 高度而是最小高度,无论 Cell.HeightRule
如何设置。
感谢您的提示!
确定单元格内容是否换行的一种方法是比较单元格内容开头和结尾的行号,如以下代码示例所示。
- Word对象模型提供了
Information
属性,它有很多枚举成员,包括wdFirstCharacterLineNumber
. - table 中的每个单元格都在循环中检查。确定单元格中第一个字符的行号后,将 Range 折叠到它的终点(即下一个单元格的开头),然后向后移动一个字符(将其放在原始单元格中)和行号检查单元格中最后一个字符的字符。
- 如果第二个大于第一个,则将单元格添加到数组中。 (注:有可能直接处理单元格,但如果影响到其他单元格,最好先把它们都加到一个数组中,再处理数组。)
- 最后,数组被循环并且每个单元格格式化为
FitText = True
Sub ChangeCellWrapForLongLinesOfText()
Dim tbl As Word.Table
Dim cel As Word.Cell
Dim rngCel As Word.Range
Dim multiLineCells() As Word.Cell
Dim firstLine As Long
Dim lastLine As Long
Dim i As Long, x As Long
Set tbl = ActiveDocument.Tables(1)
For Each cel In tbl.Range.Cells
Set rngCel = cel.Range
firstLine = rngCel.Information(wdFirstCharacterLineNumber)
rngCel.Collapse wdCollapseEnd
rngCel.MoveEnd wdCharacter, -1
lastLine = rngCel.Information(wdFirstCharacterLineNumber)
If lastLine > firstLine Then
ReDim Preserve multiLineCells(i)
Set multiLineCells(i) = cel
i = i + 1
End If
Next
'Debug.Print i, UBound(multiLineCells())
For x = LBound(multiLineCells()) To UBound(multiLineCells())
'Debug.Print multiLineCells(x).Range.Text
multiLineCells(x).FitText = True
Next
End Sub