C# 如何确定MS Word段落是否不止一行?
我不想找到在段落(段落末尾)中按enter键的位置。我需要确定段落是包含一行还是多行,以便可以相应地格式化(居中或左对齐) 如果它在一条直线上,就在中间 或左对齐(如果在多行中) 如何确定段落在VSTO中是否不止一行?由于“行”在Word对象模型中不是对象,由于其动态布局算法,这需要通过API中仍然内置的旧WordBasic技术来实现。(WordBasic基于选择而不是对象工作,这就是为什么这些旧方法中存在此功能。) 在这种情况下,C# 如何确定MS Word段落是否不止一行?,c#,ms-word,vsto,C#,Ms Word,Vsto,我不想找到在段落(段落末尾)中按enter键的位置。我需要确定段落是包含一行还是多行,以便可以相应地格式化(居中或左对齐) 如果它在一条直线上,就在中间 或左对齐(如果在多行中) 如何确定段落在VSTO中是否不止一行?由于“行”在Word对象模型中不是对象,由于其动态布局算法,这需要通过API中仍然内置的旧WordBasic技术来实现。(WordBasic基于选择而不是对象工作,这就是为什么这些旧方法中存在此功能。) 在这种情况下,Word.WdInformation枚举提供了使用“行”的参
Word.WdInformation
枚举提供了使用“行”的参数,更具体地说,是针对这个问题wdFirstCharacterLineNumber
下面的示例代码包含一个代码段,该代码段对文档的特定段落调用IsParaOneLine
IsParaOneLIne
复制段落范围
两次传递:一次用于起点,一次用于终点。然后将这些范围分别折叠到其起点和终点,并确定行号。如果两者相同,true
返回调用代码,否则false
注:
rngEnd.MoveEnd(Word.WdUnits.wdCharacter,-1)代码>将结束点向后移动一个字符,因为在折叠到段落范围
末尾后,范围
位于下一段落的开头。这会将其移回原始段落
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;
}
请注意,对于这样的问题,发布一些“框架”代码总是一个好主意,为人们提供一个起点。否则1)我们必须从头开始写;2) 我们提供的代码将与您的代码更加匹配。减少每个人的工作量。下面的贡献回答了你的问题吗?