[cgiapp] Output an excel file
Rhesa Rozendaal
perl at rhesa.com
Fri Aug 28 17:42:19 EDT 2009
First, have you tried CAP::Output::XSV yet? It's nice and simple if you don't
need any of the fancy Spreadsheet::WriteExcel features.
fREW Schmidt wrote:
> This is my (coworkers) problem:
>
> My web app runs on Apache mod_perl using CGI::Application. I want to provide
> a download of a generated file. In the past (before we were using
> mod_perland CGI::App) I just spooled out a csv file to
> STDOUT as it was generated. Now I'm shooting for a little more refinement -
> creating an Excel spreadsheet using Spreadsheet::WriteExcel - and I can't
> seem it to get to print it out from the file handle.
>
> sub export_list {
> my $self = shift;
>
> binmode(STDOUT);
>
> my $str;
> open my $fh, '>', \$str;
> my $workbook = Spreadsheet::WriteExcel->new($fh);
> my $worksheet = $workbook->add_worksheet();
> $worksheet->write_col(0,0, ['some','data','here']);
>
> warn $str;
> return $str;
> }
>
>
> The output is just a blank response, and the warn is blank as well.
I'm missing the call to $worksheet->close in that code. I bet that'll fix your
problem.
> The method I'm using to write the spreadsheet to a filehandle is pretty much
> straight out of the
> documentation<http://search.cpan.org/dist/Spreadsheet-WriteExcel/lib/Spreadsheet/WriteExcel.pm#new%28%29>,
> so I assume the problem is due to some CGI::App noobery on my part. The
> documentation's suggested methods for filehandles and mod_perl proved pretty
> fruitless as well.
>
> I guess I should mention I'm running on Windows, and that my current
> workaround is to create a file and provide the user with a link to it. That
> poses more problems, however, in regards to clearing out the directory and
> when to do so, and also authentication for access to the generated files.
You could always use IO::File->new_tmpfile to pass into new(), and afterwards
seek + print.
There are more complex suggestions I could give, but let's see where this gets
you first :-)
Rhesa
More information about the cgiapp
mailing list