Как заменить заполнители форматированным текстом в документе Word, используя .NET? - PullRequest
3 голосов
/ 10 мая 2011

У меня есть приложение на C # .NET, которое должно загрузить документ Word, найти некоторый текст-заполнитель (например, "

") и заменить его текстом , полученным из элемента управления RTF. Этот окончательный документ открывается в виде сообщения электронной почты в Outlook и готов к отправке.

Все это работает, за исключением того, что я не могу понять, как перенести форматирование из элемента управления RTF в документ Word. Текст RTF содержит жирный шрифт, точки и другое форматирование, а длина текста превышает 256 символов, поэтому метод поиска и замены при взаимодействии Word не будет работать.

Я могу использовать метод Find, а затем установить текст выделения на то, что я хочу (избегая ограничения в 256 символов), но я никак не могу понять, как выполнить форматирование. Существует элемент FormattedText, который, кажется, будет выполнять свою работу, но независимо от того, что я назначаю ему (даже назначаю себе), выдает ошибку, поэтому я могу только предположить, что он предназначен только для чтения.

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

на некоторые непонятные последовательности RTF.

Я изучал API OpenXML, который мог бы позволить мне вставлять форматированный текст в виде фрагмента XML, но я не понимаю, как получить содержимое элемента RTF в виде вставляемого фрагмента XML.

Кто-нибудь знает, каким образом это может быть достигнуто?

1 Ответ

2 голосов
/ 10 мая 2011

Это должно решить вашу проблему:
Как вставить строку форматированного текста в Word с помощью Visual Basic Automation

Решение состоит в том, чтобы поместить код RTF в буфер обмена иуказать, что это RTF-формат.Затем вставьте содержимое в слово с помощью Wordapp.Selection.Paste.Word знает, как обрабатывать RTF (он может открывать rtf-документы и читать RTF-данные из буфера обмена).

Если вы используете этот метод, обязательно сохраните содержимое буфера обмена перед действием и восстановитеСодержание буфера обмена после, пользователям не нравится, когда программы сами изменяют содержимое буфера обмена без предварительного уведомления.(Этот метод изменяет только RTF-часть буфера обмена, буфер обмена может хранить несколько форматов, поэтому вам не нужно сохранять / восстанавливать все форматы)

...