<html><head><meta http-equiv="Content-Type" content="text/html charset=koi8-r"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div>Привет,</div><div><br></div><div>Кстати, если не влезаете по строкам/столбцам в XLS (или просто хотите меньшие по размеру файлы на выходе) - пользуйтесь Excel::Writer::XLSX - <a href="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</a> - интерфейс такой же как у вашего: <a href="http://search.cpan.org/~jmcnamara/Excel-Writer-XLSX-0.76/lib/Excel/Writer/XLSX.pm#Excel::Writer::XLSX_and_Spreadsheet::WriteExcel">http://search.cpan.org/~jmcnamara/Excel-Writer-XLSX-0.76/lib/Excel/Writer/XLSX.pm#Excel::Writer::XLSX_and_Spreadsheet::WriteExcel</a></div><div><br></div><div>Евгений</div><br><div><div>On Mar 20, 2014, at 2:27 PM, Artem Zhuravlev <<a href="mailto:zhuravlev.ua@gmail.com">zhuravlev.ua@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div dir="ltr">Большое спасибо.</div><div class="gmail_extra"><br><br><div class="gmail_quote">20 марта 2014 г., 14:09 пользователь Alexander Lourier <span dir="ltr"><<a href="mailto:aml@rulezz.ru" target="_blank">aml@rulezz.ru</a>></span> написал:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Тогда - только архив. HTTP не поддерживает multipart-ответы.<div>Можно ещё показать HTML-страничку, с которой можно каждый файл по отдельности кликом открыть.<div>
<br></div><div>И ещё. Вы небезопасно используете временный файл для генерации XLS. Если два пользователя попытаются выполнить такую операцию, то одному может достаться файл от другого или его битый кусок. Если в вашем случае возможно генерировать файл в памяти, то лучше сделать именно так:</div>

<div><br></div><font face="courier new, monospace">my $xls_data;<br>my $handle = IO::Scalar->new(\$xls_data);<br>my $workbook = Spreadsheet::WriteExcel->new($handle);<br>....<br>$workbook->close;<br>$self->render(data => $xls_data);</font><div>

<div><br></div><div class="gmail_extra"><br><div class="gmail_quote">20 марта 2014 г., 9:24 пользователь Artem Zhuravlev <span dir="ltr"><<a href="mailto:zhuravlev.ua@gmail.com" target="_blank">zhuravlev.ua@gmail.com</a>></span> написал:<div>
<div class="h5"><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Файлы через веб, загрузка клиентом. </div>
<div class="gmail_extra">
<br><br><div class="gmail_quote">20 марта 2014 г., 12:10 пользователь Alexander Lourier <span dir="ltr"><<a href="mailto:aml@rulezz.ru" target="_blank">aml@rulezz.ru</a>></span> написал:<div><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Зависит от того, что такое $self->res, и как вы хотите отдавать файлы.<div>

Если вы формируете email, то Content-type самому письму задаёте multipart/mixed, потом к письму цепляете каждый аттач отдельным part. Если это MIME::Entity, то примерно так:</div>

<div>$self->res->attach(Data => $document, Type => 'application/vnd.ms-excel', Encoding => 'base64');</div><div>$self->res->attach(....);</div><div><br></div></div><div class="gmail_extra">



<br><br><div class="gmail_quote">2014-03-20 8:54 GMT+01:00 Artem Zhuravlev <span dir="ltr"><<a href="mailto:zhuravlev.ua@gmail.com" target="_blank">zhuravlev.ua@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">


<div>
<div dir="ltr"><br><br>Добрый день. <br><br>Столкнулся с проблемой рендеринга xls файлов. <br><br><div>my $self = shift;</div><div>my $dir = "/tmp/writeexcel/";<br></div><div>my $template = "application";</div>




<div>my $suffix = ".xls";</div><div><br></div><div>my $filename = $dir . $template . $suffix;</div><div># Create a new workbook called simple.xls and add a worksheet</div><div>my $workbook;</div><div>$workbook  = Spreadsheet::WriteExcel->new($filename) or die "Problems creating new Excel file: $!" unless defined $workbook;</div>




<div>my $worksheet = $workbook->add_worksheet("Заявка");</div><div>... формируем xls файл ... </div><div>$workbook->close() or die "Error closing file: $!";</div><div><br></div><div>my $document = do {</div>




<div><span style="white-space:pre-wrap">  </span>local $/ = undef;</div><div><span style="white-space:pre-wrap">        </span>open my $fh, "<", $filename</div><div><span style="white-space:pre-wrap">         </span>or die "could not open $filename: $!";</div>




<div><span style="white-space:pre-wrap">  </span><$fh>;</div><div>};</div><div><br></div><div>$self->res->headers->content_disposition("attachment; filename='file.xls';");<br></div><div>
$self->render(data => $document);</div><div><br></div><div>Тут все хорошо.</div><div><br></div><div>Не знаю как быть в случае если нужно отдать сразу несколько файлов. <br><br>Пните куда смотреть. Думал над тем что архивировать файлы и передать архив.</div>




<div><br></div><div>Спасибо.</div><div><br></div><div>P.S.  Суть не в самом решении, конечно не буду против, а в том куда копать.</div><span><font color="#888888"><div><br></div>-- <br><div dir="ltr">Best regards,<br>
<div>Artem V. Zhuravlev</div></div>

</font></span></div>
<br></div><span><font color="#888888">--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org/" target="_blank">http://moscow.pm.org</a><br>
<br></font></span></blockquote></div><br></div>
<br>--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org/" target="_blank">http://moscow.pm.org</a><br>
<br></blockquote></div></div><div><br><br clear="all"><div><br></div>-- <br><div dir="ltr">Best regards,<br><div>Artem V. Zhuravlev</div></div>
</div></div>
<br>--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org/" target="_blank">http://moscow.pm.org</a><br>
<br></blockquote></div></div></div><br></div></div></div></div>
<br>--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org/" target="_blank">http://moscow.pm.org</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr">Best regards,<br><div>Artem V. Zhuravlev</div></div>
</div>
-- <br>Moscow.pm mailing list<br><a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org">http://moscow.pm.org</a><br></blockquote></div><br></body></html>