[Moscow.pm] Mojolicious render xls

Eugene Toropov eugene.toropov на gmail.com
Чт Мар 20 03:32:15 PDT 2014


Привет,

Кстати, если не влезаете по строкам/столбцам в 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 <zhuravlev.ua на gmail.com> wrote:

> Большое спасибо.
> 
> 
> 20 марта 2014 г., 14:09 пользователь Alexander Lourier <aml на rulezz.ru> написал:
> Тогда - только архив. 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 <zhuravlev.ua на gmail.com> написал:
> 
> Файлы через веб, загрузка клиентом. 
> 
> 
> 20 марта 2014 г., 12:10 пользователь Alexander Lourier <aml на rulezz.ru> написал:
> 
> Зависит от того, что такое $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 <zhuravlev.ua на gmail.com>:
> 
> 
> Добрый день. 
> 
> Столкнулся с проблемой рендеринга 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
> moscow-pm на pm.org | http://moscow.pm.org
> 
> 
> 
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
> 
> 
> 
> 
> -- 
> Best regards,
> Artem V. Zhuravlev
> 
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
> 
> 
> 
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
> 
> 
> 
> 
> -- 
> Best regards,
> Artem V. Zhuravlev
> -- 
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org

----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20140320/42725580/attachment.html>


Подробная информация о списке рассылки Moscow-pm