Pull to refresh

Comments 14

Если уж на то пошло, то
cpan.uwinnipeg.ca/search?query=Excel&mode=dist
А там есть такие вещи, как, например Spreadsheet::SimpleExcel

use Spreadsheet::SimpleExcel;

binmode(\*STDOUT);
# data for spreadsheet
my @header = qw(Header1 Header2);
my @data = (['Row1Col1', 'Row1Col2'], ['Row2Col1', 'Row2Col2']);

# create a new instance
my $excel = Spreadsheet::SimpleExcel->new();

# add worksheets
$excel->add_worksheet('Name of Worksheet',{-headers => \@header, -data => \@data});
$excel->add_worksheet('Second Worksheet',{-data => \@data});
$excel->add_worksheet('Test');

# add a row into the middle
$excel->add_row_at('Name of Worksheet',1,[qw/new row/]);

# sort data of worksheet — ASC or DESC
$excel->sort_data('Name of Worksheet',0,'DESC');

# remove a worksheet
$excel->del_worksheet('Test');

# sort worksheets
$excel->sort_worksheets('DESC');

Есть еще замечательная штука Excel::Template, которая работает примерно так. Делаем шаблон с помощью XML:
<workbook>
<worksheet name=«tester»>
<cell text="$HOME" />
<cell text="$PATH" />
</worksheet>
</workbook>

И создаем Excel-файл:

use Excel::Template;

# Create the Excel template
my $template = Excel::Template->new(
filename => 'test.xml',
);

# Add a few parameters
$template->param(
HOME => $ENV{HOME},
PATH => $ENV{PATH},
);

$template->write_file('test.xls');

А так же модуль для Catalyst, плагин для Template Toolkit, куча парсеров и write-ров этих файлов, DBI драйвер, конвертор в XML. Эх, сделали бы уже полный обзор…
Это был первый пост на Хабре… так сказать пробный 0:)
Выбор именно OLE был обусловлен тем, чтобы не плодить кучу модулей на компе, т.к. требуется еще обработка текстов в MS Word. К тому же это всего лишь необходимый минимум :)
Но вообще верное замечание — сравнение + и — разных методов можно было сделать. На досуге постараюсь ;)
Там ниже уже все написали. Во-первых, виндовс-онли, во-вторых, хранить эксель рядом с сервером БД глупо, в третьих через OLE это более гиморно, чем прочими модулями, которые пишут непосредственно в файл, в-четвертых, это ресурсоемко и долго.
UFO landed and left these words here
Почему бы просто в csv не сохранять? Как по мне — весьма простое и универсальное решение. С задачей открыть в экселе прекрасно справится.
Спасибо за идею! До этого не додумалась…
хотя с другой стороны — мне надо было еще «рюшечки» навесить… это средствами csv не получится сделать
UFO landed and left these words here
Правильно понимаете. Лично у меня в конторе до сих пор юзают винду и офис, а применяется очень просто — есть БД, из которой печатаются отчеты ;)
UFO landed and left these words here
Нет, конечно же — БД отдельно на серваке, а Excel на машинах пользователей. Тогда по порядку еще разок — сначала выполняется запрос из БД через DBI, затем полученные данные заносятся в Excel (шаблон задается скриптом) и печатается отчет.
Видимо надо было сразу полную картину описать…
Если уж использовать Perl, то лучше делать скрипт кроспалатформенным. Например на Unix-сервере те же самые отчеты генерить. А если windows-only, то имхо .NET самое здесь будет.
На моей практике часто сталкиваешься с тем что сейчас оно работает, но рано или поздно упрешься в ограничение модуля или с тем что просто он морально устарел.
Недавно как раз генерировал лист Excel для отчетов. Только я xml-ку создавал. Описание формата можно на msdn.microsoft.com найти. Да и не на перле, а на tcl с помощью библиотеки tdom.
Sign up to leave a comment.

Articles