【问题标题】:How to get Line Count in MS Word?ComputeStatistics 返回错误的行数值。如何在 MS Word 中获得实际的行数?
【发布时间】:2022-01-22 06:18:05
【问题描述】:

我正在使用 Word Interop 来计算表 Cell 中存在的行数。 有问题的单元格如下所示(为清楚起见,启用了特殊字符)。

文本中出现的换行字符数为 3。但是,由于第二个文本的长度,它被扩展到第二行,导致实际为 4 行。

下面的代码只计算换行符的个数并不能正常工作,因为它返回 3。

input.Count(x => x == '\r'); //Result:3

Word 提供的字数统计工具提供了正确的结果,4 行。

以下代码使用 Cell.Range 属性来访问字数统计工具使用的 ComputeStatistics 函数。但是函数调用的结果总是0。

lines = cell.Range.ComputeStatistics(WdStatistic.wdStatisticLines); //Result:0

我已经尝试迭代范围内的所有段落,在计算运行总数时分别为每个 Paragraph.Range 调用 ComputeStatistics 函数。第一段返回值 1,但所有后续调用都返回值 0。

如何获取字数统计工具显示的行数值? 如果有的话,有什么替代方法可以可靠地在 Word 中获得准确的行数?

【问题讨论】:

    标签: c# vba ms-word office-interop


    【解决方案1】:

    关于单元格结束标记的某些内容似乎干扰了统计信息。这在 VBA 中对我有用:

    Dim c As Cell, rng As Range
    
    Set c = ThisDocument.Tables(1).Cell(1, 1)
    Set rng = c.Range
    rng.MoveEnd wdCharacter, -1
    
    Debug.Print rng.ComputeStatistics(wdStatisticLines)  '4
    

    【讨论】:

    • 我会试一试并报告。
    • 有效!对于这些类型的专家答案,一定会喜欢 Stackoverflow。非常感谢威廉姆斯先生!现在,由于这个相当简单的实现,我的解决方案将保持干净。
    • 我创建了一个拉取请求来更改官方文档以反映这一点。 github.com/MicrosoftDocs/VBA-Docs/pull/1471
    【解决方案2】:

    这里是C#的实现代码

    private int GetNumberOfLinesInRange(Cell cell)
    {
         int lines = -1;
         Range cellRange = cell.Range;
    
         //Range decreased by 1 
         //to omit the end of cell marker from the calculation which 
         //interferes with the ComputeStatistics result
         cellRange.MoveEnd(WdUnits.wdCharacter, -1); 
    
         lines = cellRange.ComputeStatistics(WdStatistic.wdStatisticLines);
         return lines;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-11-30
      • 2023-01-14
      • 1970-01-01
      • 2021-01-28
      • 2010-12-02
      • 1970-01-01
      • 2021-09-01
      • 2018-12-03
      • 1970-01-01
      相关资源
      最近更新 更多