当我尝试解析超过 100 页的文档中的文本时,Word 互操作速度非常慢。我重新编写了代码以使用速度更快的 OpenXML SDK。我的问题是,一旦我在 OpenXML 文档中找到信息,我必须在 Word 文档中找到它并将主窗口滚动到它。为了实现这一点,我必须以某种方式将 OpenXML 段落与互操作段落匹配。我认为互操作段落与 openxml 段落完美匹配,但我错了。事实上,互操作通常比 OpenXML 有更多的段落。有什么技巧或某种信息可以帮助我匹配它们吗?例如,我发现通常互操作在表中的每一行之后还有 1 个空段落。所以我可能会使用这些信息并记住它,
更新
下面是我创建的简单加载项的屏幕截图,用于演示 Word 文档中的 interop 和 openxml 段落之间的区别,内容如下:
然后加载项检索互操作段落列表和 OpenXML 段落列表并并排显示它们:
下面是我使用的代码:
var document = Globals.ThisAddIn.Application.ActiveDocument;
if (document == null)
return;
var interopParagraphs = document
.StoryRanges
.Cast<Range>()
.SingleOrDefault(r => r.StoryType == WdStoryType.wdMainTextStory)
.Paragraphs
.Cast<Paragraph>()
.Select(p => p.Range.Text);
var openXmlDocument = WordprocessingDocument.FromFlatOpcString(document.Content.WordOpenXML);
if (openXmlDocument == null)
return;
var openXmlParagraphs = openXmlDocument
.MainDocumentPart
.Document
.Body
.Descendants<DocumentFormat.OpenXml.Wordprocessing.Paragraph>()
.Select(p => p.InnerText);
var compareDialog = new CompareForm(interopParagraphs, openXmlParagraphs);
compareDialog.ShowDialog();