1

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

アップデート

以下は、次のような単純なコンテンツを持つ Word ドキュメントの相互運用と openxml 段落の違いを示すために作成した単純なアドインのスクリーンショットです。

MS Word ドキュメントのサンプル 次に、アドインは相互運用パラグラフのリストと 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();
4

1 に答える 1