В нашей системе генерации документов мы используем файлы DOCX, в которых мы программно заполняем поля слияния. Для этого я использую OpenXml SDK 2.0.
Я просматривал файл document.xml в de docx и обнаружил, что поля слияния обычно представлены 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, нотация для полей слияния была совершенно другой:
<w:instrText xml:space="preserve"> MERGEFIELD NP021_INSSNumber \* MERGEFORMAT </w:instrText>
А позже в документе я нашел обозначение на дисплее: <w:t>«NP021_INSSNumber»</w:t>
Это невероятно невозможно разобрать в коде.
Как возможно, что выполнение одного и того же действия в Word может иметь такие разные результаты, и есть ли способ гарантировать, что Word использует SimpleFields в качестве нотации XML для полей слияния?
Заранее благодарю за любой полезный вклад.