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

#####  CGI::Application community mailing list  ################
##                                                            ##
##  To unsubscribe, or change your message delivery options,  ##
##  visit:  http://www.erlbaum.net/mailman/listinfo/cgiapp    ##
##                                                            ##
##  Web archive:   http://www.erlbaum.net/pipermail/cgiapp/   ##
##  Wiki:          http://cgiapp.erlbaum.net/                 ##
##                                                            ##
################################################################

Reply via email to