Как создать документ Word, используя HTML, написанный на C # - PullRequest
1 голос
/ 01 апреля 2011

Я создаю C # -приложение, которое должно создавать документ Word.

Я использую Microsoft.Office.Interop.Word, чтобы сделать это, и мне успешно удалось вывести некоторые документы Word, но я создал контент через корыто.код очень трудоемкий.

Я заметил, что word может открывать HTML-страницы и отображать его как обычный контент, поэтому я создал простую тестовую таблицу в html и вставил ее в документ word.Но когда я вывел документ, произошло очевидное: теги там, где все еще есть!Word не форматировал теги как HTML.Он только что вывел именно то, что я положил туда.

Как мне сказать слово, чтобы переформатировать текст в html?

edit: (через код C # конечно)

edit 2: Обратите внимание, что я анализирую некоторые данные, чтобы сделать это, поэтому у меня будет около 4 страниц одной таблицы / html, поэтому мне нужно будет сказать словоначинать со следующей страницы каждый раз, когда я заканчиваю цикл.Таким образом, метод только для HTML, вероятно, не будет работать.

Ответы [ 6 ]

5 голосов
/ 01 апреля 2011

Если вы хотите выводить только простое HTML-содержимое в виде документа Word, вы всегда можете обмануть и выписать HTML-содержимое с расширением .doc.

Word откроется просто отлично.

Если вам нужно добавить разрыв страницы, вы можете использовать CSS page-break-before, например, так:

<br style="page-break-before: always;"/>

Если вы настроили Interop, прочитав немного, в этом посте говорится, что вам нужен конвертер для вставки HTML, и конвертеры доступны только тогда, когда:

  • вы вставляете HTML из буфера обмена
  • открыть / вставить HTML из файла

Итак, этот ответ выглядит так, как будто он предоставляет решение на основе буфера обмена: Добавление HTML-текста в Word с помощью Interop

Однако, если на проект есть деньги, я могу от всей души порекомендовать Aspose.Words , который сделает все это за вас.

1 голос
/ 01 апреля 2011

В соответствии с просьбой ОП, и для того, чтобы другим было проще найти это решение, здесь приводится ответ, который я опубликовал в качестве комментария (плюс дополнительные результаты тестирования):

При открытии файла HTML MS Word учитывает свойства CSS page-break-before и page-break-after. Однако есть одна оговорка:

В представлении «Веб-дизайн» разрывы страниц никогда не отображаются (это не значит, что их там нет), точно так же, как браузеры не «показывают» их. И Word открывает HTML-файлы в представлении веб-дизайна по умолчанию (что вполне логично). Вам нужно распечатать документ или переключиться на другой вид (типично «Дизайн печати»), чтобы увидеть все ваши разрывы во всей красе.

Таким образом, сохранение файла HTML с расширением .doc является жизнеспособным решением (также проверено: Word открывает его правильно, несмотря на расширение).

Примечание: все тесты были выполнены на MS Word 2003 с использованием этого фрагмента: <html>asdf<br style="page-break-before: always;">new page!</html>

1 голос
/ 01 апреля 2011

Другой возможный подход, если ваш html является xhtml (то есть XML-совместимым), вы можете использовать XSLT для преобразования его в формат Word XML.Но это займет ОЧЕНЬ LOOOOOOOOOOONG время для кодирования.

Если вам не нужно использовать HTML в качестве отправной точки, вы можете просто создать документ Word XML самостоятельно, а не использовать XSLT, что будет проще.Много времени, но возможно - это то, чем я занимаюсь в своей работе.

1 голос
/ 01 апреля 2011

Если вы не хотите использовать внешнюю библиотеку, Interop слишком медленный для вас, и ни чистый HTML, ни шаблон слияния не достаточно гибки, вы можете записать свой контент в виде текста или HTML в один или несколько файлов (используя C # ), создайте макрос VBA в документе Word, который сам создает второй документ Word, считывает файлы содержимого и после этого выполняет любое форматирование.

Вы можете запустить этот макрос программно, запустив Word, используя ключ командной строки /m.

1 голос
/ 01 апреля 2011

Не создавайте документ в коде, создавайте его в Word как шаблон или шаблон слияния и используйте код для объединения или замены данных полей.

См. Этот ответ здесь MS Word OfficeАвтоматизация - Заполнение полей текстовой формы и полей формы флажка и слияние почты

И посмотрите это с корабля:

http://msdn.microsoft.com/en-us/library/ff433638.aspx

0 голосов
/ 01 апреля 2011

Если сторонний компонент является опцией, я бы порекомендовал материал из Aspose .
До сих пор я был очень доволен их инструментами.API немного грязный, но все работает так, как и следовало ожидать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...