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