我正在以编程方式生成 Word 文档。它包含许多表格,其中单元格的高度必须“精确”定义。单元格以编程方式填充从外部源获得的详细信息。如果详细信息对于单元格来说太多,单元格的“精确”高度将导致文本被截断。当发生这种情况时,我想向日志文件写入一些消息以告知用户。我知道各种使文本适合的方法,但我的问题是如何以编程方式确定文本不适合。
我尝试测试单元格对象的 Range 属性和写入单元格的文本的 Range 属性,但它们本质上是相同的范围。我测试了范围的 End 属性,希望文本的结尾位置晚于单元格的结尾,但它们是相同的。在将范围折叠到末尾后,我测试了范围的 Information(6) [constant wdVerticalPositionRelativeToPage] 属性,但没有区别。如能提供任何帮助,我将不胜感激。
答案1
感谢您的评论。我已经设法解决了这个问题。
如上所述,我以编程方式创建 Word 文档,而不是手动创建。为此,我与 Word Application 对象的各种属性和方法进行交互。这可以使用 Visual Basic 完成,但我恰好使用了不同的语言。我将尝试以独立于语言的方式描述我的解决方案的过程。
步骤 1:创建一个对象(细胞对象) 来指代正在检查的细胞。[细胞表格对象的方法。]这是一个由多个单元格合并而成的单元格,每个单元格的初始行高都以编程方式设置为某个固定高度。文本已以编程方式写入此单元格。我正在编写的用户界面允许用户指定固定高度以及将用于单元格的字体和字体大小。我也无法直接控制以编程方式写入单元格的文本。不适当的混合会导致文本根据固定高度被截断。
第 2 步:使用高度财产 (细胞对象。高度) 来获取单元格的高度。以点为单位报告。
步骤 3:使用范围属性来定义范围对象(范围对象)与细胞相关。(细胞对象。范围)
步骤 4:确定范围的开始和结束。(起始值=范围对象。开始,结束值=范围对象。结尾)。请注意,范围(单元格)的结束与下一个单元格的开始相同。这样做的问题是,单元格“结束”的假定垂直距离(从页面顶部测量)实际上与下一个单元格顶部的垂直距离相同,而下一个单元格的垂直距离与当前单元格的垂直距离相同。
步骤 5:确定垂直距离(虚拟距离1)单元格的顶部距页面顶部较远。(虚拟距离1=范围对象。信息(6) )至于第2步,这是以点数来报告的。
步骤 6:将范围的开始和结束设置为结束值-1。 (范围对象。开始=结束值-1,范围对象。结尾=结束值-1)。现在范围延伸到单元格的末尾,而不是下一个单元格的开头。
步骤 7:确定垂直距离(虚拟距离2)范围的新顶部(即单元格的底部)来自页面的顶部。(虚拟距离2=范围对象。信息(6) )。
步骤 8:计算单元格的隐含高度。虚拟分布2 - 虚拟分布1。如果该高度大于步骤 2 中确定的高度,则意味着单元格中的文本已被截断。我现在可以告诉用户在(非常长的)文档中的哪个位置发生了此问题,并提供一些建议。
在第 7 步中,我有点担心单元格是否会跨页拆分。第 5 步和第 7 步中与“页面”顶部垂直距离的参考页面将是不同的页面。不过,将行高设置为“精确”某个值的一个幸运副作用是,行不会跨页拆分。
PS 之所以需要“精确”地指定单元格和行的高度,是因为相似的表格会在很多连续的页面上重复出现。当文档被打印出来出版成书时,对页上的表格的对应行需要对齐。