Генерация документов Docx и Xlsx. Выгрузка Excel, Word по шаблону
Компонент Выгрузка документов позволяет создать некий шаблон 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
ВАЖНО. Файлы шаблонов должны быть именно в docx и xlsx (а не doc и xls).
Описание параметров SELECT 1:
1. TableWidth (только для word) - ширина таблиц в документе Word (по умолчанию 9600).
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 |
Примечание
- Для шаблона Docx любые коды вставлять только через буфер обмена из блокнота (и не редактировать в Word). Это связано с особенностью хранения в Word структуры XML в виде P, run и text тегов. Для таблиц ({table1}) - обязательно только один элемент должен быть в строке (без дополнительного текста). Если где-то не срабатывает шаблон - попробуйте вставить полный кусок текста с параметрами прямо из блокнота
- При генерации документов сохраняется лог, кто, когда создавал файлы со ссылкой на сформированный файл.
- Генерируемые файлы находятся по адресу /uploads/doc/{code} + в название добавляется суффикс miniGuid.
- Если необходимо проверить более детально права на формируемый документ - это можно сделать прямо в хранимой процедуре GetData на основе username и itemID.
- Также вы можете генерировать документы через Внешнее действие generatedoc (при этом дополнительные данные передаются в GetData процедуру через параметр ExtendedDictionaryParameter @parameters). См. подробнее про Внешние действия.
- Выходные данные из 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
Google поиск по нашей документации
- Руководства
- Основа Falcon Space
- Основные компоненты
- Возможности
- Коммуникация с пользователем
- Дизайн, стилизация
- API, Интеграции
- Каталоги
- Навигация
- Документы Импорт-экспорт на сайте через Excel Генерация документов Docx и Xlsx. Выгрузка Excel, Word по шаблону Таблица. Стилизация Excel при выгрузке таблицы в MS Excel Проверка орфографии в тексте через Яндекс Speller Как создать выгрузку документа в Excel через форму с последующей загрузкой на Google Disk и скачиваем в формате PDF Интеграция с Google Drive API
- Дополнительные компоненты
- Продвижение, SEO
- Системные моменты
- HOWTO
- HOWTO Таблицы
- HOWTO Формы
- Работа с SQL
- HOWTO JS
- HOWTO Верстка
- Решение проблем
Falcon Space
Это снижение стоимости владения
за счет меньшего количества людей для поддержки и узкого стека разработки. Про снижение стоимости владения продуктом
Это быстрое внесение изменений
по ходу эксплуатации программы. Как создается функционал на платформе
Это простой удобный интерфейс
адаптация под мобильные устройства. Про юзабилити платформы