Ms word 使用Word VSTO或WordOpenXML从范围中获取本地样式名称的最快方法是什么

Ms word 使用Word VSTO或WordOpenXML从范围中获取本地样式名称的最快方法是什么,ms-word,interop,vsto,openxml,Ms Word,Interop,Vsto,Openxml,我有一个获得运行时paraId的解决方案,然后用它在openXML中查找本地样式名,但它似乎可能会丢失,我不知道如何确保它始终存在。当它工作时,这是可以接受的速度(在每个范围内加载大约1-2ms的officeOpenXMl之后)。见上一篇文章: 我需要在选定范围内的每个段落的样式paragration.range.wordopenxml可以工作,但它比range.get_style()效率更低~每量程60-70毫秒 Word.Range selectedRange = Globals.This

我有一个获得运行时paraId的解决方案,然后用它在openXML中查找本地样式名,但它似乎可能会丢失,我不知道如何确保它始终存在。当它工作时,这是可以接受的速度(在每个范围内加载大约1-2ms的officeOpenXMl之后)。见上一篇文章:

我需要在选定范围内的每个段落的样式
paragration.range.wordopenxml
可以工作,但它比range.get_style()效率更低~每量程60-70毫秒

Word.Range selectedRange = Globals.ThisAddIn.Application.Selection.Range;

Word.Range firstPara = selectedRange.Paragraphs.First.Range;
Word.Range lastPara = selectedRange.Paragraphs.Last.Range;

while (firstPara.Start <= lastPara.Start)
{
   //I need to get the style NameLocal for paragraph in this range (firstPara).

    firstPara.MoveStart(Word.WdUnits.wdParagraph, 1);
    firstPara.MoveEnd(Word.WdUnits.wdParagraph, 1);
}
我尝试了
范围。get_style()
但这也太慢了,每个范围20-30ms

Word.Range selectedRange = Globals.ThisAddIn.Application.Selection.Range;

Word.Range firstPara = selectedRange.Paragraphs.First.Range;
Word.Range lastPara = selectedRange.Paragraphs.Last.Range;

while (firstPara.Start <= lastPara.Start)
{
   //I need to get the style NameLocal for paragraph in this range (firstPara).

    firstPara.MoveStart(Word.WdUnits.wdParagraph, 1);
    firstPara.MoveEnd(Word.WdUnits.wdParagraph, 1);
}
Word.Range selectedRange=Globals.ThisAddIn.Application.Selection.Range;
Word.Range firstPara=selectedRange.parations.First.Range;
Word.Range lastPara=selectedRange.parations.Last.Range;

while(firstPara.Start Mmm)。打开文档中的段落顺序与WordOpenXML中的段落顺序完全相同。您可以通过单词集合的起始(请记住,以1为基数)来寻址单词集合中的任何成员(
段落
)。因此,如果您使用
Selection.Range.WordOpenXML
和“loop”所有带有计数器和样式名称的段落(放入数组或dict或任何内容中)都应该与
Selection.Range.parages
匹配。因此计数器值1的样式=
Selection.Range.parages[1].Style.NameLocal
。除此之外,请参考您的代码,以获取所选内容中每个段落的样式名称:
foreach(Selection.Range.parages中的Word.paragration){string stylename=para.Range.Style.NameLocal;}
-比您所展示的更有效…我的语言版本中没有para.Range.Style,但您给出的第一个建议是gold。当表格用于播放WordOpenXML段落标记计数时,与Range.paragration计数不匹配。Range.paragration有一些例外情况,额外的“\r\a”行结尾是段落,但XML没有。但我想我现在就知道了!将在此处更新“解决方案”。谢谢!para=段落对象的变量名。