Форум программистов, компьютерный форум, киберфорум
setood
Войти
Регистрация
Восстановить пароль

Удобное заполнение Word из Excel

Запись от setood размещена 29.06.2019 в 00:10
Показов 2349 Комментарии 2

Всем привет!
В этой заметке я расскажу, как легко и просто можно сделать подстановку в Word документ значений из ячеек Excel.
Алгоритм работы следующий, для каждой выделенной ячейки в Excel берется текст заголовка столбца, в word шаблоне ищется текст этого заголовка (обернутый символами “{%” и “%}”) и заменяется значением ячейки.
Например:
В Excel выделены ячейки B4 и С4
Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 336
Размер:	15.9 Кб
ID:	5409
Изначально Word документ выглядит так:
Нажмите на изображение для увеличения
Название: 2.jpg
Просмотров: 326
Размер:	10.0 Кб
ID:	5410
У ячейки B4 заголовком столбца является текст «имя». Поэтому в Word везде текст «{%имя%}» будет заменен содержимым выделенной ячейки «Николай».
Аналогично для ячейки С4 заголовок «паспорт», поэтому в Word весь текст «{%паспорт%}» будет заменен на «12 12».
Для запуска макроса необходимо:
1. Установить макрос:
Кликните здесь для просмотра всего текста

1. Открыть файл Excel в который необходимо добавить макрос
2. Нажать комбинацию клавиш alt+f11
3. В открывшемся окне вверху слева сделайте двойной клик по «Эта книга»
Нажмите на изображение для увеличения
Название: 1.png
Просмотров: 341
Размер:	20.9 Кб
ID:	5412
4. Справа откроется окно для ввода текста
5. Вставьте в него следующий текст:
Кликните здесь для просмотра всего текста

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Sub CreateWordFile()
 Dim filePath As String
 Dim data As Collection
 Dim headersRow As Integer
 headersRow = 1
 filePath = SelectWordTemplate()
 If filePath <> "" Then
  Set data = GetSelectedData(headersRow)
  Call CreateAndFillWordDocument(filePath, data)
 End If
End Sub
 
Function SelectWordTemplate() As String
Dim fd As Office.FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    With fd
        .Filters.Clear
        .Title = "Select a Word Template"
        .Filters.Add "Word Files", "*.dotx;*.docx;*.docb;*.doc", 1
        .AllowMultiSelect = False
        If .Show = True Then
            SelectWordTemplate = fd.SelectedItems(1)
        End If
    End With
End Function
 
Function GetSelectedData(headerRowIndex As Integer) As Collection
 Set GetSelectedData = New Collection
 Dim cell As Range
 Dim cellValue As String
 Dim cellKey As String
 Dim emptyCellCounter As Integer
 emptyCellCounter = 0
 For Each cell In Selection
      cellValue = cell.Value2
      cellKey = cell.Worksheet.Cells(headerRowIndex, cell.Column).Value2
      GetSelectedData.Add Array(cellKey, cellValue)
      If cellValue = "" Then
        emptyCellCounter = emptyCellCounter + 1
      Else
        emptyCellCounter = 0
      End If
      If emptyCellCounter > 100 Then
        Exit Function
      End If
 Next cell
End Function
 
Sub CreateAndFillWordDocument(file As String, data As Collection)
Set wApp = CreateObject("Word.Application")
wApp.DisplayAlerts = False
Dim wDoc As Object
Set wDoc = wApp.Documents.Add(Template:=file, NewTemplate:=False, DocumentType:=0)
Call FillWordDocument(wDoc, data)
wApp.DisplayAlerts = True
wApp.Visible = True
End Sub
 
Sub FillWordDocument(wDoc As Object, data As Collection)
Dim key As Variant
 For i = 1 To data.count
   Dim text As String
   Dim replace As String
   Dim content As String
   text = "{%" & data.Item(i)(0) & "%}"
   replace = data.Item(i)(1)
   Set myRange = wDoc.content
   myRange.Find.Execute FindText:=text, ReplaceWith:=replace
Next i
End Sub

6. Нажмите «посмотреть в Excel»
Название: 2.png
Просмотров: 642

Размер: 42.7 Кб
7. Откроется Excel с вашим файлом. Нажмите сохранить как.
8.Выберите тип фала «Книга Excel с поддержкой макросов (*.xlsm) и нажмите сохранить.
Нажмите на изображение для увеличения
Название: 3.png
Просмотров: 209
Размер:	43.8 Кб
ID:	5414
Макрос установлен.

2. Выделить необходимые ячейки
3. Нажать комбинацию клавиш alt+f8 и запустить макрос «CreateWordFile»
4. Откроется окно выбора Word файла, на основе которого нужно сформировать документ
5. После нажатия кнопки «Открыть», откроется копия Word файла с вставленными значениями
Для примера выше, результат будет такой:
Нажмите на изображение для увеличения
Название: 2.jpg
Просмотров: 326
Размер:	10.0 Кб
ID:	5410Название: 3.jpg
Просмотров: 775

Размер: 8.4 Кб
Замечание: если в столбце выделено несколько ячеек, подставятся только значения первой из них.

EDIT:
Как в комментариях отметил stroyer, в word есть стандартный инструмент "создание писем". Он значительно проще и подойдет большинству. Сравнение способов в комментариях
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 2
Комментарии
  1. Старый комментарий
    Есть же инструмент "создание писем"? Более гибкий и более богатый. Не требующий наворачивания макросов
    Запись от stroyer размещена 22.07.2019 в 22:14 stroyer вне форума
  2. Старый комментарий
    Цитата Сообщение от stroyer
    Есть же инструмент "создание писем"? Более гибкий и более богатый. Не требующий наворачивания макросов
    Гибкий и богатый - это спорно. как в нем в один файл вывести данные из нескольких строк?
    Что делать, если шаблоны документов общие на несколько сотрудников, а Excel базы у каждого своя?(в "создании писем" достаточно жестко зашивается путь к файлу и колонкам)

    С макросом этих проблем нет.

    Но: "Создание писем" в разы проще. И 90% случаев будет лучшим решением попробовать сначала его, потом макрос.
    Запись от setood размещена 23.07.2019 в 05:18 setood вне форума
 
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru