Иногда, в программе требуется формировать отчеты на основе некоторого шаблона документа , сформированного в Ворде, меняя там при выгрузке лишь некоторые данные. Существует несколько способов, рассмотрим самый простый - с использованием .com-обьектов Microsoft Office.
Этот способ достаточно медленный, но тем не менее, подходит для большинства случаев, когда нужно просто сформировать определенный .doc файл на основе имеющегося шаблона.
Итак, по пунктам:
1. Для начала, расставим в нашем шаблоне поля, куда будут вставляться данные.
Для этого, открываем наш шаблон, устанавливаем курсор там где нужно будет вставить значение. Открываем в меню Вставка -> Поле...
В появившемся окне, выбираем категорию Автоматизация и тип поля DocVariable. Вводим название поля. В моем примере это будет DOCDATE.
Включить или выключить отображение имен полей-переменных в документе Word можно с помощью сочетания клавиш Alt + F9
2. Теперь нам нужно добавить ссылки на .COM компоненты Microsoft Office, которые мы будем использовать в нашей программе.
Для этого, в Solution Explorer в References добавляем ссылки на .COM-компоненты:
Если у вас на компьютере нет этих библиотек, вы можете скачать набор Office Primary Interop Assemblies (PIA) с сайта Microsoft тут.
3. После добавления библиотек, добавляем в нашем проекте директиву using для использования библиотеки взаимодейтвия с Office:
Готово.
Этот способ достаточно медленный, но тем не менее, подходит для большинства случаев, когда нужно просто сформировать определенный .doc файл на основе имеющегося шаблона.
Итак, по пунктам:
1. Для начала, расставим в нашем шаблоне поля, куда будут вставляться данные.
Для этого, открываем наш шаблон, устанавливаем курсор там где нужно будет вставить значение. Открываем в меню Вставка -> Поле...
В появившемся окне, выбираем категорию Автоматизация и тип поля DocVariable. Вводим название поля. В моем примере это будет DOCDATE.
Рис.1 Добавление поля-переменной в документ Word |
2. Теперь нам нужно добавить ссылки на .COM компоненты Microsoft Office, которые мы будем использовать в нашей программе.
Для этого, в Solution Explorer в References добавляем ссылки на .COM-компоненты:
- Microsoft Office 11.0 Object Library
- Microsoft Word 11.0 Object Library
Рис.2 Добавление .com-библиотек Microsoft Office |
Важно! На компьютере, на котором будет устанавливать программа, этих библиотек может не быть. Поэтому, необходимо поставлять их в папке с программой или инсталлировать в GAC.
3. После добавления библиотек, добавляем в нашем проекте директиву using для использования библиотеки взаимодейтвия с Office:
using Word = Microsoft.Office.Interop.Word;4. В самом приложении, запускаем Word и подгружаем наш документ-шаблон:
//запускаем Word и открываем шаблон файла
object fileName = Application.StartupPath+"\\reports\\mytemplate.doc";
Word.Application WordApplication = new Word.Application();
WordApplication.Visible = true; //выводим документ на экран
Word.Document WordDocument = WordApplication.Documents.Open(fileName);
//присваиваем значение полю
WordDocument.Variables["DOCDATE"].Value = DateTime.Now.ToShortDateString();
//обновляем поля документа
WordDocument.Fields.Update();5. После этого, мы можем сохранить наш документ с помощью методов объекта Word.Document - Save() или SaveAs(имя_файла)
Готово.
У меня высвечивает предупреждения NullRefereceException не оброботана помогите пожалуста
ОтветитьУдалитьVS 2010 b word 2007
NullReferenceException означает что какая-то из переменных не проинициализирована и ей не присвоенно значение. Т.е. её значение == NULL. Посмотрите что отладчик пишет - в какой строке и какая переменнная не инициализирована, можете сбросить дамп отладчика мне, попробую посмотреть из-за чего ошибка.
Удалитьprivate void button1_Click(object sender, EventArgs e)
Удалить{
object fileName = Application.StartupPath + "\\report\tart.doc";
Word.Application WordApplication = new Word.Application();
WordApplication.Visible = true;
Word.Document WordDocument = WordApplication.Documents.Open(fileName);
WordDocument.Variables["DOCDATE"].Value = DateTime.Now.ToShortDateString(); // на этой строке
помогите пожалуста (( а ошибок нет
Этот комментарий был удален автором.
ОтветитьУдалитьСложно что то сказать без дампа отладчика. Но тут скорее всего один из двух вариантов:
Удалить1) Проверьте, не опечатались ли в названии переменной DOCDATE в вордовском файле
2) Возможно не создается обьект WordDocument - проверьте, не равен ли он null, во время возникновения ошибки (наведите курсор на данную переменную когда выскочит ошибка). Это может быть если нет прав доступа к вашему файлу (tart.doc). Сам файл судя по вашему коду у вас должен находиться в папке с программой, в папке \Bin\Debug\report\tart.doc - если запускаете в режиме Debug, соотвественно, в папке \Bin\Release\report\tart.doc - если запускаете в режиме Release. Проверьте чтобы такая папка существовала и файл был там.
простите меня чаника но у меня WordDocument пишит null
Удалитьи у себя не могу нати сылку 2 в проекте как тут Word на фото
что можно сделать
Не совсем понял, ссылку на Microsoft Word 11.0 Object Library? Есл да, то её можно взять тут - http://www.microsoft.com/en-us/download/details.aspx?id=20923
УдалитьТам нужно нажать Download, потом извлечь скачанные файлы в какую нибудь папку, запустить оттуда файл O2003PIA.MSI
После установки так же добавить ссылку на библиотеку через References- Add Reference
У вас Microsoft Word установлен?
да есть Word
Удалитьи Microsoft Word 11.0 Object Library? тоже
а word сылки нет в проекте она на ресунке 2 в незу красным помечина
Этот комментарий был удален автором.
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьНе подскажите, как список из ListBox'a сохранить в Word'e?
ОтветитьУдалить