DOCX w: t (текстовые) элементы, пересекающие несколько элементов w: r (run)? - PullRequest
0 голосов
/ 04 марта 2019

Мы написали часть программного обеспечения, которая обрабатывает XML из внутренних файлов XML документа Word и заменяет определенные коды заменяющими значениями.Иногда мы обнаруживаем, что такие коды разбиты между несколькими прогонами.Вот пример того, с чем мы иногда сталкиваемся:

<w:r>
  <w:rPr>
    <w:szCs w:val="24"/>
  </w:rPr>
  <w:t xml:space="preserve">After all, if you trust [CAN:Forename.ATTORNEY#01] enough to give</w:t>
</w:r>
<w:r>
  <w:rPr>
    <w:color w:val="000000"/>
  </w:rPr>
  <w:t>[CAN:ObjPronoun.ATTORNEY#01</w:t>
</w:r>
<w:r>
  <w:rPr>
    <w:szCs w:val="24"/>
  </w:rPr>
  <w:t xml:space="preserve">] power of attorney, you should trust </w:t>
</w:r>
<w:r>
  <w:rPr>
    <w:color w:val="000000"/>
  </w:rPr>
  <w:t>[CAN:ObjPronoun.ATTORNEY#01</w:t>
</w:r>
<w:r>
  <w:rPr>
    <w:szCs w:val="24"/>
  </w:rPr>
  <w:t>] enough to make the right decisions at the time.</w:t>
</w:r>

Абзац начинается отлично, с полным кодом [CAN:Forename.ATTORNEY#01], красиво встроенным в один узел w:t, и это прекрасно,но затем ниже этого есть узел w:t, который содержит начало кода, [CAN:ObjPronoun.ATTORNEY#01, но затем тег w:t заканчивается, и закрывающий ] находится в следующем запуске.

Пользовательский опыт заключается в том, что начало абзаца отображается нормально, в том смысле, что [CAN:Forename.ATTORNEY#01] отображается как имя какого-то человека.Но там, где пользователь видит [CAN:ObjPronoun.ATTORNEY#01] в своем документе Word, и он прекрасно выглядит для их , поэтому они ожидают, что он также будет отображаться как некоторый текст, мы не можем увидеть этот код, потому что он разделен на несколькозапускается, поэтому отображаемый документ по-прежнему содержит код, а не его заменяющее значение.

Теперь к моим вопросам ...

Может кто-нибудь объяснить, почемуэто случается? Если пользователь просто набирает код, это нормально, но это происходит, если они возвращаются и возятся с абзацем.Есть ли что-то, что мы можем сказать пользователю в духе «не делай этого» или «не делай этого», или «убедитесь, что вы делаете то-то и то-то».Или, возможно, в Word есть параметры, которые не позволяют этому случиться?

Существует ли действие, которое пользователь может выполнять исключительно через интерфейс MS Word , которое исправляет такие абзацы?В данный момент мы просим их выделить весь абзац, вырезать его, вставить его в Блокнот (где он теряет весь этот странный детрит, оставленный в истории изменений пользователя), скопировать его снова из Блокнота и вставить обратно в Word.Да.Это работает.Но это немного ... неудовлетворительно , если не сказать больше.Так что, если есть собственный метод Word для достижения того же самого, это было бы намного элегантнее ...

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Тем временем, на ранчо, я действительно нашел очень простое решение проблемы.

Пользователь может определить абзац, который не работает должным образом, так как после обработки он все еще содержит коды, а не их заменяющие значения.

Чтобы исправить абзац, ВСЕ, что им нужно сделать, - это использовать Format Painter.Подберите формат, который им нравится, примените его ко всему оскорбительному абзацу и вашему дяде Бобу, проблема решена.

0 голосов
/ 04 марта 2019

Проблема не в поведении пользователя в Word и не в представлении текста в элементах w:r.Проблема заключается в программном обеспечении, которое наивно предполагает, что текст, предназначенный для замены, должен существовать в одном элементе w:r.Это просто плохое предположение с его стороны.

Ваши варианты включают

  1. Исправить программу замены, чтобы быть нечувствительной к разбиению между прогонами.
  2. Нормализовать OOXML наудовлетворяет потребности хрупкой программы замены.
  3. Используйте другую конструкцию OOXML, такую ​​как элементы управления содержимым, а не текст в качестве заполнителя.
...