Подстановка данных в word из excel: Подстановка таблиц Excel в шаблоны Word

Подстановка таблиц Excel в шаблоны Word

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

Что для этого нужно:

 

1. Включаем в настройках программы опцию вставки таблиц:

 

2. В исходной таблице Excel создаем столбец, где у нас будут храниться ссылки на вставляемые таблицы (столбец может называться как угодно),
выделяем ячейку в этом столбце (в строке с данными),
и нажимаем комбинацию клавиш Ctrl + Shift + T для вызова диалогового окна выбора таблицы:

 

3. Из выпадающего списка выбираем имя листа, содержащего таблицу
(предварительно, можно выбрать другой файл, — если вставляемая таблица расположена во внешнем файле),
выбираем диапазон ячеек, и один из 4 доступных режимов вставки таблицы Excel в Word:

 

4. В выделенную ячейку исходной таблицы будет вставлена запись примерно такого вида:

<ExcelTable>/платежи/график/Excel

По этой записи надстройка FillDocuments понимает, что в шаблон Word, на место метки {Вставляемая таблица},
надо вставлять не текст ячейки, а таблицу, параметры вставки которой сохранены в этой ячейке.

 

Что обозначают параметры (разделенные слешем):

<ExcelTable> — это метка, которая говорит надстройке, что надо вставлять таблицу, а не текст ячейки

платежи — имя листа, с которого будет взята таблица

график — адрес или имя диапазона ячеек, который будет скопирован в шаблон Word

Excel — название режима вставки

 

Поэкспериментировав с выбором различных диапазонов и режимов, вы можете получить другие варианты метки, например:

<ExcelTable>34. xlsm/Спецификация/A2:F3/Word

Эта метка означает, что таблица будет скопирована из файла 34.xlsm, расположенного в папке Таблицы
(папка должна иметь именно такое название — Таблицы, и располагаться там же, где находится файл надстройки FillDocuments),
копироваться будет диапазон ячеек с A2 по F3, и при вставке будет выбран режим «использовать форматирование Word»


 

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

Есть 2 варианта решения проблемы:

Способ 1:  вместо выбора диапазона, поставить галочку «все заполненные ячейки»

Обратите внимание — кнопка выбора диапазона становится недоступной, а в поле адреса высвечивается,
какой диапазон ячеек Excel считает заполненным на этом листе.

В диапазон могут попасть «пустые» строки или столбцы, — на самом деле, для Excel они не совсем пустые,
а, например, содержат какое-то форматирование или формулы.

Потому, чтобы этот способ корректно работал, необходимо выделить целиком лишние («пустые») строки и столбцы,
и нажать в меню Excel «Очистить — Очистить всё»

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

 

Способ 2: сделать динамическую таблицу

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

Во вложении к статье — пример такой таблицы.

В первой строке таблицы прописаны формулы, и протянуты (с запасом) на 200 строк вниз
(т.е. во всех строках — одни и те же формулы)

Рамки ячеек в заполненных строках выполнены при помощи условного форматирования
(назначено правило для 5 столбцов — рисуем рамки, если ячейка в первом столбце непустая)

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

Имени график назначена формула =СМЕЩ(платежи!$A$1;0;0;платежи!$H$5+2;5)

 

 

 

Вложения:

DynamicTable.xls64 КБ

Заполняем документы в Microsoft Word при помощи Python. Часть 1 / Хабр

Небольшая вводная


Начиная с 21 декабря 2016 года вступили изменения в ФЗ РФ «О противодействии легализации (отмыванию) доходов, полученных преступным путем, и финансированию терроризма», касательно обязанности юридического лица по раскрытию информации о своих бенефициарных владельцах. В связи с этим, многие компании направляют запросы по цепочке владения с целью выяснения своих бенефициарных владельцев. Кто-то формирует запросы на бумаге, кто-то рассылает электронные письма.

На наш взгляд, надлежащим доказательством исполнения обязанности «знай своего бенефициарного владельца» является наличие письма на бумаге с отметкой об отправке/вручении. Данные письма в идеале должны готовиться не реже одного раза в год. Если в ведении юриста находится всего несколько компаний, то составление писем не составляет особого труда. Но, если компаний больше 3-х десятков, составление писем превращается в уничтожающую позитив рутину. Дело усугубляется тем, что реквизиты писем постоянно меняются: подписанты увольняются, компании перерегистрируются, меняя адреса. Все это надо учитывать. Как здесь могут помочь навыки программирования на python?


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

Структура письма в word. Модуль python docxtpl


Перед написанием кода программы посмотрим как должен выглядеть шаблон письма, в который мы будем помещать наши данные.

Текст письма от общества своему участнику/акционеру будет примерно следующим:

Напишем простую программу, которая заполнит для начала одно поле в нашем шаблоне, чтобы понять принцип работы.

Для начала в самом шаблоне письма Word вместо одного из полей, например, подписанта поставим переменную. Данная переменная должна быть на либо на англ. языке, либо на русском, но в одно слово.Также переменная должна быть обязательно заключена в двойные фигурные скобки. Выглядеть это будет примерно так:

Сама программа будет иметь следующий вид:

from docxtpl import DocxTemplate
doc = DocxTemplate("шаблон.docx")
context = { 'director' : "И.И.Иванов"}
doc.render(context)
doc.save("шаблон-final.docx")


Вначале мы импортируем модуль для работы с документами формата Word. Далее мы открываем шаблон, и в поле директор, которое бы обозначили ранее в самом шаблоне, вносим ФИО директора. В конце документ сохраняется под новым именем.

Таким образом, чтобы заполнить все поля в файле-шаблоне Word нам для начала необходимо определить все поля ввода в самом шаблоне скобками {} вместе с переменными и потом написать программу. Код будет примерно следующим:

from docxtpl import DocxTemplate
doc = DocxTemplate("шаблон. docx")
context = { 'emitent' : 'ООО Ромашка', 'address1' : 'г. Москва, ул. Долгоруковская, д. 0', 'участник': 'ООО Участник', 'адрес_участника': 'г. Москва, ул. Полевая, д. 0', 'director': 'И.И. Иванов'}
doc.render(context)
doc.save("шаблон-final.docx")


На выходе при исполнении программы мы получим готовый заполненный документ.

Скачать готовый шаблон Word можно здесь.

Функция ПОДСТАВИТЬ — служба поддержки Майкрософт

Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel для Интернета Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2019 для Mac Excel 2016 Excel 2016 для Mac Excel 2013 Excel 2010 Excel 2007 Excel для Mac 2011 Excel Starter 2010 Дополнительно… Меньше

В этой статье описаны синтаксис формулы и использование функции ПОДСТАВИТЬ в Microsoft Excel.

Описание

Заменяет новый_текст на старый_текст в текстовой строке. Используйте ПОДСТАВИТЬ, если вы хотите заменить определенный текст в текстовой строке; используйте REPLACE, если вы хотите заменить любой текст, который встречается в определенном месте в текстовой строке.

Синтаксис

ПОДСТАВИТЬ(текст, старый_текст, новый_текст, [номер_экземпляра])

Синтаксис функции ПОДСТАВИТЬ имеет следующие аргументы:

  • Текст     Обязательный. Текст или ссылка на ячейку, содержащую текст, для которого вы хотите заменить символы.

  • Старый_текст     Обязательный. Текст, который вы хотите заменить.

  • New_text     Обязательный. Текст, которым вы хотите заменить old_text.

  • org/ListItem»>

    Номер_экземпляра     Необязательно. Указывает, какое вхождение old_text вы хотите заменить новым_текстом. Если вы укажете instance_num, будет заменен только этот экземпляр old_text. В противном случае каждое вхождение old_text в тексте заменяется на new_text.

Пример

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

Данные

Данные о продажах

<

1 квартал 2008 г.

<

1 квартал 2011 г.

<

Формула

Описание (Результат)

Результат

=ЗАМЕНИТЬ(A2, «Продажи», «Стоимость»)

Заменяет себестоимость продаж (данные о затратах)

Данные о затратах

=ЗАМЕНИТЬ(A3, «1», «2», 1)

Заменяет первый экземпляр «1» на «2» (2-й квартал 2008 г. )

2 квартал 2008 г.

=ЗАМЕНИТЬ(A4, «1», «2», 3)

Заменяет третий экземпляр «1» на «2» (1 квартал 2012 г.)

1 квартал 2012 г.

См. также

ЗАМЕНИТЬ, ЗАМЕНИТЬB функции

Функция ТРИМ

Использование списка в Excel для замены слов в документе Word — нужно выбрать и вставить, а не ЗАМЕНИТЬ

Задавать вопрос

спросил

Изменено
3 года, 1 месяц назад

Просмотрено
2к раз

У меня есть таблица с двумя столбцами. Один со словами поиска, а другой со словами замены. Этот код работает через столбец лесов поиска и ищет их по одному в Word. Когда он находит совпадение, он заменяет его соответствующей записью в столбце слов замены.

Код ниже и его много.

Я собрал это вместе со многих онлайн-ресурсов… это код Франкена, и мне очень жаль.

Прямо сейчас

 Общедоступная подпрограмма WordFindAndReplace()
    Dim ws как рабочий лист, msWord как объект, itm как диапазон
    Dim ObjData как новый MSForms.DataObject
    Тусклый текст
    Установите ws = ThisWorkbook.Sheets("Ввод")
    Установите msWord = CreateObject("Word.Application")
    С MSWord
        .Видимый = Истина
        .Documents.Open ThisWorkbook.Path & "\keith.docm"
        .Активировать
        С .ActiveDocument.Content.Find
            '.ClearFormatting
            '.Replacement.ClearFormatting
            Для каждого элемента в ws.Range("Checklist1[PolicyIdentifier]").Cells
                .Text = itm.Value2 'Найти все строки в столбце F
                strText = itm. c"
                    .MatchCase = Ложь
                    .MatchWholeWord = Ложь
                    .Execute replace:=2 'wdReplaceAll (перечисление WdReplace)
            Следующий
        Конец с
        '.Выйти из SaveChanges:=True
    Конец с
Конец сабвуфера
 9c" уже извлекается из буфера обмена - все в порядке. Но я хочу вставить его напрямую. M All Ears. 

  • Microsoft-Excel
  • Microsoft-Word
  • VBA

Ваш код сохраняет значение для буфера обмена без какого-либо форматирования. Просто копируйте вместо Itm.offset (1) .copy . (Удалить strText = itm.Offset(, 1).Value2 и 9c" ).

Для вставки в Word используйте Selection.PasteExcelTable False, False, False или Selection.PasteAndFormat wdFormatOriginalFormatting . PasteExcelTable и PasteAndFormat — это методы Word, поэтому вам нужно добавить ссылку. Откройте Excel . Откройте редактор Visual Basic. Нажмите «Инструменты» > «Ссылки». Прокрутите вниз и выберите «Библиотека объектов Microsoft Word 16.0».

Использовать цикл вместо . .Выполнять Если .Found = True, то Selection.PasteAndFormat wdFormatOriginalFormatting Цикл до тех пор, пока .Found = False

1

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.