Генерация документов по шаблону excel

Опубликовано:

18 марта 2010 в 14:52

13

20

Очень часто при автоматизации бизнес процессов требуется формировать электронные документы на основе структурированных данных. Источником структурированных данных обычно являются справочники системы DIRECTUM. Потребность формирования электронных документов
возникает по следующим причинам:

  • Электронный документ — удобное представление для согласования информации. Возможность отображать данные из нескольких источников данных;
  • Возможность установки ЭЦП — дополнительная защита результатов согласования;

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

  • Высокая трудоемкость разработки, которая обычно связана с необходимостью программирования визуальной части отчета. Это относится к rtf и Excel/html отчетам в системе DIRECTUM.
  • Шаблон отчета находится в разработке, что не позволяет пользователям системы изменять настройку представления. Например, заказчики часто хотят добавлять в отчеты, генерируемые системой, свой логотип.

Предлагаю использовать альтернативный вариант формирования электронных документов на основе Excel шаблона, который решает описанные выше недостатки. Механизм основан на возможности Excel использовать элементы присоединенной XSD схемы данных для разметки
шаблона. Возможность доступна начиная с версии Excel 2003.

Приведу пример разметки шаблона документа «Выписка по счету» в Excel 2007. Путь до опции подключения XSD схемы данных: Вкладка разработчик(на риббоне)ИсточникКарты XML…Добавить. Откроется диалоговое окно для выбора файла с описанием схемы данных. После
подключения схемы в разделе «Источник XML» появится элементы подключенной XSD схемы, которые можно перенести в любую ячейку шаблона:

 

XSD схема – это обычный XML файл, в котором описаны элементы данных. XSD схема для приведенного примера выглядит следующим образом:

  

Для формирования XSD схемы рекомендую использовать инструменты Visual Studio 2008, но можно сделать и в обычном текстовом редакторе.

После того, как шаблон настроен и выполнена разметка полей данных его можно сохранить в системе и в установки вынести параметр, к которому можно будет привязаться в разработке ISBL. Для того, чтобы программно создать электронный документ на основе настроенного
шаблона, нужно сделать следующее:

1. Подготовить XML файл с данными, соответствующий подключенной XSD схеме шаблона. XML данные для описанной в примере XSD схемы будут выглядеть следующим образом:

Формирование XML документа на ISBL нужно выполнить с помощью библиотеки msxml.dll:

…
REPORT_NAME = “ВыпискаПоСчету_карта” 
XMLDocument = CreateObject("MSXML.DOMDocument")
ProcInstruction = XMLDocument.CreateProcessingInstruction("xml"; 'version="1.0" encoding="windows-1251" standalone="yes"')
XMLDocument.appendChild(ProcInstruction)
RootElement = XMLDocument.CreateElement(REPORT_NAME)
XMLDocument.appendChild(RootElement)
…

2. Получить шаблон документа и экспортировать его на диск.

…
TemplateID = Конст(‘xxx’)
Template = Edocuments.GetObjectByID(TemplateID)
Template.Export(VersionNumber; Path; FALSE)
…

3. Открыть экспортированный шаблон в Excel и передать в него подготовленные данные:

…
Excel = CreateObject("Excel.Application")  
Book = Excel.WorkBooks.Open(Path)
Sheet = Book.WorkSheets(1)
// Загрузка данных в Excel
XmlMap = Book.XmlMaps(REPORT_NAME)
XmlMap.ImportXML(XMLDocument.xml)
Book.Save
Book.Close
Excel.Quit
…

4. При необходимости открыть документ для просмотра либо сразу сохранить документ в хранилище системы DIRECTUM.

Пример сформированного документа «Выписка по счету»:

Кроме экспорта данных в шаблон Excel можно выполнить и обратное действие – импортировать данные из полей разметки шаблона. Т.е. в этом сценарии работы шаблон Excel будет выступать в качестве электронной формы для ввода данных, которые можно будет импортировать
в систему DIRECTUM.

scheme.zip (531,00 байт)


Платные консультации: +7 (926) 035-76-35


Написать : mailbox@seo-excel.ru

Описание

Генератор документов позволяет создавать много документов по шаблону в один клик. Шаблон это обычный .docx в котором в нужных местах расставлены шорткоды. Вот его и указываем. А в Excel у нас табличка со значениями каждого шорткода для каждого документа.

Создаем Шаблон


GIF

Открываем наш документ и оставляем в нем только повторяющийся во всех будущих экземплярах текст. Расставляем в нашем документе шорткоды. Для этого:

  • 1) Кликнем на пустое место
  • 2) Вставка -> Экспресс блоки -> Поле
  • 3) Выберем тип поля MergeField
  • 4) Назовем его как нам нужно
  • 5) Вставим его и сохраним шаблон в формате .docx

Генерируем документы


GIF

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

Как установить?

Инструмент Генератор документов это часть SEO-Excel

Смотреть видео

Компонент Выгрузка документов позволяет создать некий шаблон Excel или Word, вставить в него параметры вида {tableN.colName} и затем по кнопке генерировать файлы из шаблона.

Выполняется некий запрос (возвращающий несколько SELECT), эти данные передаются в обработчик, который подставит их в файл-шаблон и выдаст ссылку на новый файл пользователю. 

Т.е. задача разработчика заключается в следующем: 

  • подготовить SQL запрос извлечения данных,
  • подготовить шаблон файла с параметрами, соответствующими данным из запроса.

Пример выгрузки документов Excel и Word

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

Сниппет
<a href="#" class="as-doc" data-code="code" data-itemid="123" title="Генерация документа Акта"><i class="fa fa-file-text"></i>
</a>

Должен быть создан элемент Документа в БД (раздел Выгрузка документов) с элементами: 

  • Код — является частью названия хранимой процедуры извлечения данных, а также названием шаблона документа. 
  • Название — участвует в формировании названия выходного файла 
  • Тип — Word или Excel
  • Роли — какие роли имеют доступ к документу. 

Далее создаем хранимую процедуру с именем doc_{code}_getData, которая возвращает наборы данных (несколько select).

ALTER PROCEDURE [dbo].[doc_testWord_getData]
   @username nvarchar(64),
   @itemID int,
   @urlParameters CRUDFilterParameter READONLY
AS
BEGIN
  select 1 Result, '' msg, '8000' TableWidth, '2500,1000,3500' ColWidths, '999999' TableHeaderBackColor, 'Акт-{g}' FileName

	select 'ИП Федоров А.И.' customer, '241' docNum, '10 ноября 2019г.' date,
    	'Договор №3 от 01 ноября 2019г.' parentDoc,
        '550 (пятьсот пятьдесят) рублей' propis,
        'Индивидуальный предприниматель' customerPost,
        'Федоров Алексей Иванович' customerFIO,
         '2019' year

	select 'Покраска стен' as 'Работы', 12 as 'Метры', 250 as 'Стоимость'
    union
    select 'Укладка ламината',20, 300

END

Подготавливаем шаблон файла Экспорта. Он находится по адресу /uploads/doc-templates/{code}.docx (или xlsx). 
ВАЖНО. Файлы шаблонов должны быть именно в docx и xlsx (а не doc и xls).

Описание параметров SELECT 1:
1. TableWidth (только для word) — ширина таблиц в документе Word (по умолчанию 9600).

2. TableFontSize (по умолчанию 24, что соответствует шрифту в 12pt) — размер шрифта в таблицах. 

3. ColWidths (только для word) — ширины столбцов таблицы через запятую (по умолчанию ширина столбца в таблице 2000)
4. TableHeaderBackColor (только для word) — цвет шапки таблицы (по умолчанию f9f9f9).
5. FileName — название выходного файла (с использованием латинских букв!). может содержать дополнительные псевдопараметры: {g} — вставка 4 символов guid, {date} — вставка даты. Если имя не указано, то оно будет таким
{code}-{g}.xlsx
6. ShowTableHeader (только для Excel) — если 1, то показываемая таблица добавляется вместе с заголовком.

В шаблоне используем следующие поля для вставки данных:

  • {table2} — вставить целиком вторую таблицу (table2 соответствует третьему select. Первый SELECT служебный. поэтому нумерация начинается со второго селекта по данным).

  • {table2.title} — вставить значение колонки title из 1 строки второго набора (SELECT 2).  (также можно {table1.title.text}).

  • {table2.code1.img} — вывести картинку.
  • {table2.code1.ul} и {table2.code1.ol} — вывести ненумерованный и нумерованный список (при этом в поле SQL значения будут перечислены через ||). 

Примечание:

  • Если используются картинки в шаблоне, то могут быть проблемы с открытием файла (Невозможно открыть файл) в старых версиях Word (2003, 2007). 
  • Если данных по таблице нет — то она не будет выводиться и шаблон {tableN} заменится на пустую строку.


Пример Xlsx: S

{step1}

{table1.total}

C1

D1

A2

B2

C2

D2

A3

{table2}

C3

D3

A4

B4

C4

D4

A5

B5

C5

D5

A6

B6

{table1}

D6

A7

B7

C7

D7

Примечание

  1. Для шаблона Docx любые коды вставлять только через буфер обмена из блокнота (и не редактировать в Word). Это связано с особенностью хранения в Word структуры XML в виде P, run и text тегов. Для таблиц ({table1}) — обязательно только один элемент должен быть в строке (без дополнительного текста). Если где-то не срабатывает шаблон — попробуйте вставить полный кусок текста с параметрами прямо из блокнота 
  2. При генерации документов сохраняется лог, кто, когда создавал файлы со ссылкой на сформированный файл. 
  3. Генерируемые файлы находятся по адресу /uploads/doc/{code} + в название добавляется суффикс miniGuid.
  4. Если необходимо проверить более детально права на формируемый документ — это можно сделать прямо в хранимой процедуре GetData на основе username и itemID.
  5. Также вы можете генерировать документы через Внешнее действие generatedoc (при этом дополнительные данные передаются в GetData процедуру через параметр ExtendedDictionaryParameter @parameters). См. подробнее про Внешние действия.
  6. Выходные данные из SELECT лучше сразу приводить к строке в явном виде и обрабатывайте ситуацию с null (через isnull).

Как вставлять картинки в генерируемый Excel 

Для этого параметры указываем с префиксом img_ 

Пример: 

select  '{"path": "/uploads/5.jpg", "name":"Name11",   "height": 50, "width": 200,
            	"barcode":{ "value": "123", fontSize: 45, font: "", backColor: "white", "width": 200, "height": 50 } }' as img_col1 

В файле Excel указываем {table1.img_col1}. 

В этом месте выведется указанная картинка (либо сгенерированный штрихкод). 

Параметры: 

  • path — путь к файлу
  • name — наименование объекта в Excel
  • height, width — размер картинки (например 200, 300)
  • scale — указывает масштаб вывода картинки (например 0.5)
  • barcode — настройка для генерации штрихкода (в этом случае path можно оставить пустым). Его параметры:
    • value — что кодируем в штрихкоде
    • fontSize — размер выводимого штрихкода
    • font — название спецшрифта для вывода штрихкода, например font39. 
    • backColor — какой будет фон у штрихкода (white, yellow и т.д.)
    • width, height — размеры картинки штрихкода. 
  • barcode2 — альтернативный вариант генерации (через дополнительную библиотеку, а не шрифт на сервере). Его параметры:
    • value — что кодируем в штрихкоде
    • pureCode — bit. Если 0, то с кодом будет внизу выводиться сама закодированная строка. Если 1 — то выводится только сам штрихкод.
    • width, height — размеры картинки штрихкода. 
    • format  — формат генерации штрихкода (по умолчанию CODE_128). 
    • margin — отступ для кода, по умолчанию 10.
    • gs1Format — bit, если 1, то будет значение декодировано по GS1 стандарт (по умолчанию  false).

Возможные варианты barcode2.format: 

AZTEC, Aztec 2D barcode format.
CODABAR, CODABAR 1D format.
CODE_128, Code 128 1D format.
CODE_39, Code 39 1D format.
CODE_93, Code 93 1D format.
DATA_MATRIX, Data Matrix 2D barcode format.
EAN_13, EAN-13 1D format.
EAN_8, EAN-8 1D format.
ITF, ITF (Interleaved Two of Five) 1D format.
MAXICODE, MaxiCode 2D barcode format.
PDF_417, PDF417 format.
QR_CODE, QR Code 2D barcode format.
RSS_14, RSS 14
RSS_EXPANDED, RSS EXPANDED
UPC_A, UPC-A 1D format.
UPC_E, UPC-E 1D format.
UPC_EAN_EXTENSION, UPC/EAN extension format.

Примечание: 

  • Для параметра barcode должен быть установлен (открыть файл ttf и кнопка Установить) шрифт font39 на сервере или другой аналогичный шрифт для вывода штрихкодов.  Шрифт есть в папке /content/fonts. После установки шрифта нужно перезагрузить IIS на сервере.
  • Параметр barcode2 используйте, когда нет возможности установить шрифт на сервере (например, это win хостинг).

Проблема. Иногда «съедаются» пробелы в документе рядом с параметрами. 

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

select name + char(0x000000A0) name

Другие специальные коды можно посмотреть здесь — https://www.compart.com/en/unicode/U+00A0

Falcon Space — функциональная веб-платформа разработки на узком стеке MS SQL/Bootstrap. Вводная по Falcon Space

Насколько полезной была статья?

Google поиск по нашей документации

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

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

На выходе получаются заполненные файлы исходного формата, или формата PDF.
Возможно формирование писем по шаблону, с последующей рассылкой через Outlook или TheBAT.

  • Количество шаблонов не ограничено. Вы легко можете сами настраивать любые шаблоны.
    В качестве шаблонов могут выступать файлы Excel (XLS, XLSX и др.), документы Word (DOC, DOCX и др.), а также текстовые документы (расширения TXT, DAT, XML и т.д.).
  • Гибкая настройка имён создаваемых файлов. Можно раскладывать файлы по подпапкам.
  • Подстановка таблиц и картинок (фото, печатей, подписей и т.п.) в заполняемые документы.
  • Склонение фамилий, дата и сумма прописью, — дополнительные функции обработки данных.
  • Рассылка почты (писем с вложениями) через TheBAT! или Outlook. Можно формировать красивые HTML-письма
  • Есть возможность формировать один документ по нескольким строкам исходной таблицы.
    (вывести список сотрудников в приказ, список товаров в накладную, и т.д.).
  • Можно выбирать шаблоны для заполнения в диалоговом окне
    (или даже программа будет сама брать нужные шаблоны для разных строк)
  • Подстановка данных в надписи и колонтитулы шаблонов Word.

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

Более подробно всё это описано в разделе Справка по программе

Генерация документов и отчетов из реестра или базы данных Excel с помощью кода VBA для просмотра, анализа и вывода на печать. Создание, заполнение, удаление.

Нет смысла хранить множество документов и отчетов в отдельных файлах, если существуют реестры и базы данных Excel, в которых уже есть вся необходимая информация. Каждый документ или отчет можно сгенерировать с помощью кода VBA в виде временного файла, просмотреть его, проанализировать, распечатать. Затем удалить его, а при необходимости сформировать снова.

Создание документа или отчета из шаблона

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

Шаблон создаем вручную на отдельном рабочем листе или с помощью кода VBA при заполнении документа. Способы создания шаблона определяют место его хранения:

  • В коде VBA. Такой способ возможен для несложных печатных форм.
  • В рабочей книге Excel с реестром или базой данных на скрытом листе.
  • В отдельном файле, который не обязательно сохранять как шаблон Excel (*.xlt*).

Я предпочитаю создавать шаблон вручную и хранить его на скрытом листе в книге с реестром или базой данных. Такой способ подходит для подавляющего большинства случаев.

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

Назовем лист с шаблоном документа или отчета — «Shablon». Для создания новой печатной формы скрытый лист с шаблоном необходимо скопировать:

With Worksheets(«Shablon»)

  .Visible = True

  .Copy After:=Worksheets(Worksheets.Count)

  .Visible = False

End With

Данный код вставит новый лист с шаблоном в ту же книгу после всех имеющихся листов. Чтобы шаблон скопировать в новую книгу, заменяем строку .Copy After:=Worksheets(Worksheets.Count) на .Copy. Печатная форма откроется в новом файле.

Сразу после создания, обращаться к новому листу можно как к активному (ActiveSheet), даже в том случае, если он скопирован в новую книгу. Чтобы воспользоваться этой возможностью, порядок действий в программе должен быть следующим:

  1. Копирование информации в переменную массива из реестра или базы данных.
  2. Создание нового документа или отчета из шаблона.
  3. Заполнение документа или отчета, обращаясь к нему как к ActiveSheet.

Копирование информации и заполнение формы

Копирование информации

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

Если информация нужна из одной строки, перед запуском кода VBA следует выделить любую ячейку в строке с данными. Тогда в ходе выполнения программы можно будет определить номер строки по активной ячейке и извлечь из нее информацию.

Допустим, что лист называется «Reestr», а необходимая информация расположена в десяти первых ячейках каждой строки:

Dim nomer As Long, massiv() As Variant

nomer = ActiveCell.Row

massiv = Range(Cells(nomer, 1), Cells(nomer, 10))

Если для отчета требуется информация из нескольких строк, можно выделить их вертикально по любому столбцу и использовать следующий код:

Dim nomer1 As Long, nomer2 As Long, massiv() As Variant

nomer1 = Selection.Cells(1).Row

nomer2 = Selection.Cells(Selection.Cells.Count).Row

massiv = Range(Cells(nomer1, 1), Cells(nomer2, 10))

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

Если требуется обработка данных для отчета, проводим ее в массиве. Для результатов обработки можно объявить еще одну переменную массива.

Создание и заполнение формы

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

Заполняем ячейки печатной формы информацией из массива, обращаясь к листу с формой как к ActiveSheet. Если новый документ или отчет создан в той же книге, ее можно автоматически сохранить:

Чтобы не наблюдать за мерцаниями экрана во время выполнения процедуры VBA Excel, можно временно отключить его обновления:

Sub GeneratsiyaDokumenta()

Application.ScreenUpdating = False

операторы

Application.ScreenUpdating = True

End Sub

Удаление печатной формы

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

Для этого необходимо на лист шаблона правее печатной формы вставить кнопку из коллекции «Элементы управления ActiveX». Дважды кликнуть по ней и в открывшемся модуле листа внутрь автоматически сгенерированного объявления процедуры вставить строку Call UdaleniyeLista:

Sub CommandButton1_Click()

  Call UdaleniyeLista

End Sub

Затем в модуль текущей книги добавляем процедуру:

Sub UdaleniyeLista()

  Application.DisplayAlerts = False

    ActiveSheet.Delete

  Application.DisplayAlerts = True

End Sub

Кнопка вместе с шаблоном будет копироваться в новую печатную форму. При нажатии кнопки активный лист будет удаляться кодом VBA без предупреждения от Excel.

Понравилась статья? Поделить с друзьями:
  • Генерация артикулов в excel
  • Генератор случайных чисел формулы excel
  • Генератор случайных чисел на vba в excel
  • Генерация word файла python
  • Генерация word документов по шаблону