Я уже давно работаю над C# OpenXML SDK (Неофициальный пакет Microsoft 2.5 от NuGet), но недавно заметил, что следующая строка кода возвращает разные результаты в зависимости от того, какое настроение появляется в Microsoft Word, когда файл будет сохранен:При использовании полей полей MergeField в OpenXML SDK на C#, почему коды полей исчезают или фрагментируются?
var fields = document.Descendants<FieldCode>();
из того, что я могу сказать, при создании документа в первом месте (используя Слово 2013 на ОС Windows 8.1), если вы используете Вставка-> QuickParts-> Field и выберите MERGEFIELD из поля а затем укажите имя поля в свойствах поля и нажмите «ОК», тогда код поля будет правильно сохранен в документе, как и следовало ожидать.
Тогда, используя вышеупомянутую строку кода, я получу полевое поле для поля 1 поля. Если впоследствии я отредактирую этот документ (и даже оставлю это поле в одиночку), последующее сохранение может означать, что этот код поля больше не возвращается в моем запросе.
Другим случаем такой же любопытства является то, что я вижу, что узлы FieldCode разделены на несколько элементов. Таким образом, вместо того, чтобы видеть сказать:
" MERGEFIELD Author \\* MERGEFORMAT "
В качестве имени узла, я буду видеть:
" MERGEFIELD Aut"
"hor \\* MERGEFORMAT"
Split как два значения FieldCode узла. Я понятия не имею, почему это так, но это, безусловно, делает мою способность сопоставлять узлы, которые намного более захватывают. Это ожидаемое поведение? Известная ошибка? Я действительно не хочу, чтобы взломать исходный XML-файл и отредактировать этот документ, пока я не пойму, что происходит. Большое спасибо.
Я заметил, что мои «недостающие поля», похоже, были преобразованы в «SimpleField», и кто-нибудь понимает, почему это было бы? Или какая разница? –