LINUX.ORG.RU

Подскажите модуль perl для создания электронных таблиц

 


0

1

Доброго времени суток

Сабж

Тип таблиц уже не важен. Пока нашёл только Spreadsheet::WriteExcel, но он жутко кривой - использовать его внутри функций невозможно, создаётся мусор вместо файла

update. Spreadsheet::WriteExcel криво работает с областями видимости. _всегда_ нужно вызывать close() вручную, хотя документация говорит - расслабьтесь, всё будет автоматически.

★★★★★

Последнее исправление: router (всего исправлений: 1)
Ответ на: комментарий от powerguy

Но как, Холмс? Может я совсем идиот, но вот так работает

#!/usr/bin/perl

use strict;
use Spreadsheet::WriteExcel;

my $spreadsheet    = Spreadsheet::WriteExcel->new( 'test.xls' );
my $worksheet = $spreadsheet->add_worksheet();
my $format = $spreadsheet->add_format( border => 1, border_color => 'black'); # Add a format
$worksheet->write(1,1,'test', $format);

а так - нет:

#!/usr/bin/perl

use strict;
use Spreadsheet::WriteExcel;

my $spreadsheet;
my $worksheet;
my $format;

sub test{
    $spreadsheet    = Spreadsheet::WriteExcel->new( 'test.xls' );
    $worksheet = $spreadsheet->add_worksheet();
    $format = $spreadsheet->add_format( border => 1, border_color => 'black'); # Add a format
    $worksheet->write(1,1,'test', $format);
}

test();

полность ломать свой скрипт, чтобы вкрячить создание таблицы ВНЕ всех процедур - это [censored]

router ★★★★★
() автор топика
Ответ на: комментарий от powerguy

а вообще создавай в CSV.

Не получится скорее всего. мне нужно в ячейки добавлять многострочный текст, с переносами

router ★★★★★
() автор топика
Ответ на: комментарий от router

Нашёл. Нужно самому вызывать $spreadsheet->close();

В документации сказано

In general your Excel file will be closed automatically when your program ends or when the Workbook object goes out of scope
, но что-то эта магия не работает ( от слова «совсем» ). И при этом вызов close есть в 7 примерах из 98 :D

$ ls  /usr/share/doc/libspreadsheet-writeexcel-perl/examples/ | wc -l
98
$ grep close /usr/share/doc/libspreadsheet-writeexcel-perl/examples/ -R | cut -d ':' -f 1 | uniq | wc -l
7
router ★★★★★
() автор топика
Последнее исправление: router (всего исправлений: 1)
Ответ на: комментарий от router

но что-то эта магия не работает

Запустил твой пример. Если добавить close у меня работает

 sub test{
       ....
       $spreadsheet->close();
 }
pru-mike ★★
()

Тип таблиц уже не важен.

HTML?

модуль

Template::Toolkit ?

pru-mike ★★
()
Ответ на: комментарий от Olegymous

Да, формат-то умеет, а вот импорт его в мелкософтовский икзель станет непростым делом, я знаю многих, кто не справился. Мне приходилось открывать в либреофисе и экспортировать в икзель.

pef-secure
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.