Найти в Дзене
SimplyVBA

Автоматически вставляем в документ Word данные из Excel

Вот отсюда вот сюда вот и вот оттуда - туда. Очень просто.
Автоматизируй_это #3
Оглавление

В прошлом посте описал опыт автоматизации обработки КВД, а сейчас расскажу об автоматизации выгрузки результатов в Word.

Автоматизируй_это_3

Вообще, взаимодействовать с документами Word через VBA не столь удобно, как с Excel - отсутствует полноценный макрорекодер. Плюс нет интуитивно понятной системы навигации по документу - в Excel все просто, каждая ячейка имеет свои координаты, а в текстовом документе - как?

Методом проб и ошибок я для себя выработал стратегию - все делаем в Excel, в Word выгружаем разве что только результаты. Ибо нефиг. Простой пример - было написано программное средство, которое из n подотчетов лепило один общий отчет. В Word 2007, 2010 оно работало прекрасно, в Word 2013 - перестало. И мы очень долго не могли его заставить работать как надо.

Но вернемся к нашей задаче.

Общее решение для таких задач следующее:

1) Создаем шаблон документа, куда будем выгружать данные

2) В тем места, куда нужно выгружать данные, добавляем закладки

3) Пишем код, который содержимое нужной нам ячейки копирует в нужную нам закладку

4) Четвертого пункта нет - все закончилось еще на третьем.

Рассмотрим подробнее.

1) Мне нужно было на основе Excel-файла из прошлого поста слепить такое вот конклюжн (т.е. заключение).

Из этого файлика я убрал все лишнее - то, что меняется от раза к разу.

Подготовленный шаблон заключения. В нужных местах уже стоят закладки (серые штучки в виде двутавра - если вы шарите в металлопрокате). Желтым выделен текст, который вставляется "ручками"
Подготовленный шаблон заключения. В нужных местах уже стоят закладки (серые штучки в виде двутавра - если вы шарите в металлопрокате). Желтым выделен текст, который вставляется "ручками"

2) Добавил закладки, куда следует. Полезный совет - либо дайте им нормальные имена, либо запишите куда-нибудь, что именно вы собираетесь поместить в закладку №100500. Лучше и имена дать и комментарии оставить)

Почему-то, функция закладок в Word не совсем очевидна - даже чтобы просто увидеть их, нужно достаточно далеко залезть.

Включение закладок в Word2013
Включение закладок в Word2013

3) Ну а код очень простой, вот основные моменты:

sTemplatePath = ThisWorkbook.Path & "\шаблон_заключения.docx"

sNewDocumentPath = ThisWorkbook.Path & "\" & WellName & "_" & StartKVD_1_Date & ".docx"

Set wdApp = CreateObject("Word.Application")

FileCopy Source:=sTemplatePath, Destination:=sNewDocumentPath

Set oDocument = wdApp.Documents.Open(FileName:=sNewDocumentPath, Visible:=False)

oDocument.Bookmarks("Закладка_1").Range.Text = WellName

For i = 2 To 14

oDocument.Bookmarks("Закладка_" & i).Range.Text = H_KVD

Next i

В каталоге с книгой, из которой работает код, лежит шаблон заключения. Делаем его копию, присваиваем ей имя. Открываем в невидимом режиме и начинаем заполнять закладки. Чтобы в новом созданном файле не остались закладки - просто порядку для - удаляем их.

For j = oDocument.Bookmarks.Count To 1 Step -1

oDocument.Bookmarks(j).Delete

Next j

Если вы - молодец и дали всем закладкам имена, то ссылаться на них можно аккурат по именам:

oDocument.Bookmarks("NumRP").Range.Text = NumRP

На этом - все. Задача решена. Можно браться за новую или идти пить чай.

Вопросы? В комментарии!

P.S. Если вы такие хулиганы и хотите подобное реализовать, то не забудьте в настройках VBE (Visual Basic Editor - то место, где вы пишите свой VBA код) Excel (Tools -> References...) поставить ссылку на Word - иначе не взлетит.

-4