[英]How to determine whether a MS-Word paragraph is more than one line?
由于“线”不是 Word 对象模型中的对象,由于其动态布局算法,这需要通过仍内置在 API 中的旧 WordBasic 技术来解决。 (WordBasic 基于选择而不是对象工作,这就是这些旧方法中存在此功能的原因。)
在这种情况下, Word.WdInformation
枚举提供了与“行”一起使用的参数,更具体地针对此问题wdFirstCharacterLineNumber
。
以下示例代码包含在文档的特定段落上调用IsParaOneLine
的代码片段。
IsParaOneLIne
复制段落Range
通过两次它两次:一次是起点,一次是结束点。 然后将这些范围分别折叠到它们的起点和终点,并确定行号。 如果两者相同,则向调用代码返回true
,否则返回false
。
笔记:
rngEnd.MoveEnd(Word.WdUnits.wdCharacter, -1);
将结束点向后移动一个字符,因为在折叠到段落Range
的末尾后,该Range
位于下一段的开头。 这会将其移回原始段落。
该示例应用了一种样式而不是“直接格式设置”。 我强烈建议使用Styles ,而不是在整个文档中使用居中和左对齐进行格式化。 如果没有具有所需格式的内置样式,请创建您需要的自定义样式。 如果您熟悉 CSS,您就会知道使用样式的优势。 使用 Word 还有一个额外的原因:它大大减少了 Word 生成的临时文件,这样您就不太可能耗尽内存。
Word.Range rng = doc.Paragraphs[2].Range; if (IsParaOneLine(rng)) { rng.set_Style(Word.WdBuiltinStyle.wdStyleHeading1); } else { Debug.Print("Not one line"); } public bool IsParaOneLine(Word.Range rng) { Word.Range rngStart = rng.Duplicate; rngStart.Collapse(Word.WdCollapseDirection.wdCollapseStart); Word.Range rngEnd = rng.Duplicate; rngEnd.Collapse(Word.WdCollapseDirection.wdCollapseEnd); rngEnd.MoveEnd(Word.WdUnits.wdCharacter, -1); int posLineStart = (int) rngStart.get_Information(Word.WdInformation.wdFirstCharacterLineNumber); int posLineEnd = (int) rngEnd.get_Information(Word.WdInformation.wdFirstCharacterLineNumber); bool isSameLine = false; if (posLineStart == posLineEnd) isSameLine = true; return isSameLine; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.