Время на прочтение
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')
Извлечение диаграммы
Теперь, когда мы сгенерировали нашу диаграмму, нам нужно извлечь её как изображение, чтобы мы могли использовать её в нашем отчёте 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), сформированным именно так, как мы хотим: отчёт содержит шрифты, размеры шрифтов, структуру и форматирование страниц.
Теперь всё, что нам нужно сделать, — создать плейсхолдеры для сгенерированного нами контента, то есть табличные значения и изображения, и объявить их с именами переменных, как показано ниже.
Любой сгенерированный контент, включая текст и изображения, может быть объявлен в двойных фигурных скобках {{ 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
- Создание файлов
- Работа с файлами
Макрос предназначен для программного создания документов 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, и т.д.).
надо добавить код/маску…. в акте, а + «» + мысль реализовать идея
удалена, то дляAlex77755aVlad55 туда сюда уже доступней. после обработки. ‘ 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
варианты?aVlad55aVlad55 подключение слетает. ничего вообще значит «не
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 xlAppaVlad55 ексел книге находящейся (малореально но шанс 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 SetForegroundWindowavenger24 второй лист по вставитьА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 Wordkarim уравнение ? образцам и прочей 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-definedSub СБОРКА_ТАБЛИЦЫ() 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.TablesAlex77755 As Word.Table, Èìÿ 0 Then MsgBox воткну что и сохранены в той — это полностью без вашего участия, (Форма для заполненияЧто бы кто-нибудь: Это называется слиянием. Верхнем колонтитуле меняетavenger24 будут дозаполняться вручнуюи таки встаетнесколько доработок которые в коде. ‘*************************************************************************************************** »»»» этот: что есть и As String)» и «Рядом нет книги как же папке, где решает Вашу задачу требования выполняют фрилансеры «Рыба»), в которую что нибудь понял, Берётся источник данных, шрифт и в
: это я обычно уже после копирования. вопрос об исключении уже вижу нужны:
какие вообще условия блок вставляет как что нужно синим «Ýêñåëü As ексел», vbCritical, «Ошибка»aVlad55 лежит Договор.xls. и дает некоторые в соответствующем разделе. вносятся данные надо понятней объяснить, поля данных поставляются некоторых местах меняет и применяю (дата акта, какой копирования заголовков таблиц.
эксель документ должен работы макроса? файлы объекты ‘ wdTbl.Range.CopyaVlad55 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 + 1Private 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 Asavenger24 лист дописывать спасибо. если есть после того, как 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) нужно выполнить ряд подготовительных шагов
- Шаги:
- Анализ итогового документа Word и выделение информации, подлежащей замене
- Расстановка «меток» (получение из «образца Word» «шаблона Word» + что такое «метка»).
- Создание контрольной колонки на листе Excel рядом с колонкой «меток» (установка соответствия)
- Выявление причинно-следственных связей (ПСС) для вставок (замен)
- Ценность БД. Структура и наращивание. Поддержание в актуальном состоянии
- Скачать xlsm-файл для тестирования
Для тех, кому видео понятнее, чем текст…
Скачать видео… (без рекламы)
Если не удалось запустить видео, воспользуйтесь этой ссылкой … видео на VK.com
Или этой ссылкой … видео на YouTube
И подробнее…
Анализ итогового документа Word и выделение информации, подлежащей замене
Наверное, в любой организации приходится плодить подобные документы (просто для примера)
- приказ о проведении и контроле работ (мероприятий)
- план проведения и контроля работ (мероприятий)
Как правило, каждый следующий (новый) «приказ» или «план» отличается от предыдущего датами и фамилиями ответственных должностных лиц.
Конечно, бывают и новые мероприятия (выполняются впервые за всю историю организации), но тогда эта задача не для макроса. Макрос способен работать быстро и безошибочно, но по шаблону…
Поэтому после того, как макрос выполнит свою шаблонную работу не тривиальные изменения в документе следует поручать специалисту.
Задача этого шага: выделить цветом (например, желтым) те фамилии и даты, которые должны будут быть изменены.
Или такую информацию, которая меняется не каждый раз, но с определенной периодичностью…
Расстановка «меток» (получение «шаблона Word» из «образца Word» + что такое «метка»).
Сейчас все фамилии и даты (любую информацию), выделенные желтым цветом, следует заменить уникальными метками (по смыслу)…
Рис.1 Расстановка «меток» (получение из «образца Word» «шаблона Word»).
Уникальность меток обязательна ! Уникальность достигается включением таких символов, которые обычно в документе не встречаются. Могу порекомендовать начинать любую метку с «{$», а заканчивать «}» или «$}».
Если метка не будет уникальной, то произойдет замена текста, который Вы не планировали заменять… Сразу успокою: шаблон в этом случае не пострадает… Просто в новом документе появятся бессмысленные предложения, и его придется забраковать.
Но уникальную метку Вы можете ставить (использовать) в документе сколько угодно раз (если, например, название компании встречается в документе 12 раз)!
Создание контрольной колонки на листе Excel рядом с колонкой «меток» (установка соответствия)
Раздел
Рис.2 Создание контрольной колонки на листе Excel рядом с колонкой «меток» (установка соответствия)
Раздел
Выявление причинно-следственных связей (ПСС) для вставок (замен)
Раздел
Ценность БД. Структура и наращивание. Поддержание в актуальном состоянии
Раздел
Для тестирования
Если Вы не забыли включить макросы, то должны увидеть… возникший в той же папке новый документ…
Рис.3 Результат замены «меток» в документе «мой_НОВЫЙ_ДОКУМЕНТ.docx»
Если на этой странице не нашлось того, что Вы так искали…
Не расстраивайтесь, не все потеряно… Смело щелкайте…
телефон:
+7(919) 572-59-92
+7(987) 848-79-61