Я пытаюсь использовать OpenXML SDK и образцы на страницах Microsoft, чтобы заменить заполнители на реальный контент в документах Word.Используйте OpenXML для замены текста в файле DOCX - странный контент
Он работал как описано here, но после редактирования файла шаблона в Word добавлены верхние и нижние колонтитулы, он перестает работать. Я задавался вопросом, почему некоторые отладки показал мне это:
Что содержание texts
в этой части кода:
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(DocumentFile, true))
{
var texts = wordDoc.MainDocumentPart.Document.Body.Descendants<Text>().ToList();
}
Так что я вижу здесь является то, что тело документа является «фрагментированным», даже если в слове содержание выглядит следующим образом:
Может кто-нибудь сказать мне, как я могу обойти это?
Меня спросили, чего я пытаюсь достичь. В основном я хочу заменить пользовательские «заполнители» реальным контентом. Я хочу рассматривать документ Word как шаблон. Заполнитель может быть чем угодно. В моем примере выше они выглядят как {var:Template1}
, но это то, с чем я играю. Это может быть в основном любое слово.
Так, например, если документ содержит следующий пункт:
Do не использовать имя USER_NAME
пользователь должен быть в состоянии заменить USER_NAME
заполнитель со словом admin
например, сохраняя форматирование неповрежденным. Результат должен быть
ли не использовать имя администратора
проблема, которую я вижу с работой на уровне абзаца, конкатенаций содержания и затем заменяя содержание пункта, Я боюсь, что потеряю форматирование, которое должно храниться как в
Не используйте имя admin
Это всегда будет немного похоже на это, если вы получите текстовые прогоны, текстовые прогоны могут быть индивидуально отформатированы (например, если вы подчеркиваете один символ в абзаце). Почему бы вам не получить текст на уровне абзаца? например 'Body.Descendants() .' –
@NickDewitt Хорошо, если я это сделаю, не могу ли я потерять другое форматирование, применяемое к другому тексту этого абзаца? –
ну нет, текстовые элементы все равно будут внутри абзаца, есть форматирование как на уровне абзаца, так и на уровне текста. Если вы возьмете текст узла из абзаца или текстового уровня, он все равно потеряет его форматирование. Чего вы пытаетесь достичь, например? что вы собираетесь делать с элементами после их извлечения? –