私たちのドキュメント生成システムでは、プログラムでマージフィールドに入力する DOCX ファイルを使用しています。このために、OpenXml SDK 2.0 を使用しています。
de docx の document.xml ファイルを調べたところ、通常、マージフィールドは SimpleField で表されていることがわかりました。使用するドキュメントの例:
<w:fldSimple w:instr=" MERGEFIELD NP021_INSSNumber \* MERGEFORMAT "><w:r><w:rPr><w:noProof/></w:rPr><w:t>«NP021_INSSNumber»</w:t></w:r></w:fldSimple>
mergefield コマンドとドキュメントに表示されるテキストを含む、かなり単純な表記法。XML でこのタグを見つけるのはかなり簡単です。w:fldSimple タグを検索するだけです。(読みやすくするためにいくつかのスタイルタグを削除しました)
しかし、最近 Word で作成されたドキュメントはコードで解析されませんでした。XML を調べたところ、mergefields の表記が完全に異なっていました。
<w:instrText xml:space="preserve"> MERGEFIELD NP021_INSSNumber \* MERGEFORMAT </w:instrText>
そして、ドキュメントの後半で、表示表記を見つけました。<w:t>«NP021_INSSNumber»</w:t>
これは、コードで解析することは驚くほど不可能です。
Word で同じことを実行しても結果が異なる可能性があるのはどうしてですか? また、Word がマージフィールドの XML 表記として SimpleFields を使用するようにする方法はありますか?
有益なご意見をお寄せいただきありがとうございます。