OpenXML: заменить элемент <sdt /> таблицей в WordprocessingML - PullRequest
3 голосов
/ 15 июля 2010

Я использую OpenXML SDK для программной замены некоторых <w:sdt/> элементов на фрагменты разметки OpenXML (WordProcessingML).

Например, у меня есть параграф с таким содержанием:

<w:p>
  <w:run><w:text> Text before </w:text></w:run>
  <w:sdt><w:sdtPr> ...</w:sdtPr><w:sdtContent>...</w:sdtContent></w:sdt>
  <w:run><w:text> Text after </w:text></w:run>
</w:p>

И таблица с такой структурой:

<w:tbl>
  <w:tblPr>...</w:tblPr>
  <w:tblGrid> ... gridCol elements ...</w:tblGrid>
  <w:tr>
    <w:trPr>...</w:trPr>
    <w:tc>
   <w:tcPr>...</w:tcPr>
   <w:p> Cell contents </w:p>
    </w:tc>
    <w:tc>
   <w:tcPr>...</w:tcPr>
   <w:p> Cell contents </w:p>
    </w:tc>
  </w:tr>
 </w:tbl>

В основном я хочу заменить элемент <w:sdt/> в абзаце на разметку таблицы. Проблема в том, что я не могу просто заменить его, потому что он создаст недопустимый документ (таблица с абзацами внутри другого элемента абзаца недопустима).

Результат, который я хочу получить, таков:

<w:p>
  <w:run><w:text> Text before </w:text></w:run>
</w:p>
<w:tbl>
  <w:tblPr>...</w:tblPr>
  <w:tblGrid> ... gridCol elements ...</w:tblGrid>
  <w:tr>
    <w:trPr>...</w:trPr>
    <w:tc>
   <w:tcPr>...</w:tcPr>
   <w:p> Cell contents </w:p>
    </w:tc>
    <w:tc>
   <w:tcPr>...</w:tcPr>
   <w:p> Cell contents </w:p>
    </w:tc>
  </w:tr>
</w:tbl>
<w:p>
  <w:run><w:text> Text after </w:text></w:run>
</w:p>

Я думал о создании метода, который создает новый абзац с элементами перед элементом <w:sdt/>, а другой - с элементами после элемента sdt, но кажется, что такой метод будет подвержен ошибкам.

Есть ли метод, который может делать то, что я хочу, без необходимости делать это вручную (метод, который делает то, что делает Word, когда я пытаюсь вставить новую таблицу в текстовую строку)?

Любая помощь будет принята с благодарностью.

1 Ответ

3 голосов
/ 15 июля 2010

Я полностью считаю, что вы должны пойти по пути разбиения прогонов до и после Контент Контроля, который вы хотите заменить таблицей на отдельные абзацы.Это действительно очень подвержено ошибкам, если вы даете Word повод для странных запусков, хотя.Как и Я хочу новую вещь будет три запуска, потому что хочет синтаксически некорректно в этом предложении, и Word будет помечать это как грязное, и если / пока вы не выберете в Word исправление илиигнорируй это, останется три пробега.Это единственная проблема, которую я предвидел.

Однако, если у вас есть стратегия (например, принуждение пользователей к проверке орфографии своих документов), остальное, безусловно, выполнимо.Если вы не знакомы с блогом Эрика Уайта, он станет вашим лучшим другом при разработке с использованием Open XML SDK в Word.Например, только эти статьи должны ответить на большинство / все ваши вопросы о том, как использовать функциональное преобразование для анализа, вставки и замены.

  1. Обработка всех частей содержимого в документе Open XML WordprocessingML
  2. Вставка / удаление / перемещение параграфов в документах WordProcessing с открытым XML
  3. Выполнение разделения в абзацах текстового редактора документов Open XML
...