Разработчиком данного модуля является АКРИТ
-
Подходящие редакции 1С-Битрикс:
Старт, Стандарт, Малый бизнес, Бизнес -
Включает в себя:
Модуль -
Категории:
Инструменты, Интеграция, Другое, Контент-менеджеру, Другое
-
Название компании-партнера:
АКРИТ -
Последняя версия:
13.0.0 -
Дата обновления:
06.04.2023 -
Дата публикации:
03.06.2022 -
Число установок:
100 — 499 раз -
Адаптивность:
Нет -
Поддержка композита:
Нет -
Совместимо с Сайты24:
Нет
Основные возможности модуля:
Поддержка форматов XLS, XLSX, CSV
Профили экспорта. Вы можете создать множество профилей под разные инфоблоки.
Выбор полей и свойств элементов инфоблока для экспорта.
Выгрузка данных о разделах.
Поддержка пользовательских свойств разделов.
Экспорт всех полей и свойств торговых предложений.
Экспорт ссылок на элементы.
Выгрузка цен и остатков товара.
Возможность разбивки прайс-листа по разделам каталога.
Возможность настраивать шапку Excel-файла.
Настройка фильтрации и сотрировки выгружаемых данных.
Возможность разбивки прайса на несколько листов с поддержкой экспорта данных из разных инфоблоков.
Возможность выгрузки файла в Битрикс24.
Задачи, решаемые модулем:
1) Создание прайс-листа для клиентов.
2) Экспорт данных для обработки и последующего импорта.
Сравните возможности различны
х редакций экспорта
Перед установкой обязательно ознакомьтесь с разделом важные ограничения в конце описания.
Попробуйте бесплатно
Бесплатная демо-версия модуля будет работать 15 дней и позволит выгрузить до 50 товаров. Есть другие версии модуля экспорта — они дороже, но и возможностей в них больше.
Важные ограничения!
-
В Демо-режиме количество товаров в одном профиле выгрузки ограничено 50-ю товарами.
-
В редакциях Первый сайт, Старт, Стандарт и Эксперт не будут работать условия. Функционал условий требует наличия модуля Торговый каталог, которого в этих редакциях нет.
-
Гарантирована совместимость только на актуальных версиях обновлений Битрикс Управление сайтом. Теоретически модуль должен работать на версиях Битрикса, начиная с версии 14.0.8, но, учитывая, что тестировать решение на всех предыдущих версиях не целесообразно, мы поддерживаем полную совместимость только на стабильных версиях продуктов.
-
При отсутствии предоставления доступа к сайту бесплатная техподдержка не оказывается.
- Возврат денежных средств за приобретенные решения не предусмотрен законодательством РФ, так как это не товар или услуга, а право пользования.
- Настройка сервера клиента и устранение ошибок стандартных тестов системы 1С-Битрикс проводятся на платной основе. Внимательно читайте предупреждения, появляющиеся перед установкой модуля. Тесты сайта должны проходить без ошибок.
- Ограниченная Лицензия (активная лицензии модуля с закончившимся сроком действия) предоставляет Пользователю право на использование тех функциональных возможностей Приложения, которые были предоставлены ему в рамках Стандартной Лицензии, за исключением права на получения новых версий (обновлений) Приложения, Технической поддержки и работы профилей выгрузки в автоматическом и многопоточном режиме.
Покупка и лицензирование
Купить 7 000 руб.
Продлить 3 500 руб.
Попробовать (14 дней)
Решение позволяет производить экспорт/импорт товаров, торговых предложений и разделов инфоблока в Excel, а также экспорт/импорт highload-блоков.
Поддерживаемые форматы файлов для экспорта: CSV, XLS, XLSX.
Поддерживаемые форматы файлов для импорта: CSV, XLS, XLSX, XLSM, HTML, DBF.
В данном решении объединены 2 наших модуля:
Импорт из Excel
Экспорт в Excel
Доступные поля товаров для экспорта/импорта.
- Все стандартные поля элемента инфоблока (название, описания, картинки и.д.).
- Все свойства элемента инфоблока (включая множественные свойства, картинки, свойства типа «Список», «Справочник», «Привязка и элементам инфоблока», «Привязка к разделам инфоблока» и т.д.).
- Доступное количество товара, остатки на складах, все типы цен и прочие поля торгового каталога.
- SEO-поля.
- Скидки (размер скидки в процентах или в валюте, начало и и окончания действия скидки и прочие поля).
- Наборы, комплекты.
- Все поля торгового предложения.
- Привязка к разделам.
Доступные поля разделов для экспорта/импорта.
- Все стандартные поля раздела инфоблока (название, описания, картинки и.д.).
- SEO-поля.
- Все пользовательские поля раздела.
Дополнительные возможности модуля:
- Выбор необходимых полей товара, торгового предложения или раздела для экспорта или импорта.
- Экспорт или импорт по крону.
- Создание профилей экспорта/импорта для хранения настроек.
- Экспорт/импорт нескольких листов Excel-файла.
- Создание прайс-листа с произвольными полями в формате xlsx (с возможностью добавить произвольную шапку файла, настроить стили, вставить картинки в файл и т.д.)
- Возможность фильтрации выгружаемых в файл данных.
- Импорт произвольного Excel-файла от поставщика.
- Выбор поля или полей для для поиска и обновления существующих товаров и разделов при импорте.
- Массовый загрузчик изображений на сайт.
- Импорт файлов с локального компьютера, из папки на сайте, с удаленного сайта (с возможностью авторизации на удаленном сайте), с FTP-сервера, c Email-адреса.
- Возможность задать скидку или наценку на загружаемые цены.
- Возможность преобразования значений при импорте (можно загрузить составное значение из нескольких ячеек файла, удалить подстроку, сделать замену символов, округлить значение и т.д.)
- Настройка действий над отсутствующими товарами при импорте (можно деактивировать отсутствующие товары, обнулить остатки, задать произвольное значение любого свойства и т.д.).
- Деактивация пустых разделов после импорта.
- Массовое создание свойств перед импортом.
- Статистика импорта.
Видео-инструкции по экспорту.
1) Основные возможности модуля:
2) Пример создания прайс-листа с автоматическим обновлением:
3) Настройка фильтрации выгружаемых данных:
Видео-инструкции по импорту.
1) Основные возможности модуля —
2) Общая инструкция по импорту разделов (с возможностью привязки элемента к нескольким разделам) —
3) Импорт файлов с разделами в отдельных строках —
4) Импорт разделов без элементов —
5) Инструкция по загрузке торговых предложений
6) Загрузка дополнительных полей (которых нет в файле) —
7) Импорт прайсов разных поставщиков с деактивацией товаров —
Импорт цен и остатков —
9) Импорт множественных свойств и описаний к свойствам —
10) Загрузка изображений —
11) Импорт свойств, заданных в одной ячейке через разделитель —
12) Импорт с Email-адреса и с ftp по крону —
13) Массовое создание свойств —
Если при импорте у Вас меняются адреса страниц элементов и разделов, то используйте наше решение для автоматического создания редиректов
Решение «Экспорт в Excel. Выгрузка каталога товаров»
Модуль для «1С-Битрикс: Управление сайтом» позволяет экспортировать элементы инфоблока (товары) в Excel-файл.
Основные возможности модуля
- Поддержка форматов XLS, XLSX, CSV
- Профили экспорта. Вы можете создать множество профилей под разные инфоблоки.
- Выбор полей и свойств элементов инфоблока для экспорта.
- Выгрузка данных о разделах.
- Поддержка пользовательских свойств разделов.
- Экспорт ссылок на элементы.
- Выгрузка картинок в xlsx-файлах.
- Выгрузка цен и остатков товара.
- Возможность разбивки прайс-листа по разделам каталога.
- Настройка стилей текста для xlsx-файлов.
- Возможность настраивать шапку Excel-файла.
- Настройка фильтрации и сотрировки выгружаемых данных.
- Возможность разбивки прайса на несколько листов с поддержкой экспорта данных из разных инфоблоков.
Популярные задачи, решаемые модулем
- Создание прайс-листа для клиентов.
- Экспорт данных для обработки и последующего импорта.
Цена решения
Купить в Маркетплейсе: 2 500 руб.
Другие наши решения
Импорт из Excel
Сортировка множественных свойств инфоблока
- Регистрация
- 02.06.21
- Донат
- 50.00 ₽
- Сообщения
- 5,051
- Симпатии
- 618
- Веб-сайт
- itnull.info
- Друг форума
- Программист
- Автор темы
- Администратор
- Модер.
- Команда форума
-
#1
ITnull добавил(а) новый ресурс:
Экспорт/Импорт товаров в Excel | esol.importexportexcel — Экспорт/Импорт товаров в Excel | esol.importexportexcel
Решение позволяет производить экспорт/импорт товаров, торговых предложений и разделов инфоблока в Excel, а также экспорт/импорт highload-блоков.
Поддерживаемые форматы файлов для экспорта: CSV, XLS, XLSX.
Поддерживаемые форматы файлов для импорта: CSV, XLS, XLSX, XLSM, HTML, DBF.Доступные поля товаров для экспорта/импорта.
1) Все стандартные поля элемента инфоблока (название, описания, картинки и.д.).
2) Все свойства элемента инфоблока (включая множественные свойства, картинки, свойства…
Узнать больше об этом ресурсе…
- Регистрация
- 02.06.21
- Донат
- 50.00 ₽
- Сообщения
- 5,051
- Симпатии
- 618
- Веб-сайт
- itnull.info
- Друг форума
- Программист
- Автор темы
- Администратор
- Модер.
- Команда форума
-
#2
- Регистрация
- 02.06.21
- Донат
- 50.00 ₽
- Сообщения
- 5,051
- Симпатии
- 618
- Веб-сайт
- itnull.info
- Друг форума
- Программист
- Автор темы
- Администратор
- Модер.
- Команда форума
-
#3
ITnull обновил(а) ресурс Экспорт/Импорт товаров в Excel | esol.importexportexcel новой записью:
2.6.5 (04.11.2021)
Экспорт.
1) Добавлено условие «от-до» для числовых значений в преобразованиях.
2) Устранен ряд ошибок под php8.
3) Ускорена фильтрация по полям торговых предложений.
4) Устранена ошибка удаления старых настроек поля.
5) Исправлена ошибка экспорта удаленных картинок.
Импорт.
1) Добавлено условие «от-до» для проверки числовых значений в преобразованиях.
2) Исправлен ряд ошибок под php8.
3) Доработан вывод ошибок в php-преобразованиях.
4) Исправлены ошибки в css-стилях.
Узнать больше об этом обновлении…
- Регистрация
- 02.06.21
- Донат
- 50.00 ₽
- Сообщения
- 5,051
- Симпатии
- 618
- Веб-сайт
- itnull.info
- Друг форума
- Программист
- Автор темы
- Администратор
- Модер.
- Команда форума
-
#4
ITnull обновил(а) ресурс Экспорт/Импорт товаров в Excel | esol.importexportexcel новой записью:
2.6.9 (24.01.2022)
Экспорт:
1) Исправлены ошибки работы опций для выгрузки разделов в отдельных строках файла.
2) Доработан экспорт пользовательских полей разделов типа Список.
3) Доработано приведение цен к нужной валюте.Импорт:
1) Доработана загрузка множественного пользовательского поля раздела типа Файл.
2) Реализована обработка ошибок в модуле seo при автогенерации sitemap.
3) Добавлены кнопки для быстрого удаления любого поля на 2-м шаге, а также кнопка для удаления сразу всех полей.
4)…
Узнать больше об этом обновлении…
- Регистрация
- 02.06.21
- Донат
- 50.00 ₽
- Сообщения
- 5,051
- Симпатии
- 618
- Веб-сайт
- itnull.info
- Друг форума
- Программист
- Автор темы
- Администратор
- Модер.
- Команда форума
-
#5
- Регистрация
- 02.06.21
- Донат
- 50.00 ₽
- Сообщения
- 5,051
- Симпатии
- 618
- Веб-сайт
- itnull.info
- Друг форума
- Программист
- Автор темы
- Администратор
- Модер.
- Команда форума
-
#6
- Регистрация
- 30.05.22
- Сообщения
- 6
- Симпатии
- 0
-
#7
Добрый день. у меня лицензия битрикс просрочена. закачал архив с модулем в /bitrix/modules/папка с модулем. захожу в папку с моделем а там все файлы 0 байт.
в
/
/
модуль не появился для установки. подкажите плиз, что делаю не так?
P.S. загрузил модуль на битрикс с активной лицензией — такая же шляпа, что и выше.
- Регистрация
- 02.06.21
- Донат
- 50.00 ₽
- Сообщения
- 5,051
- Симпатии
- 618
- Веб-сайт
- itnull.info
- Друг форума
- Программист
- Автор темы
- Администратор
- Модер.
- Команда форума
-
#8
Добрый день. у меня лицензия битрикс просрочена. закачал архив с модулем в /bitrix/modules/папка с модулем. захожу в папку с моделем а там все файлы 0 байт.
в
/
/
модуль не появился для установки. подкажите плиз, что делаю не так?
P.S. загрузил модуль на битрикс с активной лицензией — такая же шляпа, что и выше.
Либо архиватор глючит либо что-то делаете не так, ясно же что работать не будет потому что после распаковки все файлы модуля имеют нулевой размер. Случайно не Mac?
- Регистрация
- 30.05.22
- Сообщения
- 6
- Симпатии
- 0
-
#9
Либо архиватор глючит либо что-то делаете не так, ясно же что работать не будет потому что после распаковки все файлы модуля имеют нулевой размер. Случайно не Mac?
нет не мак. винда. загружал архив через админку, там распаковывал встроенным архиватором в папку /bitrix/modules. То есь не загружал распакованные на компе файлы. Поэтому думаю, что моя ось тут не при чем. я много раз раньше так делал и модуль вставал нормально. а тут 2 модуля отсюда скачал, залил и одна и та же фигня((
- Регистрация
- 02.06.21
- Донат
- 50.00 ₽
- Сообщения
- 5,051
- Симпатии
- 618
- Веб-сайт
- itnull.info
- Друг форума
- Программист
- Автор темы
- Администратор
- Модер.
- Команда форума
-
#10
нет не мак. винда. загружал архив через админку, там распаковывал встроенным архиватором в папку /bitrix/modules. То есь не загружал распакованные на компе файлы. Поэтому думаю, что моя ось тут не при чем. я много раз раньше так делал и модуль вставал нормально. а тут 2 модуля отсюда скачал, залил и одна и та же фигня((
Распакуйте на пк, никаких проблем с модулями нет
- Регистрация
- 02.06.21
- Донат
- 50.00 ₽
- Сообщения
- 5,051
- Симпатии
- 618
- Веб-сайт
- itnull.info
- Друг форума
- Программист
- Автор темы
- Администратор
- Модер.
- Команда форума
-
#11
- Регистрация
- 12.09.22
- Сообщения
- 8
- Симпатии
- 2
- Регистрация
- 02.06.21
- Донат
- 50.00 ₽
- Сообщения
- 5,051
- Симпатии
- 618
- Веб-сайт
- itnull.info
- Друг форума
- Программист
- Автор темы
- Администратор
- Модер.
- Команда форума
-
#13
- Регистрация
- 12.09.22
- Сообщения
- 8
- Симпатии
- 2
-
#14
У меня после установки таким образом модуль выглядит
Вложения
-
2022-10-05_214835.jpg
2.3 KB
· Просмотры: 4
- Регистрация
- 02.06.21
- Донат
- 50.00 ₽
- Сообщения
- 5,051
- Симпатии
- 618
- Веб-сайт
- itnull.info
- Друг форума
- Программист
- Автор темы
- Администратор
- Модер.
- Команда форума
-
#15
У меня после установки таким образом модуль выглядит
Какую версию ставили ? Попробуйте на чистом битриксе сравнить
- Регистрация
- 12.09.22
- Сообщения
- 8
- Симпатии
- 2
-
#16
Какую версию ставили ? Попробуйте на чистом битриксе сравнить
Последнюю версию
- Регистрация
- 12.09.22
- Сообщения
- 8
- Симпатии
- 2
-
#17
Какую версию ставили ? Попробуйте на чистом битриксе сравнить
А где можно предыдущую версию скачать?
- Регистрация
- 02.06.21
- Донат
- 50.00 ₽
- Сообщения
- 5,051
- Симпатии
- 618
- Веб-сайт
- itnull.info
- Друг форума
- Программист
- Автор темы
- Администратор
- Модер.
- Команда форума
-
#18
А где можно предыдущую версию скачать?
Вкладка история
- Регистрация
- 12.09.22
- Сообщения
- 8
- Симпатии
- 2
-
#19
2.7.5 версия кривая, 2.7.4 норм работает
- Регистрация
- 02.06.21
- Донат
- 50.00 ₽
- Сообщения
- 5,051
- Симпатии
- 618
- Веб-сайт
- itnull.info
- Друг форума
- Программист
- Автор темы
- Администратор
- Модер.
- Команда форума
-
#20
2.7.5 версия кривая, 2.7.4 норм работает
У меня 2.7.5 стоит у клиента на сайте, причем на рабочем.
Время на прочтение
9 мин
Количество просмотров 62K
Есть в IT-отрасли задачи, которые на фоне успехов в big data, machine learning, blockchain и прочих модных течений выглядят совершенно непривлекательно, но на протяжении десятков лет не перестают быть актуальными для целой армии разработчиков. Речь пойдёт о старой как мир задаче формирования и выгрузки Excel-документов, с которой сталкивался каждый, кто когда-либо писал приложения для бизнеса.
Какие возможности построения файлов Excel существуют в принципе?
- VBA-макросы. В наше время по соображениям безопасности идея использовать макросы чаще всего не подходит.
- Автоматизация Excel внешней программой через API. Требует наличия Excel на одной машине с программой, генерирующей Excel-отчёты. Во времена, когда клиенты были толстыми и писались в виде десктопных приложений Windows, такой способ годился (хотя не отличался скоростью и надёжностью), в нынешних реалиях это с трудом достижимый случай.
- Генерация XML-Excel-файла напрямую. Как известно, Excel поддерживает XML-формат сохранения документа, который потенциально можно сгенерировать/модифицировать с помощью любого средства работы с XML. Этот файл можно сохранить с расширением .xls, и хотя он, строго говоря, при этом не является xls-файлом, Excel его хорошо открывает. Такой подход довольно популярен, но к недостаткам следует отнести то, что всякое решение, основанное на прямом редактировании XML-Excel-формата, является одноразовым «хаком», лишенным общности.
- Наконец, возможна генерация Excel-файлов с использованием open source библиотек, из которых особо известна Apache POI. Разработчики Apache POI проделали титанический труд по reverse engineering бинарных форматов документов MS Office, и продолжают на протяжении многих лет поддерживать и развивать эту библиотеку. Результат этого reverse engineering-а, например, используется в Open Office для реализации сохранения документов в форматах, совместимых с MS Office.
На мой взгляд, именно последний из способов является сейчас предпочтительным для генерации MS Office-совместимых документов. С одной стороны, он не требует установки никакого проприетарного ПО на сервер, а с другой стороны, предоставляет богатый API, позволяющий использовать все функциональные возможности MS Office.
Но у прямого использования Apache POI есть и недостатки. Во-первых, это Java-библиотека, и если ваше приложение написано не на одном из JVM-языков, вы ей вряд ли сможете воспользоваться. Во-вторых, это низкоуровневая библиотека, работающая с такими понятиями, как «ячейка», «колонка», «шрифт». Поэтому «в лоб» написанная процедура генерации документа быстро превращается в обильную «лапшу» трудночитаемого кода, где отсутствует разделение на модель данных и представление, трудно вносить изменения и вообще — боль и стыд. И прекрасный повод делегировать задачу самому неопытному программисту – пусть ковыряется.
Но всё может быть совершенно иначе. Проект Xylophone под лицензией LGPL, построенный на базе Apache POI, основан на идее, которая имеет примерно 15-летнюю историю. В проектах, где я участвовал, он использовался в комбинации с самыми разными платформами и языками – а счёт разновидностей форм, сделанных с его помощью в самых разнообразных проектах, идёт, наверное, уже на тысячи. Это Java-проект, который может работать как в качестве утилиты командной строки, так и в качестве библиотеки (если у вас код на JVM-языке — вы можете подключить её как Maven-зависимость).
Xylophone реализует принцип отделения модели данных от их представления. В процедуре выгрузки необходимо сформировать данные в формате XML (не беспокоясь о ячейках, шрифтах и разделительных линиях), а Xylophone, при помощи Excel-шаблона и дескриптора, описывающего порядок обхода вашего XML-файла с данными, сформирует результат, как показано на диаграмме:
Шаблон документа (xls/xlsx template) выглядит примерно следующим образом:
Как правило, заготовку такого шаблона предоставляет сам заказчик. Вовлечённый заказчик с удовольствием принимает участие в создании шаблона: начиная с выбора нужной формы из «Консультанта» или придумывания собственной с нуля, и заканчивая размерами шрифтов и ширинами разделительных линий. Преимущество шаблона в том, что мелкие правки в него легко вносить уже тогда, когда отчёт полностью разработан.
Когда «оформительская» работа выполнена, разработчику остаётся
- Создать процедуру выгрузки необходимых данных в формате XML.
- Создать дескриптор, описывающий порядок обхода элементов XML-файла и копирования фрагментов шаблона в результирующий отчёт
- Обеспечить привязку ячеек шаблона к элементам XML-файла с помощью XPath-выражений.
С выгрузкой в XML всё более-менее понятно: достаточно выбрать адекватное XML-представление данных, необходимых для заполнения формы. Что такое дескриптор?
Если бы в форме, которую мы создаём, не было повторяющихся элементов с разным количеством (таких, как строки накладной, которых разное количество у разных накладных), то дескриптор выглядел бы следующим образом:
<element name="root">
<output range="A1:Z100"/>
</element>
Здесь root – название корневого элемента нашего XML-файла с данными, а диапазон A1:Z100 – это прямоугольный диапазон ячеек из шаблона, который будет скопирован в результат. При этом, как можно видеть из предыдущей иллюстрации, подстановочные поля, значения которых заменяются на данные из XML-файла, имеют формат ~{XPath-выражение}
(тильда, фигурная скобка, XPath-выражение относительно текущего элемента XML, закрывающая фигурная скобка).
Что делать, если в отчёте нам нужны повторяющиеся элементы? Естественным образом их можно представить в виде элементов XML-файла с данными, а помочь проитерировать по ним нужным образом помогает дескриптор. Повторение элементов в отчёте может иметь как вертикальное направление (когда мы вставляем строки накладной, например), так и горизонтальное (когда мы вставляем столбцы аналитического отчёта). При этом мы можем пользоваться вложенностью элементов XML, чтобы отразить сколь угодно глубокую вложенность повторяющихся элементов отчёта, как показано на диаграмме:
Красными квадратиками отмечены ячейки, которые будут являться левым верхним углом очередного прямоугольного фрагмента, который пристыковывает генератор отчёта.
Есть и ещё один возможный вариант повторяющихся элементов: листы в книге Excel. Возможность организовать такую итерацию тоже имеется.
Рассмотрим чуть более сложный пример. Допустим, нам надо получить сводный отчёт наподобие следующего:
Пусть диапазон лет для выгрузки выбирает пользователь, поэтому в этом отчёте динамически создаваемыми являются как строки, так и столбцы. XML-представление данных для такого отчёта может выглядеть следующим образом:
testdata.xml
<?xml version="1.0" encoding="UTF-8"?>
<report>
<column year="2016"/>
<column year="2017"/>
<column year="2018"/>
<item name="Товар 1">
<year amount="365"/>
<year amount="286"/>
<year amount="207"/>
</item>
<item name="Товар 2">
<year amount="95"/>
<year amount="606"/>
<year amount="840"/>
</item>
<item name="Товар 3">
<year amount="710"/>
<year amount="437"/>
<year amount="100"/>
</item>
<totals>
<year amount="1170"/>
<year amount="1329"/>
<year amount="1147"/>
</totals>
</report>
Мы вольны выбирать названия тэгов по своему вкусу, структура также может быть произвольной, но с оглядкой на простоту конвертации в отчёт. Например, выводимые на лист значения я обычно записываю в атрибуты, потому что это упрощает XPath-выражения (удобно, когда они имеют вид @имяатрибута
).
Шаблон такого отчёта будет выглядеть так (сравните XPath-выражения с именами атрибутов соответствующих тэгов):
Теперь наступает самая интересная часть: создание дескриптора. Т. к. это практически полностью динамически собираемый отчёт, дескриптор довольно сложен, на практике (когда у нас есть только «шапка» документа, его строки и «подвал») всё обычно гораздо проще. Вот какой в данном случае необходим дескриптор:
descriptor.xml
<?xml version="1.0" encoding="UTF-8"?>
<element name="report">
<!-- Создаём лист -->
<output worksheet="Отчет" sourcesheet="Лист1"/>
<!-- И за ним слева направо заголовки столбцов -->
<iteration mode="horizontal">
<element name="(before)">
<!-- Выводим пустую ячейку в ЛВУ сводной таблицы -->
<output range="A1"/>
</element>
<element name="column">
<output range="B1"/>
</element>
</iteration>
<!-- Выводим строки: итерация с режимом вывода умолчанию, сверху вниз -->
<iteration mode="vertical">
<element name="item">
<!-- И по строке - слева направо -->
<iteration mode="horizontal">
<element name="(before)">
<!-- Заголовок строки -->
<output range="A2"/>
</element>
<!-- И за ним слева направо строку с данными -->
<element name="year">
<output range="B2"/>
</element>
</iteration>
</element>
</iteration>
<iteration>
<element name="totals">
<iteration mode="horizontal">
<element name="(before)">
<!-- Заголовок строки -->
<output range="A3"/>
</element>
<!-- И за ним слева направо строку с данными -->
<element name="year">
<output range="B3"/>
</element>
</iteration>
</element>
</iteration>
</element>
Полностью элементы дескриптора описаны в документации. Вкратце, основные элементы дескриптора означают следующее:
- element — переход в режим чтения элемента XML-файла. Может или являться корневым элементом дескриптора, или находиться внутри
iteration
. С помощью атрибутаname
могут быть заданы разнообразные фильтры для элементов, напримерname="foo"
— элементы с именем тэга fooname="*"
— все элементыname="tagname[@attribute='value']"
— элементы с определённым именем и значением атрибутаname="(before)"
,name="(after)"
— «виртуальные» элементы, предшествующие итерации и закрывающие итерацию.
- iteration — переход в режим итерации. Может находиться только внутри
element
. Могут быть выставлены различные параметры, напримерmode="horizontal"
— режим вывода по горизонтали (по умолчанию — vertical)index=0
— ограничить итерацию только самым первым встреченным элементом
- output — переход в режим вывода. Основные атрибуты следующие:
sourcesheet
—лист книги шаблона, с которого берётся диапазон вывода. Если не указывать, то применяется текущий (последний использованный) лист.range
– диапазон шаблона, копируемый в результирующий документ, например “A1:M10”, или “5:6”, или “C:C”. (Применение диапазонов строк типа “5:6” в режиме вывода horizontal и диапазонов столбцов типа “C:C” в режиме вывода vertical приведёт к ошибке).worksheet
– если определён, то в файле вывода создаётся новый лист и позиция вывода смещается в ячейку A1 этого листа. Значение этого атрибута, равное константе или XPath-выражению, подставляется в имя нового листа.
В действительности всевозможных опций в дескрипторе гораздо больше, смотрите документацию.
Ну что же, настало время скачать Xylophone и запустить формирование отчёта.
Возьмите архив с bintray или Maven Central (NB: на момент прочтения этой статьи возможно наличие более свежих версий). В папке /bin находится shell-скрипт, при запуске которого без параметров вы увидите подсказку о параметрах командной строки. Для получения результата нам надо «скормить» ксилофону все приготовленные ранее ингредиенты:
xylophone -data testdata.xml -template template.xlsx -descr descriptor.xml -out report.xlsx
Открываем файл report.xlsx и убеждаемся, что получилось именно то, что нам нужно:
Так как библиотека ru.curs:xylophone доступна на Maven Central под лицензией LGPL, её можно без проблем использовать в программах на любом JVM-языке. Пожалуй, самый компактный полностью рабочий пример получается на языке Groovy, код в комментариях не нуждается:
@Grab('ru.curs:xylophone:6.1.3')
import ru.curs.xylophone.XML2Spreadsheet
baseDir = '.'
new File(baseDir, 'testdata.xml').withInputStream {
input ->
new File(baseDir, 'report.xlsx').withOutputStream {
output ->
XML2Spreadsheet.process(input,
new File(baseDir, 'descriptor.xml'),
new File(baseDir, 'template.xlsx'),
false, output)
}
}
println 'Done.'
У класса XML2Spreadsheet
есть несколько перегруженных вариантов статического метода process
, но все они сводятся к передаче всё тех же «ингредиентов», необходимых для подготовки отчёта.
Важная опция, о которой я до сих пор не упомянул — это возможность выбора между DOM и SAX парсерами на этапе разбора файла с XML-данными. Как известно, DOM-парсер загружает весь файл в память целиком, строит его объектное представление и даёт возможность обходить его содержимое произвольным образом (в том числе повторно возвращаясь в один и тот же элемент). SAX-парсер никогда не помещает файл с данными целиком в память, вместо этого обрабатывает его как «поток» элементов, не давая возможности вернуться к элементу повторно.
Использование SAX-режима в Xylophone (через параметр командной строки -sax
или установкой в true
параметра useSax
метода XML2Spreadsheet.process
) бывает критически полезно в случаях, когда необходимо генерировать очень большие файлы. За счёт скорости и экономичности к ресурсам SAX-парсера скорость генерации файлов возрастает многократно. Это даётся ценой некоторых небольших ограничений на дескриптор (описано в документации), но в большинстве случаев отчёты удовлетворяют этим ограничениям, поэтому я бы рекомендовал использование SAX-режима везде, где это возможно.
Надеюсь, что способ выгрузки в Excel через Xylophone вам понравился и сэкономит много времени и нервов — как сэкономил нам.
И напоследок ещё раз ссылки:
- исходники — здесь: github.com/CourseOrchestra/xylophone
- документация — здесь: courseorchestra.github.io/xylophone
- все примеры кода из этой статьи — здесь: github.com/inponomarev/xylophone-example.