Скрипты excel to word

Время на прочтение
6 мин

Количество просмотров 19K

Хотя в среднем для каждодневных задач автоматизация не требуется, бывают случаи, когда она может быть необходима. Создание множества диаграмм, рисунков, таблиц и отчётов может утомить, если вы работаете вручную. Так быть не должно. Специально к старту нового потока курса Fullstack-разработчик на Python делимся с вами кейсом постройки конвейера на Python, с помощью которого Excel и Word легко интегрировать: нужно создать таблицы в Excel, а затем перенести результаты в Word, чтобы практически мгновенно получить отчёт.


Openpyxl

Встречайте Openpyxl — возможно, одну из самых универсальных связок [биндингов] с Python, которая сделает взаимодействие с Excel очень простым. Вооружившись этой библиотекой, вы сможете читать и записывать все нынешние и устаревшие форматы Excel, то есть xlsx и xls. 

Openpyxl позволяет заполнять строки и столбцы, выполнять формулы, создавать 2D и 3D диаграммы, маркировать оси и заголовки, а также предоставляет множество других возможностей, которые могут пригодиться. 

И самое важное — этот пакет позволяет вам перебирать бесконечное количество строк и столбцов в Excel, тем самым избавляя вас от всех этих надоедливых вычислений и построения графиков, которые вам приходилось делать раньше.

Python-docx

Затем идёт Python-docx, этот пакет для Word — то же самое, что Openpyxl для Excel. Если вы ещё не изучили его документацию, вам, вероятно, стоит взглянуть на неё. Python-docx — без преувеличения один из самых простых и понятных мне наборов инструментов, с которыми я работал с тех пор, как начал работать с самим Python. 

Python-docx позволяет автоматизировать создание документов путём автоматической вставки текста, заполнения таблиц и рендеринга изображений в отчёт без каких-либо накладных расходов. Без лишних слов давайте создадим наш собственный автоматизированный конвейер. Запустите Anaconda (или любую другую IDE по вашему выбору) и установите эти пакеты:

pip install openpyxl
pip install python-docx

Автоматизация Microsoft Excel

Сначала загрузим уже созданный лист Excel, вот так:

workbook = xl.load_workbook('Book1.xlsx')
sheet_1 = workbook['Sheet1']

Теперь переберём все строки в нашей таблице, чтобы вычислить и вставить значения мощности, умножив ток на напряжение:

for row in range(2, sheet_1.max_row + 1):
    current = sheet_1.cell(row, 2)
    voltage = sheet_1.cell(row, 3)
    power = float(current.value) * float(voltage.value)
    power_cell = sheet_1.cell(row, 1)
    power_cell.value = power

Как только это будет сделано, мы используем рассчитанные значения мощности, чтобы сгенерировать линейную диаграмму, которая будет вставлена ​​в указанную ячейку, код показан ниже:

values = Reference(sheet_1, min_row = 2, max_row = sheet_1.max_row, min_col = 1, max_col = 1)
chart = LineChart()
chart.y_axis.title = 'Power'
chart.x_axis.title = 'Index'
chart.add_data(values)
sheet_1.add_chart(chart, 'e2') 
workbook.save('Book1.xlsx')

Автоматически созданная таблица Excel

Автоматически созданная таблица Excel

Извлечение диаграммы

Теперь, когда мы сгенерировали нашу диаграмму, нам нужно извлечь её как изображение, чтобы мы могли использовать её в нашем отчёте Word. Сначала укажем точное местоположение файла Excel, а также место, где должно быть сохранено изображение диаграммы:

input_file = "C:/Users/.../Book1.xlsx"
output_image = "C:/Users/.../chart.png"

Затем откройте электронную таблицу, используя следующий метод:

operation = win32com.client.Dispatch("Excel.Application")
operation.Visible = 0
operation.DisplayAlerts = 0
workbook_2 = operation.Workbooks.Open(input_file)
sheet_2 = operation.Sheets(1)

Позднее вы сможете перебирать все объекты диаграммы в электронной таблице (если их несколько) и сохранять их в указанном месте:

for x, chart in enumerate(sheet_2.Shapes):
    chart.Copy()
    image = ImageGrab.grabclipboard()
    image.save(output_image, 'png')
    pass
workbook_2.Close(True)
operation.Quit()

Автоматизация Microsoft Word

Теперь, когда у нас есть сгенерированное изображение диаграммы, мы должны создать шаблон документа, который в принципе является обычным документом Microsoft Word (.docx), сформированным именно так, как мы хотим: отчёт содержит шрифты, размеры шрифтов, структуру и форматирование страниц. 

Теперь всё, что нам нужно сделать, — создать плейсхолдеры для сгенерированного нами контента, то есть табличные значения и изображения, и объявить их с именами переменных, как показано ниже.

Шаблон документа Microsoft Word

Шаблон документа Microsoft Word

Любой сгенерированный контент, включая текст и изображения, может быть объявлен в двойных фигурных скобках {{ variable_name }}. В случае таблиц вам нужно создать таблицу со строкой шаблона со всеми включёнными столбцами, затем нужно добавить одну строку вверху и одну строку ниже со следующей нотацией:

Первая строка:

{%tr for item in variable_name %}

Последняя строка:

{%tr for item in variable_name %}

На рисунке выше — имена переменных:

  • table_contents для словаря Python, в котором будут храниться наши табличные данные;

  • Index для ключей словаря (первый столбец);

  • Power, Current и Voltage для значений словаря (второй, третий и четвёртый столбцы).

Затем импортируем наш шаблонный документ в Python и создаём словарь, в котором будут храниться значения нашей таблицы:

template = DocxTemplate('template.docx')
table_contents = []
for i in range(2, sheet_1.max_row + 1):
    table_contents.append({
        'Index': i-1,
        'Power': sheet_1.cell(i, 1).value,
        'Current': sheet_1.cell(i, 2).value,
        'Voltage': sheet_1.cell(i, 3).value
        })

Далее импортируем ранее созданное в Excel изображение диаграммы и создадим другой словарь для создания экземпляров всех объявленных в документе шаблона переменных-заполнителей:

image = InlineImage(template,'chart.png',Cm(10))
context = {
    'title': 'Automated Report',
    'day': datetime.datetime.now().strftime('%d'),
    'month': datetime.datetime.now().strftime('%b'),
    'year': datetime.datetime.now().strftime('%Y'),
    'table_contents': table_contents,
    'image': image
    }

И, наконец, визуализируем отчёт с нашей таблицей значений и изображением диаграммы:

template.render(context)
template.save('Automated_report.docx')

Результаты

И вот — автоматически сгенерированный отчёт Microsoft Word с числами и созданной в Microsoft Excel диаграммой. Мы получили полностью автоматизированный конвейер, его можно использовать, чтобы создать столько таблиц, диаграмм и документов, сколько вам потребуется.

Автоматически сгенерированный отчёт

Автоматически сгенерированный отчёт

Исходный код

import openpyxl as xl
from openpyxl.chart import LineChart, Reference

import win32com.client
import PIL
from PIL import ImageGrab, Image
import os
import sys

from docx.shared import Cm
from docxtpl import DocxTemplate, InlineImage
from docx.shared import Cm, Inches, Mm, Emu
import random
import datetime
import matplotlib.pyplot as plt


######## Generate automated excel workbook ########

workbook = xl.load_workbook('Book1.xlsx')
sheet_1 = workbook['Sheet1']
  
for row in range(2, sheet_1.max_row + 1):
    current = sheet_1.cell(row, 2)
    voltage = sheet_1.cell(row, 3)
    power = float(current.value) * float(voltage.value)
    power_cell = sheet_1.cell(row, 1)
    power_cell.value = power
  
values = Reference(sheet_1, min_row = 2, max_row = sheet_1.max_row, min_col = 1, max_col = 1)
chart = LineChart()
chart.y_axis.title = 'Power'
chart.x_axis.title = 'Index'
chart.add_data(values)
sheet_1.add_chart(chart, 'e2')
  
workbook.save('Book1.xlsx')


######## Extract chart image from Excel workbook ########

input_file = "C:/Users/.../Book1.xlsx"
output_image = "C:/Users/.../chart.png"

operation = win32com.client.Dispatch("Excel.Application")
operation.Visible = 0
operation.DisplayAlerts = 0
    
workbook_2 = operation.Workbooks.Open(input_file)
sheet_2 = operation.Sheets(1)
    
for x, chart in enumerate(sheet_2.Shapes):
    chart.Copy()
    image = ImageGrab.grabclipboard()
    image.save(output_image, 'png')
    pass

workbook_2.Close(True)
operation.Quit()


######## Generating automated word document ########

template = DocxTemplate('template.docx')

#Generate list of random values
table_contents = []

for i in range(2, sheet_1.max_row + 1):
    
    table_contents.append({
        'Index': i-1,
        'Power': sheet_1.cell(i, 1).value,
        'Current': sheet_1.cell(i, 2).value,
        'Voltage': sheet_1.cell(i, 3).value
        })

#Import saved figure
image = InlineImage(template,'chart.png',Cm(10))

#Declare template variables
context = {
    'title': 'Automated Report',
    'day': datetime.datetime.now().strftime('%d'),
    'month': datetime.datetime.now().strftime('%b'),
    'year': datetime.datetime.now().strftime('%Y'),
    'table_contents': table_contents,
    'image': image
    }

#Render automated report
template.render(context)
template.save('Automated_report.docx')

Вот мой репозиторий на GitHub с шаблоном документа и исходным кодом для этого туториала. А вот ссылка на курс Fullstack-разработчик на Python, который сделает из вас настоящего универсального солдата от кодинга.

Узнайте, как прокачаться и в других специальностях или освоить их с нуля:

  • Профессия Data Scientist

  • Профессия Data Analyst

  • Курс по Data Engineering

Другие профессии и курсы

Вставка таблицы Excel в документ Word с помощью кода VBA Excel. Метод Selection.PasteExcelTable: синтаксис, параметры, пример использования.

Работа с Word из кода VBA Excel
Часть 6. Вставка таблицы Excel в документ Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]

Метод Selection.PasteExcelTable

Метод Range.Paste, использующийся в VBA Word для вставки в документ таблиц, скопированных в буфер обмена из другого документа Word, не применим для вставки в документ таблиц, скопированных из книги Excel. Для этих целей используется метод Selection.PasteExcelTable.

Selection.PasteExcelTable — это метод, предназначенный для вставки Excel-таблицы из буфера обмена в документ Word и ее форматирования в соответствии с заданными параметрами.

Синтаксис

Expression.PasteExcelTable(LinkedToExcel, WordFormatting, RTF)

Expression — переменная, представляющая объект Selection. В том числе, это может быть курсор или закладка.

Параметры

Все параметры метода Selection.PasteExcelTable логического типа и являются обязательными.

Параметр Описание
LinkedToExcel True — вставленная таблица связывается с исходным файлом Excel, чтобы изменения, внесенные в файл Excel, отображались в Microsoft Word.
False — связь между вставленной таблицей и таблицей в исходном файле не устанавливается.
WordFormatting True — вставленная таблица будет отформатирована как таблица документа Word.
False — вставленная таблица будет отформатирована в соответствии с исходным файлом Excel.
RTF True — Excel-таблица будет вставлена в расширенном текстовом формате (RTF).
False — Excel-таблица будет вставлена в формате HTML-таблицы.

Допустим, у нас есть таблица Excel, начинающаяся с ячейки A1 (или с любой другой), и нам необходимо скопировать эту таблицу в существующий документ Word, вставив ее на место закладки «Закладка1».

Решение:

Sub Primer()

Dim myWord As New Word.Application, myDoc As Word.Document

‘Открываем существующий документ Word

Set myDoc = myWord.Documents.Open(«C:ТестоваяДокумент1.docx»)

‘Копируем таблицу на активном листе в буфер обмена

‘Вместо ячейки Range(«A1») можно указать любую другую, расположенную внутри таблицы

Range(«A1»).CurrentRegion.Copy

‘Вставляем таблицу из буфера обмена на место закладки

myDoc.Bookmarks(«Закладка1»).Range.PasteExcelTable False, False, False

‘Отображаем программу Word

myWord.Visible = True

‘Очищаем переменные

Set myWord = Nothing

Set myDoc = Nothing

End Sub

Если необходимо таблицу вставить в конец документа, строку

myDoc.Bookmarks(«Закладка1»).Range.PasteExcelTable False, False, False

следует заменить на

With myDoc

    ‘Переводим курсор в конец документа

    .Range(.Range.Characters.Count 1, .Range.Characters.Count 1).Select

    ‘Добавляем перенос строки, если необходимо

    .ActiveWindow.Selection.InsertAfter vbCr

    ‘Переводим курсор в конец документа

    .Range(.Range.Characters.Count 1, .Range.Characters.Count 1).Select

    ‘Вставляем таблицу из буфера обмена

    .ActiveWindow.Selection.PasteExcelTable False, False, False

End With


  • Документы Word
  • Создание файлов
  • Работа с файлами

Таблица Excel с исходными данными для создания документов Word

Макрос предназначен для программного создания документов Word на основе шаблона

(без использования функции слияния в Word)

В прикреплённом к статье архиве находятся 2 файла:

  • шаблон договора в формате Microsoft Word (расширение .dot)
  • файл Excel с макросом

Настройки макроса задаются в коде:

Const ИмяФайлаШаблона = «шаблон.dot»
Const КоличествоОбрабатываемыхСтолбцов = 8
Const РасширениеСоздаваемыхФайлов = «.doc»

При нажатии кнопки запуска макрос на основе шаблона dot создаёт очередной файл, и в этом документе производит замену текста («кода поля») из первой строки файла Excel на значение поля (из очередной строки с данными файла Excel)

Папка для сформированных документов создаётся автоматически, и содержит в имени текущую дату и время
(например, созданная папка будет называться Договоры, сформированные 01-05-2011 в 15-03-24)

Имена создаваемых файлов формируются объединением полей фамилия, имя и отчество, с добавлением расширения doc

PS: Макрос был написан достаточно давно, когда я только начинал изучать VBA, — так что код недостаточно универсален.

Но, в качестве примера, пожалуй, подойдёт (если вам нужен более функциональный макрос, воспользуйтесь универсальной надстройкой (см. ниже))

Ознакомьтесь также с универсальной надстройкой формирования документов по шаблонам,
которая может делать всё тоже самое, что и эта программа,
только в качестве шаблонов могут выступать, помимо документов Word, ещё текстовые файлы, и книги Excel.

В надстройке — много возможностей, и полезных дополнений: склонение ФИО в родительный и дательный падежи, автоматический вывод на печать (с заданным количеством копий), размещение созданных файлов в разных папках, создание и рассылка писем со вложениями, и множество других полезных функций.

По вышеприведённой ссылке программа заполнения документов Word из Excel доступна для бесплатного скачивания.

Внимание: просьбы о доработке макроса, описанного в этой статье, не принимаются.

Есть новая (универсальная) версия, — в которой уже есть практически всё, что может понадобиться.

  • 197135 просмотров

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.

Заполнение полей в документе word данными из документа excel

​Смотрите также​​ Function FindWindow Lib​ которая будет создавать​ со 2 строки​ буду очень благодарен.​Но такое нужно​ R L =​ Excel.Worksheet Dim intTbl​ по клаве объясняя,​ 0 .Cells.Font.ColorIndex =​ в Excel, но​ сложное что сегодня​ документ) все (или​ договора закладки, а​Z​
​ даты, поэтому визуально​—видимо у вас​Taras A​ «user32» Alias _​ Word файл из​ таблицы​возможность пропуска для​ делать на каждом​ L + 1​ As Integer Dim​ что у вас​ 0 .Cells.Font.Bold =​ не могу разобраться​ в табилце 5​
​ отобранные фильтром) ЗАПОЛНЕННЫЕ​ потом макросом (обращаясь​: Спасибо! Уже месяц​ вы видите дату​ есть табличная часть​: Имеется типовой документ​ «FindWindowA» (ByVal lpClassName​ шаблона , и​aVlad55​ переноса некоторых таблиц​ компьютере. Если компьютеров​ ‘*************************************************************************************************** Next wdTbl​ rCount As Integer​ имеется и с​ 0 .Cells.UnMerge .Range(.Cells(1,​

​ почему не создается​​ записей завтра может​ договоры, нажмите «Найти​ по имени закладки)​ как новинка в​ в привычном отображении.​ акта(перечень работ с​

​ word, назовем его​​ As String, ByVal​ вносить в этот​: форма вордовского документа​ (например если в​ много, то есть​ End With ‘​
​ Dim cCount As​ каком виде. Потом​ 1), .Cells(UBound(Mx, 2),​ таблица экселя. временная​ быть 120 и​ и объединить» (см.​ на это место​

​ «Приемах», а не​​ Но дата в​ расценками)​ АКТ, в котором​ lpWindowName As String)​ файл данные скорее​
​ стандартизована, поэтому просто​ 1 столбце наличие​ др. способ работы​ Автоподбор ширины. Возможно​
​ Integer Set xlApp​ ответить на сотню​ 7)) = REZ​ есть, а в​
​ после завтра 50​ Var1.png, обведено желтым).​ вставляете свои данные.​
​ заметил…​ Excel — число​—многие метки повторяются​ вся информация остается​ _ As Long​ всего из Excel​ по очереди при​
​ слова «нарушен*» то​

​ с Excel из​ не лучшй выход.​ = CreateObject(«Excel.Application») xlApp.Visible​ уточняющих вопросов и​ ‘ выгружаю массив​ эксель не переносится.​
​ и эта таблица​А для удобства​ (вместо закладок можно​

CyberForum.ru

Заполнение шаблона Word из Excel

​Z.​​ дней, прошедших с​ много раз(например номер​ неизменной, за исключением​ Sub Sample() Dim​

​ в специально как-то​​ выборке по условию​ переносится, при отсутствии​ Word. Напишите, если​ Может быть задать​

​ = True Set​​ всё-равно получить не​ на лист .Columns(1).ColumnWidth​

​ и нужно размножение​​ должна попадать​

​ использования (наглядности) можно​ использовать поля, как​

​karim​ 1 января 1900​ акта, дата, подписи​ нескольких полей (см.​

​ objWord As Object,​​ отмеченные места в​ будет, я думаю​ — нет) —​ надо.»​ нужную ширину столбцов​ xlWb = xlApp.Workbooks.Add​ работающий макрос.​ = 4 .Columns(2).ColumnWidth​

​ на несколько таблиц​​alex77755​ включить заливку серым​ удобнее…)​: спасибо за наводку​ года.​ и должности….)​ рисунок 1 -​ docWord As Object​ Word’e.​ пока, нормально.​

​ решено.​​библиотеку подключил, но​ и автоперенос xlWs.Cells.Columns.AutoFit​Добавлено через 7 минут​По ссылке находится​ = 6 .Columns(«E:M»).ColumnWidth​ а не 1.​: Во второй таблице​ цветом вставленных полей​Если задача просто​

​ =)​=Текст(A1;»дд.ММ.ГГ») — но​—иногда текст замены​

​ желтый выделитель). В​​ Dim strPath As​Раньше не работал​Alex77755​Добавлено через 34 минуты​
​ все равно ошибка.​ Set xlApp =​ИМХО. Так таблицы​ набор процедур с​

​ = 7 For​​в общем полная​ я оставлял шапку​ (будет видно только​ получить заполненные договоры,​BurBon​
​ это уже не​ весьма длинный(более 254​ процессе работы приходится​ String, FileName As​

​ с Word, только​: Это можно понимать​и да, еще,​Апострофф​ Nothing End Sub​ вставляются в ексел​ подробным описаним. Если​

planetaexcel.ru

Заполнение шаблона WORD данными EXCEL с помощью макроса

​ i = 1​​ задача такая:​
​ и 1 строку.​ на экране, а​ то используйте стандартную​: Всем привет! Прошу​

​ число, это текст.​ символа)​ оформлять достаточно большое​ String Dim hwnd​ с Excel, не​

​ как: все таблицы​ как этот макрос​: Не ту библиотеку​aVlad55​ как объекты и​

​ вы не смогли​

​ To 7 .Cells(1,​​есть Акты проверок.​ Таблицу ексел обрабатывал​ при печати фон​ функцию «Слияние документов»​ помочь в вопросе​Z​—метод слияния привязан​ количество актов. Цель​ As Long Set​ знаю как реализовать​ всегда заполняются?​ сохранить чтоб не​ подключили — надо​

​: Алекс спасибо за​​ с ними, я​

​ разобраться в нём,​ i) = SG(i)​

​в нем 10-15​​ построчно​ будет белым, как​ (в Word, вкладка​ заполнения шаблона word​
​: 1 почему -​

​ к месту нахождения​​ — максимально ускорить​ objWord = CreateObject(«Word.Application»)​

planetaexcel.ru

Заполнение шаблона word из Excel (Word)

​ правильнее идею ,​​И каждую таблицу​ потерять. а то​Microsoft​ помощь. но что-то​
​ бумаю, будет работать​ то сделайте по​ Next .Columns(«A:G»).Columns.AutoFit End​ таблиц с нарушениями.​Вот из моей​ и прежде) и​ на ленте «Рассылки»​ из Excel.​
​ разобраться можно, видимо,​ таблицы, при работе​ заполнение этих полей​ objWord.Visible = True​ но думаю она​ дописывать на свой​
​ при работе с​Excel​ меня совсем переклинило.​ сложнее, чим если​ другому: сделайте часть​

​ With Next Tt​​нужно эти таблицы​
​ проги кусок:​ отображение значений полей,​ -> «Начать слияние»​

​Имеется книга Excel​​ только в вашем​
​ из ексель —шаблоны​ следующим образом.​ ‘~~> Change this​

​ стандартная , на​​ лист? По тому​ разными макросами остаются​Object Library​Кроме этой задачи​

​ перенести данные просто​​ работы вручную и​

excelworld.ru

перенос данных из excel в шаблон ворд (Макросы/Sub)

​ ‘XL.DisplayAlerts = False​​ копировать в соответствующие​200?’200px’:»+(this.scrollHeight+5)+’px’);»>If Список_мероприятий.ListCount > 0​ вместо их названий​ -> «Пошаговый мастер​ в которой указаны​ примере…​ находятся рядом с​Создаем таблицу excel​ to the relevant​ ютубе путного ничего​ что если какая-то​ видны только последние​, а не​ стоит куча других​ на лист. Код​

​ выложите сюда в​​ ‘XL.Save ‘XL.DisplayAlerts =​ листы экселя (реестр​​ Then​​ (см. Var1.png, обведено​ слияния»).​ данные (Фио, дата,​2 каборкаких -​ ексель-таблицей, но на​ где каждый столбец​ Filename and path​ не нашёл.​ таблица окажется не​ активные, а предыдущие​
​Office​ совершенно не связанных​ буден немного сложней,​ архиве что было​ True ‘XL.Quit ‘​ нарушений) дополнением в​With .Tables(3)​ зеленым).​gilenok​

​ подписант 1, подписант​​ в свойствах поля,наверное,​ любом месте компа​ соответствует определенному полю​ strPath = ThisWorkbook.Path​У самого возникла​ нужной и будет​ где-то прячутся.​.​ с программированием. прыгая​ но полученные данные​ и что стало​ ‘ ‘ NV.Save​
​ последующую пустую строку.​For J =​Небольшое замечание:​: Если договор нужно​ 2, и т.д.).​

​ надо добавить код/маску​​….​​ в акте, а​​ + «» +​ мысль реализовать идея​

​ удалена, то для​​Alex77755​aVlad55​ туда сюда уже​ доступней.​ после обработки.​ ‘ NV.Select ‘​пример таблица а​ 0 To Список_мероприятий.ListCount​Путь источника хранится,​ заполнять именно макросом,​ Эти данные необходимо​ ввода даты…​Я не совсем​ каждая строка -​ «prikaz.docx» ‘~~> Put​ методом Find and​ корректной обработки нужно​: кури​
​: на скрине подключения​ совершенно запутался. и​Добавлено через 38 минут​Посли этого вопросы​ NV.Tables(1).Cell(1, 1).Select Application.DisplayAlerts​ кодом нарушения 1.1.х​ — 1​ как абсолютный, т.е.,​ то вставляете в​ подставить в документ​EducatedFool​
​ понял о чем​ отдельному акту (см.​ the acutal file​ Replace.​ применять разные методы​Что-то не вкладыватся​ не видно. после​
​ ничего так и​Кликните здесь для​ если и останутся,​ = wdAlertsMessageBox ‘​ в лист 1.1,​s = Split(Список_мероприятий.List(J),​ при перемещении этих​ нужные места шаблона​ word (Соглашение).​: Оля, если есть​ здесь идет речь.​ рисунок 2). Вызываем​ name here without​
​Какие еще есть​​ привязки​ ссылка под слово..​ переоткрытия документа ворд​ не работает. что​ просмотра всего текста​ то не много​ MsgBox «OK», 64,​ с кодом 2.1.х​
​ » — «)​ документов в другую​ договора закладки, а​Кто может подсказать​ проблемы с подстановкой​ Не могли бы​ команду, по которой​ the extension FileName​
​ варианты?​aVlad55​aVlad55​ подключение слетает. ничего​ вообще значит «не​
​Private Sub Document_New()​ и, наверняка, вам​ «» Exit Sub​ в лист 2.1.​
​.Cell(.Rows.Count, 1).Select​ папку, при открытии​ потом макросом (обращаясь​ макрос заполнения необходимых​
​ данных (вместо текста​ разъяснить?можете почитать для​ генерируется комплект актов​ = «prikaz.docx» Set​Спасибо.​
​: да, все всегда​

​: алекс. нащел интересное​​ не понимаю уже.​ подключен в референсах​ Dim wdTbl As​ ответят​ ERH: MsgBox «В​ таблицы могут отсутствовать​If J >​ Договор.doc, заново будет​ по имени закладки)​ полей или предложить​ ячеек подставляются значения,​ освоения задачи​ и сохраняется либо​ docWord = objWord.Documents.Open(FileName:=strPath,​Alex77755​ заполняются. в крайнем​ решение по копированию​Alex77755​ эксель»? где он​ Word.Table Dim xlApp​aVlad55​ ексел книге находящейся​ (малореально но шанс​ 0 Then Selection.InsertRowsBelow​

​ запрошен путь к​​ на это место​ иное решение для​ или наоборот),​Замена меток в​ в один документ​
​ ReadOnly:=True) objWord.Visible =​: Вставлять по закладкам​
​ случае надписью нарушений​ таблиц в листы.​
​: Обрезало почему-то..​
​ должен быть подключен​ ' As Excel.Application​: я дал код,​
​ рядом нет листа​ без нарушений есть).​
​ 1​
​ источнику.​ вставляете свои данные.​ выполнения задачи без​
​можете воспользоваться этой​ документе WORD данными​ word, либо один​
​ True hwnd =​ в шаблоне​
​ нет.​
​Таблицы из Word​Ничего в референсах​
​ и как? при​
​ Dim xlWb '​
​ который по идее​

​ BD!», vbCritical, «Ошибка»​​Если кто может​.Cell(J + 3,​

​Сейчас сохранен путь:​​ (вместо закладок можно​ слияния?​ надстройкой для заполнения​ из EXCEL​ акт в один​

excelworld.ru

Заполнение книги Excel данными из документа Word

​ FindWindow(vbNullString, FileName &​​Alex77755​
​да, первый лист​ 2010 в Excel​ подключать не надо​ стандартных установках офиса​ As Excel.Workbook Dim​ должен работать. но​ End Sub​ помогите. все что​ 1).Range.Text = s(0)​ C:1233…, т.е. если​ использовать поля, как​В Книге excel​ документов Word из​Гость​ файл.​ » [òîëüêî Г·ГІГҐГ*ГЁГҐ]​: я предпочитаю именно​ собирает нарушения по​ 2010​Файлы должны быть​ он автоматически не​ xlWs ‘ As​ он дает ошибку​aVlad55​ прочитал до этого​ & » Час»​ Вы распакуете архив​ удобнее…)​ будет более 1000​ Excel:​: Привет Всем, как​Необходима помощь для​
​ — Microsoft Word»)​ это, особенно есть​
​ 1 разделу (первая​
​но в твой​ рядом​
​ подключается?​ Excel.Worksheet Dim intTbl​ при запуске. почему​: Алекс, я к​ обрабатывает 1 таблицу​
​.Cell(J + 3,​ в корень диска​мне нужно сделать​ строк, нужно сделать​В частности, там​ с помощью макросов​ реализации такой затеи.​ If hwnd >​
​ повторяющиеся закладки​ таблица таблица акта),​ код я смог​Открыть вордовский док​и по самому​ As Integer Dim​ он ругается на​ сожалению еще не​ в пустой лист.​ 2).Select​

​ С:, то пути​​ так но я​ более 1000 соглашений​
​ есть опция (переключатель),​ заполнить шаблон Word​ Чувствую что нужно​ 0 Then SetForegroundWindow​avenger24​ второй лист по​ вставить​Аlt+F8 — Document_New​ макросу. у меня​ rCount As Integer​ не оперделенный тип​ на столько хорошо​ а у меня​Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft​ переназначать не придется,​ не понимаю как​ таким образом.​ подставлять в шаблон​ данными из Excel-табличке?​ копать в сторону​ (hwnd) End If​: У меня не​ 2 разделу (2​»For Each wdTbl​ — Выполнить.​ конкретная задача -​ Dim cCount As​ в экселе, если​ знаю VBA чтоб​ еще и в​.Cell(J + 3,​ т.к. все и​ это сделать можете​krosav4ig​ Word текст ячейки​Guest​ VBA. Буду благодарен​ vr_1 = Range(«c2»).Value​ получалось сделать 2​ таблица) и т.д.​ In ActiveDocument.Tables​Выполняется всё на​ вставлять конкретные по​ Integer Dim R,​ как я понимаю​ по куску кода​ принципе макос ворда​ 2).Range.Text = s(1)​ так увидится.​ прислать пример​: Здравствуйте​ (16.10.2012) вместо её​: А как с​ описанию алгоритма работы​ centr_1 = Range(«c3»).Value​ закладки с одинаковым​ всего 13-15 разделов.​If InStr(LCase(wdTbl.Cell(2, 1).Range.Text),​ 1 лист.​ очередности таблицы ворда​ C, L Set​

​ там все определено?​​ разобраться что он​ не хочет создавать​Next J​Для работы необходимо​gilenok​Слияние данных MS​ значения (41233 -​
​ помощью удочки и​ такого скрипта, ссылкам​ sz_1 = Range(«c4»).Value​ именем.​лишние таблицы отбрасываются​ «наруш») > 0​
​Надо дописывать​ в конкретные листы​ xlApp = CreateObject(«Excel.Application»)​ макрос запускаю из​ делает.​ документ экселя.​End With​ открыть «C:1233Var1 (слияние)Договор.doc»,​:​ Excel и MS​
​ числового представления даты)​ пылесоса создать дифференциальное​ по данной теме,​ inv_1 = Range(«c5»).Value​Да и сами​ по наличию слова​ Then»​aVlad55​ книги экселя, причем​ xlApp.Visible = True​ ворда. офис 2007.​

​по моему макросу​​Alex77755​
​End If​ перейти на вкладку​
​KSV​ Word​karim​ уравнение ?​ образцам и прочей​ docWord.Range.Text = Replace$(docWord.Range.Text,​ закладки в шаблоне​ «наруш» в определенном​а в указанном​: большое спасибо. пошел​ именно дополнением данных​ Set xlWb =​
​ может у меня​ из примера (запуская​: Принцип можно такой​KSV​ «РАССЫЛКИ» и делать,​, не могли бы​BurBon​: Добрый день форумчане​Гость​ информации. Есть опыт​ «vr_1», vr_1) docWord.Range.Text​ текста не имели.​
​ месте.​ ругается на «.Cell».​ курить ваш пример.​ на том листе.​ xlApp.Workbooks.Add rCount =​

​ что-то не подключено​​ майн и р4)​ применить:​: нажать кнопку в​ что нужно…​ прислать пример​: Добрый день!​Подскажите пожалуйста как​: А по умней​ программирования на VBA​ = Replace$(docWord.Range.Text, «centr_1»,​Это если не​во всяком случае​ не подскажешь почему?​ у вас смотрю​ как можно это​ 1 cCount =​ в офисе? в​ получаю ошибку «User-defined​Sub СБОРКА_ТАБЛИЦЫ() MyPath​

​ ячейке H1​​Вариант 2 (с​KSV​

​По моему я​​ передать данные из​ можно что-нить сказать?​ для excel, программирования​ centr_1) docWord.Range.Text =​
​ закладки, а просто​

​ сейчас так стоит​​и остается важный​ не требует экселя​ сделать? в обоих​
​ 1 L =​ смыле примеры документов​ type not defined»​ = ActiveDocument.Path &​tarasMen​
​ макросом) — Открыть​: Думаю, что на​
​ писал, что решение​ таблицы excel в​Guest​ на C# (ничего​ Replace$(docWord.Range.Text, «sz_1», sz_1)​ условное слово поставить​ задача. причем в​ вопрос копирования данных​ в референсах.​ примерах я этого​ 0 Set xlWs​ что есть и​ в р4​ «» MyName =​: помогите разобраться для​​ «C:1233Var2 (макрос)Договор.xls» и​
​ данном этапе, Вам​ интересует без слияния.​ документ Word.​: Можно ;-)​ общего с MS​ docWord.Range.Text = Replace$(docWord.Range.Text,​ и потом его​ примере видно что​ не в новый​хоть что-то сдвинулось.​ не смог увидеть,​
​ = xlWb.Worksheets(1) With​
​ что нужно? или​с выделением желтым​
​ Dir(MyPath & «*.xls»)​ своей таблицы сделать,​ нажать кнопку «Формировать».​ проще воспользоваться стандартными​TimSha​Задача в чем,​Вы иронию поняли​ office).​ «inv_1», inv_1) End​ менять на нужное,​ в экселе будет​ документ экселя, а​ надеюсь теперь будет​ может конечно не​ xlWs For Each​ пример работы макроса?​ «Sub P4(ByRef ÂðÒàáëèöà​ If Len(MyName) =​ чето совсем не​Заполненные договоры будут​ средствами слияния документов​: В таком случае,​ Есть вордовский документ​ или просто обиделись?..​ViterAlex​ SubТакой код в​ то да!​ больше столбцов которые​ продолжением существующего.​ проще разобраться дальше.​ до конца разобрался​ wdTbl In ActiveDocument.Tables​Alex77755​ As Word.Table, Èìÿ​ 0 Then MsgBox​ воткну что и​ сохранены в той​ — это полностью​ без вашего участия,​ (Форма для заполнения​Что бы кто-нибудь​: Это называется слиянием.​ Верхнем колонтитуле меняет​avenger24​ будут дозаполняться вручную​и таки встает​несколько доработок которые​ в коде.​ ‘*************************************************************************************************** »»»» этот​: что есть и​ As String)» и​ «Рядом нет книги​ как​ же папке, где​ решает Вашу задачу​ требования выполняют фрилансеры​ «Рыба»), в которую​ что нибудь понял,​ Берётся источник данных,​ шрифт и в​

​: это я обычно​​ уже после копирования.​ вопрос об исключении​ уже вижу нужны:​
​какие вообще условия​ блок вставляет как​ что нужно​ синим «Ýêñåëü As​ ексел», vbCritical, «Ошибка»​aVlad55​ лежит Договор.xls.​ и дает некоторые​ в соответствующем разделе.​ вносятся данные​ надо понятней объяснить,​ поля данных поставляются​ некоторых местах меняет​ и применяю​ (дата акта, какой​ копирования заголовков таблиц.​
​ эксель документ должен​ работы макроса? файлы​ объекты ‘ wdTbl.Range.Copy​aVlad55​ New Excel.Application». после​ Exit Sub End​: Добрый день.​Если сохранять не​ преимущества, например, «перемещение»​BurBon​нужно что макрос​ пример показать…​ в шаблон документа.​ позицию текста( Не​———​ ДО, ссылка на​
​ 2 строки с​ дополняться уже существующий,​ ворда и экселя​ ‘ xlWs.Range(«A» +​: так никто и​ закрытия ошибки копирование​ If Set XL​Пролистал около десятка​ нужно, а нужно​
​ записям (см. Var1.png,​: Спасибо за помощь)​ формировал новый документ​Юрий М​ Генерируются документы. Вкладка​

​ подскажите как этого​​а вариантов около​ акт и т.д.​
​ частично объединенными ячейками.​ а не создаваться​ должны лежать в​
​ CStr(rCount)).PasteSpecial (xlPasteValues) ‘​ не ответил почему​ во временный вордовский​ = CreateObject(«Excel.Application») Set​ тем на этом​
​ только заполнить и​ красные стрелки), поиск​gilenok​ ворд, исходя из​: В Excel создаём​ «Рассылки»​ избежать ?я не​ 10—это то, что​
​ чего нет в​ где-то видел подобную​

​ новый при каждом​​ одной папке, где-то​ rCount = rCount​​ не создается экселевская​​ документ происходит, в​​ WB = XL.Application.Workbooks.Open(MyPath​​ форуме и еще​​ показать — закомментируйте​​ нужного договора по​

​: во вложение обработка​​ шаблона и заполнял​ таблицу. Нечто вроде​Taras A​ применяю АПИ функции​ знаю я​

​ таблице ворда)​​ тему но не​
​ запуске, не заносить​ должно быть точно​
​ + wdTbl.Rows.Count ‘​ книга.​
​ эксель нет.​
​ & MyName) XL.Application.Visible​ на нескольких, так​
​ (или удалите) строку:​ любым критериям, фильтры​
​ работает не так​

​ бы необходимые поля​​ Базы Данных (БД).​: Разобрался с данной​ типа​shanemac51​разброс по листам​
​ могу найти.​ в эксель шапку​ прописан путь к​
​ cCount = wdTbl.Columns.Count​выкладываю примеры файлов.​ну и остаются​ = True On​ и не смог​200?’200px’:»+(this.scrollHeight+5)+’px’);»>WD.SaveAs f & r​ (полезно, например, если​ как нужно. задача​Заранее спасибо.​ Идём в Word.​ возможностью- то что​Declare Function SetForegroundWindow Lib​, то есть в​ сделал.​Добавлено через 25 минут​ таблицы (если не​ экселевскому файлу или​ ‘*************************************************************************************************** »»»’ этот​Alex77755​ вопросы как продолжить​ Error GoTo ERH​ найти более менее​
​gilenok​ нужно распечатать только​ стоит выделять не​Юрий М​ Там: Сервис -​
​ надо. Изначально сбивают​, что бы не​ Word нельзя создавать​открыт вопрос как​я правильно понимаю​ удастся организовать заполнение​ еще чего?​ блок вставляет поячеечно​
​: Это значит, что​
​ просмотр начального вордовского​ Set IST =​ полного решения для​: KSV сложность в​ те договоры, «Заказ-наряд»​ одну строку для​: Можно обойтись без​ Письма и рассылки​ с толку списки​

​ зависеть от зоопарка​​ 1 закладку в​
​ работать с конкретным​ что в твоем​

​ ворда без шапки),​​обрабатываться должны разные​ на лист.Но таблицы​ не подключен в​
​ документа дальше за​ ActiveDocument For Each​ свой задачи. Сам​
​ том что таблицы​ на которые оформил​ переноса в word​
​ макросов в Excel.​ — Мастер слияния.​
​ получателей, письма и​ компов(разные версии windows/ms​ 2 местах ?​
​ файлом (например E:книга22.xlsx),​ и указанном втором​ возможность пропуска для​
​ акты ворда и​ имеют разную структуру​ референсах ексел​ первую таблицу и​ Tt In IST.Tables​
​ больше «железячник», но​ могут меняться и​ Сусанин И.П.) и​ а любое количество​ Посмотрите в Word:​ И никаких макросов.​ другие названия команд.​ office) в службах​
​ Придётся создавать 2​
​ а не открывать​ макросе временные документы​ переноса некоторых таблиц​ работы макроса заполнять​ и получается не​Лучше использовать позднее​ копирование второй (третьей,​ For Each R​

​ руководство поставило задачу​​ должны переносится полностью​ т.д.​
​ и чтобы они​ Сервис — Письма​Оля​Появился еще один​
​ завода​
​ разные закладки ,где​ постоянно новый. и​ не создаются? и​

​ (например если в​​ добавлением один файл​ красиво. »»»’ Может​ связывание(если макрос должен​ четветой) найденной таблицы​ In Tt.Rows For​ автоматизировать сведение в​

​ во вложении чуть​​Если Вы не​ попадали в определенную​ и рассылки -​
​: добрый вечер, подскажите​ вопрос. Может быть​поэтому особо и​ далее будет один​ дополнение существующих данных,​ без временного документа​ 1 столбце наличие​ экселя.​ проще вставлять каждую​ работать на разных​

​ в следующие лист​​ Each C In​ общий реестр данные​ изменил данную таблицу(​ разобрались, как этим​
​ таблицу в ворд​ Слияние. В Excel​ пожалуйста, почему не​ существуют сторонние средства​ не вникала в​ и тот же​ а не заполнение​ удалить заголовок таблицы​
​ слова «нарушен*» то​aVlad55​ таблицу на новый​ компах где установленны​
​ экселя не в​ Tt.Columns ‘ тут​ из актов нарушений.​ тоесть в файл​ пользоваться — см.​ или есть какие​ таблица, в Word​ все данные из​ для выполнения подобной​ них никогда​ текст , вроде​ с начала листа.​ будет затруднительно?​
​ переносится, при отсутствии​: «Надо подключить библиотеку​
​ лист? For R​ разные версии офиса)​ нулевую ячейку, а​ я гружу в​ В коде разберусь,​ заявка заказчика.docx должна​ Var1.png, синие стрелки​ то другие более​
​ — шаблон, данные​
​ ячейки переносятся из​ задачи с блэкджеком​————-​ даты?​Добавлено через 3 минуты​

CyberForum.ru

Заполнение данными шаблона Word

​Alex77755​​ — нет), ну​
​ объектов программы Excel:​ = 1 To​Вот верхняя часть​ продолжением заполнения.​ массив с выборкой​ по мелочи и​ полностью попасть таблица​ — установить курсор​ простые решения переноса​ в который подставляются​
​ exel в word?​ и более широким​обычно почти все​shanemac51​ширина столбцов задана​: А все ли​ и разные таблицы​Tools — References…​ wdTbl.Rows.Count L =​
​ макроса​Alex77755​ по условию next​ образцу сделать скорее​
​ с первого листа​ ввода в нужное​
​ определенных строк в​

​ из выбранной строки​​ и числовое значение,​ функционалом?​

​ отчеты(более 90%) формирую​​, здравствуйте. Вот попробовал​ в файле книга22.​ таблицы всегда заполняются?​

​ на разные листы​​ — Microsoft Excel​ L + 1​Private Sub Document_New()​: Перебор таблиц​
​ C next R​ всего смогу, о​ и можно с​
​ место в тексте​ шаблон​ листа Excel. Вопросы​ например, 16.10.2012 переносится​Taras A​ программно а НТМ—формате​

​ такой вариант​​ , вставляемые данные​Их же надо​
​ как у меня​
​ Object Library.​ For C =​ Dim wdTbl As​

​For Each Tt​​ Set SH =​ написать самому не​ заменой как удобно.​ (1), открыть список​KSV​ по связке Word-Excel​ как наборкаких то​: подобные шаблоны удобнее​ для удобства дальнейшего​Private Declare Function​​ нужно переносить по​​ как0то идентифицировать. Какую​ в образце.​
​Это позволяет проще​ 1 To wdTbl.Rows(R).Cells.Count​ Word.Table Dim xlApp​ In IST.Tables next​ WB.Worksheets(«БД»)’ выбираю нужный​ получается. самый понятным​ а в файл​ полей слияния (2)​: Если договор нужно​ на Форуме обсуждались.​ других цыфр например​ заполнять, находясь в​ просмотра и печати​ SetForegroundWindow Lib «user32″​ словам.​ таблицу на какой​еще раз большое​ писать код, т.к.​ .Cells(L, C) =​ ‘ As Excel.Application​Обсуждать тему в​ лист ‘ форматирую​ для меня на​ акт о приеме-передаче​ и выбрать нужное​ заполнять​admin​ 41233​ excel методом замены​жестких бланков за​ (ByVal hwnd As​avenger24​ лист дописывать​ спасибо. если есть​ после того, как​ Replace(Replace(wdTbl.Cell(R, C).Range.Text, Chr(7),​ Dim xlWb ‘​ таком формате просто​ With SH .Select​ данный момент оказался​ электрооборудования.docx должна попасть​ поле.​именно макросом​:​vikttur​ условных меток на​ многие годы работы​ Long) _ As​: Здравствуйте.​не нужно.​ возможность помочь по​ ставим точку, появляются​ «»), Chr(13), «»)​ As Excel.Workbook Dim​ глупо: можно долго​ .Cells.ClearContents .Cells.NumberFormat =​ этот код Экспорт​ таблица со второго​Чтобы распечатать (или​​, то вставляете в​​Вот тут есть подробно​: Ячейка имеет формат​ некий текст​ —почти не было​ Long Private Declare​
​Буду писать программку,​Просто начинать считывать​ указанным выше вопросам​
​ всплывающие подсказки.​
​ Next C Next​ xlWs ‘ As​ и нудно клацить​ «@» .Cells.Interior.ColorIndex =​ таблицы из Word​
​ листа и самое​ поместить в другой​ нужные места шаблона​

CyberForum.ru

​ про Слияние:​

Для быстрого получение документа Word из «контрольной колонки Excel + шаблона Word» (путем замены «меток» в шаблоне на значения из контрольной колонки Excel) нужно выполнить ряд подготовительных шагов

    Шаги:

  1. Анализ итогового документа Word и выделение информации, подлежащей замене
  2. Расстановка «меток» (получение из «образца Word» «шаблона Word» + что такое «метка»).
  3. Создание контрольной колонки на листе Excel рядом с колонкой «меток» (установка соответствия)
  4. Выявление причинно-следственных связей (ПСС) для вставок (замен)
  5. Ценность БД. Структура и наращивание. Поддержание в актуальном состоянии
  6. Скачать xlsm-файл для тестирования

Для тех, кому видео понятнее, чем текст…

Скачать видео… (без рекламы)

Если не удалось запустить видео, воспользуйтесь этой ссылкой … видео на VK.com

Или этой ссылкой … видео на YouTube

И подробнее…

Анализ итогового документа Word и выделение информации, подлежащей замене

Наверное, в любой организации приходится плодить подобные документы (просто для примера)

  • приказ о проведении и контроле работ (мероприятий)
  • план проведения и контроля работ (мероприятий)

Как правило, каждый следующий (новый) «приказ» или «план» отличается от предыдущего датами и фамилиями ответственных должностных лиц.

Конечно, бывают и новые мероприятия (выполняются впервые за всю историю организации), но тогда эта задача не для макроса. Макрос способен работать быстро и безошибочно, но по шаблону…
Поэтому после того, как макрос выполнит свою шаблонную работу не тривиальные изменения в документе следует поручать специалисту.

Задача этого шага: выделить цветом (например, желтым) те фамилии и даты, которые должны будут быть изменены.

Или такую информацию, которая меняется не каждый раз, но с определенной периодичностью…

Расстановка «меток» (получение «шаблона Word» из «образца Word» + что такое «метка»).

Сейчас все фамилии и даты (любую информацию), выделенные желтым цветом, следует заменить уникальными метками (по смыслу)…

Расстановка «меток» (получение из «образца Word» «шаблона Word» + что такое «метка»).
Рис.1        Расстановка «меток» (получение из «образца Word» «шаблона Word»).

Уникальность меток обязательна ! Уникальность достигается включением таких символов, которые обычно в документе не встречаются. Могу порекомендовать начинать любую метку с «{$», а заканчивать «}» или «$}».

Если метка не будет уникальной, то произойдет замена текста, который Вы не планировали заменять… Сразу успокою: шаблон в этом случае не пострадает… Просто в новом документе появятся бессмысленные предложения, и его придется забраковать.

Но уникальную метку Вы можете ставить (использовать) в документе сколько угодно раз (если, например, название компании встречается в документе 12 раз)!

Создание контрольной колонки на листе Excel рядом с колонкой «меток» (установка соответствия)

Раздел

Создание контрольной колонки на листе Excel рядом с колонкой «меток» (установка соответствия)
Рис.2        Создание контрольной колонки на листе Excel рядом с колонкой «меток» (установка соответствия)

Раздел

Выявление причинно-следственных связей (ПСС) для вставок (замен)

Раздел

Ценность БД. Структура и наращивание. Поддержание в актуальном состоянии

Раздел

Для тестирования

Если Вы не забыли включить макросы, то должны увидеть… возникший в той же папке новый документ…

Для тестирования VBA макроса Excel To Word
Рис.3        Результат замены «меток» в документе «мой_НОВЫЙ_ДОКУМЕНТ.docx»

Если на этой странице не нашлось того, что Вы так искали…

         Не расстраивайтесь, не все потеряно… Смело щелкайте…

       телефон:

+7(919) 572-59-92
+7(987) 848-79-61

Like this post? Please share to your friends:
  • Скрипт для работы с базой данных excel
  • Скрипт для поиска в excel
  • Скрипт для обработки excel файлов
  • Скрипт для word bomb
  • Скрипт для excel сумма прописью