100 ページ以上のドキュメント内のテキストを解析しようとすると、Word の相互運用性が非常に遅くなります。はるかに高速な OpenXML SDK を使用するようにコードを書き直しました。私の問題は、OpenXMLドキュメントで情報を見つけたら、Wordドキュメントでそれを見つけて、メインウィンドウをスクロールする必要があることです。これを実現するには、OpenXML 段落を相互運用段落に何らかの方法で一致させる必要があります。interop の段落は openxml の段落と完全に一致すると思っていましたが、それは間違いでした。実際、相互運用には通常、OpenXML よりも多くの段落があります。それらを一致させるのに役立つトリックや情報はありますか? たとえば、通常、相互運用には、テーブルの各行の後に空の段落が 1 つあることがわかりました。おそらくこの情報を使って 心に留めておくことができます
アップデート
以下は、次のような単純なコンテンツを持つ Word ドキュメントの相互運用と 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();