Проблема множественной вставки в Word Automation - PullRequest
2 голосов
/ 26 марта 2011

Есть ли лучший способ вставить фрагменты HTML в документ Word, чем через буфер обмена из C #?

using Word = Microsoft.Office.Interop.Word;

Я использую некоторый код, который помещает HTML в буфер обмена:

HtmlFragment.CopyToClipboard(changedText);

У меня есть выбор в слове (из поля формы), и я делаю:

 word.Selection.Paste();

Но иногда он просто генерирует исключение COM. Если я добавлю

  Thread.Sleep(100);

Я могу заставить его работать, но это не идеально.

Методы вставки выглядят как лучший вариант, но вставки из HTML нет.

Так, каков наилучший способ быстрой вставки большого количества фрагментов HTML в Word с использованием интерфейсов автоматизации?

Редактировать

Несколько полезных советов в ответах, но проблема оказалась в простом теге <br>, приводящем к сбою слова при вставке.

Ответы [ 2 ]

4 голосов
/ 27 марта 2011

Для взаимодействия вместо Selection.Paste вы захотите использовать Selection.PasteSpecial с WdPasteDataType из wdPasteHTML.

Если выИспользуя новые форматы Word (например, 2007/2010), вы можете отказаться от взаимодействия все вместе и просто перейти на WordprocessingML (используя Open XML SDK или просто отменить его вручную с помощью Linq и System.IO.Packaging).Или вы можете просто использовать его вместе с Interop, если в этом есть необходимость.

Если вы используете Open XML, вы можете просто использовать altChunk для импорта HTML.Вот пример (который включает пример для HTML) на Как использовать altChunk для сборки документов .И еще один (только что изданный - он был выпущен сегодня): Импорт HTML, который содержит нумерацию, используя altChunk .

2 голосов
/ 29 марта 2011

+ 1 к комментариям Отаку, хотя, вообще говоря, я нашел, что лучше всего использовать различные функции RANGE. * Для вставки данных, отличных от объекта Selection, или вставки через буфер обмена. главная причина в том, что если вы вставляете в буфер обмена, вы скремблируете все, что было в буфере обмена (что может быть не тем, чего хочет пользователь).

Объект Selection применяется ко всем документам с открытым словом, что в некоторых случаях может привести к неприятностям. К сожалению, есть несколько вещей, которые вы просто не можете сделать иначе.

И есть некоторые вещи (например, изменение текста в текущей позиции курсора), для которых вы ДОЛЖНЫ использовать объект выделения.

...