打开XML word文档 - 查找突出显示的文本

时间:2015-07-26 15:06:47

标签: c# .net ms-word openxml

我有word文档,其中每个段落都很长。 类似的东西:

"NameOfSomeSort     ----ASDdASFA---F-TEXT-FASFASFAS----FASFASF"

字符

"TEXT"

正在突出显示。 我需要能够分辨出行中哪些字符是高位的并且在行中获得它们的位置索引。

我能够通过Interoop完成,但是操作将花费5到10个小时来完成整个文档。所以我尝试了OpenXML,但是当我在段落文本中循环时,我无法获得像Highlight这样的文本属性。

1 个答案:

答案 0 :(得分:1)

突出显示应用于运行(在runProperties中) (https://msdn.microsoft.com/en-us/library/documentformat.openxml.wordprocessing.highlight(v=office.14).aspx

如果你的文字是" aaaaa [我很突出] bbbb" openxml看起来像

<w:Paragraph>
  <w:Run><w:Text>aaaaa</w:Text></w:Run>
  <w:Run>
    <w:rPr>
      <w:highlight w:val="yellow" />
    </w:rPr>
    <w:Text>[i am highlight]</w:Text>
  </w:Run>
  <w:Run><w:Text>bbbb</w:Text></w:Run>  
</w:Paragraph>

因此,要找到突出显示的文本,您必须搜索突出显示标记 像Paragraph.Descendants<Highlight>()

这样的东西

如果您需要检索位置,可以使用某些算法,如

// Suppose you have the paragraph p you want to inspec and the run r containing highlight
int pos = 0;
OpenXmlElement oxe = null;
// From the run search for the parent (Paragraph p)
// Add the length of previous text in pos
while ((oxe = r.previousSibling()) != p)
{
  pos += ((Run)oxe).Innertext.Length;
}
// here pos should return where the highlight begin (maybe it's pos+1...)