S3.Blog

22 Октября 2026
A A A   ◄ RSS-лента
"Я знаю, что ничего не знаю, но многие не знают и этого". Сократ [?].

Perl: Создание Excel-документа с помощью XML

Дата последнего изменения: 7 Мая 2010
Метки статьи: Документация, Perl
Документация в Excel очень удобна для менеджеров и бухгалтеров, поэтому практически в любом корпоративном проекте есть кнопка "экспортировать в Excel". Для создания красивого excel-документа, средствами perl, существует удобный модуль Excel::Template, создающий xls на основе xml-шаблонов.
 

Для тех, кто знаком с HTML::Template, будет приятно узнать что синтаксис команд Excel::Template практически такой-же, за исключением некоторых моментов.

Далее я приведу небольшой пример использования Excel::Template, генерирующий xls со списком пользователей.

perl-скрипт
#!/usr/bin/perl -w
use strict;

use Excel::Template;

#------------------------------------
#-- формируем массив с пользователями
#------------------------------------
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-шаблон (users.xml)
<?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, (да и по бенчмарку по заявлениям авторов довольно быстрый). Но вот одна странная проблема,  на основании вот такого вот шаблона:
<?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);
 


Похожие материалы:




rus (гость) • ответить
Так тоже отлично работает!

use Encode;
use locale;
use POSIX qw (locale_h);
setlocale(LC_CTYPE, 'ru_RU.CP1251');
setlocale(LC_ALL, 'ru_RU.CP1251');

$rezult = Encode::decode('cp1251', $name);
Viktor (гость) • ответить
Просто необычайно огромная благодарность за статью!!!
Все легко и красиво
Миша (гость) • ответить
Добрый день!
Есть проблемка при создании таблички с помощью Perl.
Как перлу указать, что первый столбец таблицы имеет формат ячеек текст?
А то у меня идет вставка счетов 009231111111 и у них обрезаются первые нули и вообще выглядит так:
7,52Е+11.
dowacef569 • ответить
A useful starting point when researching a casino is to understand where it is located and what a visitor can reasonably expect from the venue. Casino Lac LeamyCasino Lac Leamy is associated with the Gatineau area of Quebec, making location and travel arrangements important details for anyone planning a visit. I would check current official information about facilities, hours and visitor policies before setting out. If travelling from elsewhere in Canada, it is worth considering parking, public transport and nearby accommodation as part of the plan. Checking the applicable age requirements and keeping any gambling activity within a personal entertainment budget are also sensible ways to prepare.

 
 
  Имя *:   Решите пример *: =
 
Полужирный Курсив Подчеркнутый Перечеркнутый
 
Вставить изображение Сделать цитатой Вставить ссылку Вставить код

Вставить смайл
 
 

 



© S3.Blog: Если критикуешь, не предлагая решения проблемы, то ты становишься частью этой проблемы.