Привет,

Кстати, если не влезаете по строкам/столбцам в XLS (или просто хотите меньшие 
по размеру файлы на выходе) - пользуйтесь Excel::Writer::XLSX - 
http://search.cpan.org/~jmcnamara/Excel-Writer-XLSX-0.76/lib/Excel/Writer/XLSX.pm
 - интерфейс такой же как у вашего: 
http://search.cpan.org/~jmcnamara/Excel-Writer-XLSX-0.76/lib/Excel/Writer/XLSX.pm#Excel::Writer::XLSX_and_Spreadsheet::WriteExcel

Евгений

On Mar 20, 2014, at 2:27 PM, Artem Zhuravlev <[email protected]> wrote:

> Большое спасибо.
> 
> 
> 20 марта 2014 г., 14:09 пользователь Alexander Lourier <[email protected]> 
> написал:
> Тогда - только архив. HTTP не поддерживает multipart-ответы.
> Можно ещё показать HTML-страничку, с которой можно каждый файл по отдельности 
> кликом открыть.
> 
> И ещё. Вы небезопасно используете временный файл для генерации XLS. Если два 
> пользователя попытаются выполнить такую операцию, то одному может достаться 
> файл от другого или его битый кусок. Если в вашем случае возможно 
> генерировать файл в памяти, то лучше сделать именно так:
> 
> my $xls_data;
> my $handle = IO::Scalar->new(\$xls_data);
> my $workbook = Spreadsheet::WriteExcel->new($handle);
> ....
> $workbook->close;
> $self->render(data => $xls_data);
> 
> 
> 20 марта 2014 г., 9:24 пользователь Artem Zhuravlev <[email protected]> 
> написал:
> 
> Файлы через веб, загрузка клиентом. 
> 
> 
> 20 марта 2014 г., 12:10 пользователь Alexander Lourier <[email protected]> 
> написал:
> 
> Зависит от того, что такое $self->res, и как вы хотите отдавать файлы.
> Если вы формируете email, то Content-type самому письму задаёте 
> multipart/mixed, потом к письму цепляете каждый аттач отдельным part. Если 
> это MIME::Entity, то примерно так:
> $self->res->attach(Data => $document, Type => 'application/vnd.ms-excel', 
> Encoding => 'base64');
> $self->res->attach(....);
> 
> 
> 
> 2014-03-20 8:54 GMT+01:00 Artem Zhuravlev <[email protected]>:
> 
> 
> Добрый день. 
> 
> Столкнулся с проблемой рендеринга xls файлов. 
> 
> my $self = shift;
> my $dir = "/tmp/writeexcel/";
> my $template = "application";
> my $suffix = ".xls";
> 
> my $filename = $dir . $template . $suffix;
> # Create a new workbook called simple.xls and add a worksheet
> my $workbook;
> $workbook  = Spreadsheet::WriteExcel->new($filename) or die "Problems 
> creating new Excel file: $!" unless defined $workbook;
> my $worksheet = $workbook->add_worksheet("Заявка");
> ... формируем xls файл ... 
> $workbook->close() or die "Error closing file: $!";
> 
> my $document = do {
>       local $/ = undef;
>       open my $fh, "<", $filename
>               or die "could not open $filename: $!";
>       <$fh>;
> };
> 
> $self->res->headers->content_disposition("attachment; filename='file.xls';");
> $self->render(data => $document);
> 
> Тут все хорошо.
> 
> Не знаю как быть в случае если нужно отдать сразу несколько файлов. 
> 
> Пните куда смотреть. Думал над тем что архивировать файлы и передать архив.
> 
> Спасибо.
> 
> P.S.  Суть не в самом решении, конечно не буду против, а в том куда копать.
> 
> -- 
> Best regards,
> Artem V. Zhuravlev
> 
> --
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org
> 
> 
> 
> --
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org
> 
> 
> 
> 
> -- 
> Best regards,
> Artem V. Zhuravlev
> 
> --
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org
> 
> 
> 
> --
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org
> 
> 
> 
> 
> -- 
> Best regards,
> Artem V. Zhuravlev
> -- 
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org

-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить