Perl: Создание Excel-документа с помощью XML
Документация в Excel очень удобна для менеджеров и бухгалтеров, поэтому практически в любом корпоративном проекте есть кнопка "экспортировать в Excel". Для создания красивого excel-документа, средствами perl, существует удобный модуль Excel::Template, создающий xls на основе xml-шаблонов.
Для тех, кто знаком с HTML::Template, будет приятно узнать что синтаксис команд Excel::Template практически такой-же, за исключением некоторых моментов.
Далее я приведу небольшой пример использования Excel::Template, генерирующий xls со списком пользователей.
perl-скрипт
Вот, собственно, и вся кухня.
Подробнее про Excel::Template вы можете прочитать на сайте cpan.org: http://search.cpan.org/perldoc?Excel::Template
Еще пример построения XLS на основе XML можно посмотреть здесь: Генерация Excel документов на perl
Далее цитирую:
В ходе обсуждения проблемы товарищ a_lourier подсказал решение:
Для тех, кто знаком с HTML::Template, будет приятно узнать что синтаксис команд Excel::Template практически такой-же, за исключением некоторых моментов.
Далее я приведу небольшой пример использования Excel::Template, генерирующий xls со списком пользователей.
perl-скрипт
#!/usr/bin/perl -w use strict; use Excel::Template; #------------------------------------xml-шаблон (users.xml)
#-- формируем массив с пользователями
#------------------------------------ my $users = [ { user_name => 'Василий', user_age => '25', user_sex => 'Male' }, { user_name => 'Оксана', user_age => '34', user_sex => 'Female' }, { user_name => 'Андрей', user_age => '29', user_sex => 'Male' }, ]; #------------------------------------
#-- формирование excel отчета по xml-шаблону и данным
#------------------------------------ my $template_file = 'users.xml'; my $excel_file = 'users.xls'; my $template = Excel::Template->new( filename => $template_file ); $template->param( users_data => $users ); $template->write_file($excel_file);
<?xml version="1.0" encoding="UTF-8"?> <workbook> <worksheet name="$leaders_date"> <format valign="vcenter" bold="bold" bg_color="orange"> <row> <cell width="33">Имя</cell> <cell width="20">Пол</cell> <cell width="20">Возраст</cell> </row> </format> <loop name="users_data"> <row> <cell><var name="user_name"/></cell> <cell><var name="user_sex"/></cell> <cell type="number"><var name="user_age"/></cell> </row> </loop> </worksheet> </workbook>
Вот, собственно, и вся кухня.
Подробнее про Excel::Template вы можете прочитать на сайте cpan.org: http://search.cpan.org/perldoc?Excel::Template
Еще пример построения XLS на основе XML можно посмотреть здесь: Генерация Excel документов на perl
UPD:
Долго боролся с кодировками, пока не нашел решение проблемы на страницах ЖЖ товарища mollenhauer: Excel::Template, проблема с кодировкой, а точнее с utf-8Далее цитирую:
Excel::Template, проблема с кодировкой, а точнее с utf-8
У меня есть форма на странице (все в utf-8), из данных этой формы планируется формировать excel файл, на основе шаблона.
Решил для этого юзать Excel::Template, так как на мой взгляд наиболее подходящий: файл формирую по шаблону в xml, (да и по бенчмарку по заявлениям авторов довольно быстрый). Но вот одна странная проблема, на основании вот такого вот шаблона:
Формирует вот такой вот файл:
При этом раскодируется через тот же Shtirlitz вот эта абракадабра в правой ячейке без проблем...
У кого-нибудь был опыт создания excel из web-форм?
У меня есть форма на странице (все в utf-8), из данных этой формы планируется формировать excel файл, на основе шаблона.
Решил для этого юзать Excel::Template, так как на мой взгляд наиболее подходящий: файл формирую по шаблону в xml, (да и по бенчмарку по заявлениям авторов довольно быстрый). Но вот одна странная проблема, на основании вот такого вот шаблона:
<?xml version="1.0" encoding="UTF-8"?> <workbook> <worksheet name="client"> <cell text="Наименование организации:" /> <cell text="$name" /> </worksheet> </workbook>
Формирует вот такой вот файл:
При этом раскодируется через тот же Shtirlitz вот эта абракадабра в правой ячейке без проблем...
У кого-нибудь был опыт создания excel из web-форм?
В ходе обсуждения проблемы товарищ a_lourier подсказал решение:
Сделайте:
$name = Encode::decode_utf8($name);
$name = Encode::decode_utf8($name);
Похожие материалы:
Комментарии:
25 Февраля 2011 (12:14:39)
rus
(гость)
• ответить
Так тоже отлично работает!
24 Января 2012 (15:02:52)
Viktor
(гость)
• ответить
Просто необычайно огромная благодарность за статью!!!
Все легко и красиво
Все легко и красиво
8 Апреля 2020 (16:06:26)
Миша
(гость)
• ответить
Добрый день!
Есть проблемка при создании таблички с помощью Perl.
Как перлу указать, что первый столбец таблицы имеет формат ячеек текст?
А то у меня идет вставка счетов 009231111111 и у них обрезаются первые нули и вообще выглядит так:
7,52Е+11.
Есть проблемка при создании таблички с помощью Perl.
Как перлу указать, что первый столбец таблицы имеет формат ячеек текст?
А то у меня идет вставка счетов 009231111111 и у них обрезаются первые нули и вообще выглядит так:
7,52Е+11.