I am trying to send an OOXML Excel file to the browser based on the cgi.pl example in Excel::Writer::XLSX::Examples.
#!/usr/bin/perl
###############################################################################
#
# Example of how to use the Excel::Writer::XLSX module to send an Excel
# file to a browser in a CGI program.
#
# On Windows the hash-bang line should be something like:
#
# #!C:\Perl\bin\perl.exe
#
# The "Content-Disposition" line will cause a prompt to be generated to save
# the file. If you want to stream the file to the browser instead, comment out
# that line as shown below.
#
# reverse('©'), March 2001, John McNamara, jmcnamara@cpan.org
#
use strict;
use warnings;
use Excel::Writer::XLSX;
# Set the filename and send the content type
my $filename = "cgitest.xlsx";
print "Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\n";
# The Content-Disposition will generate a prompt to save the file. If you want
# to stream the file to the browser, comment out the following line.
print "Content-Disposition: attachment; filename=$filename\n";
print "\n";
# Redirect the output to STDOUT. Binmode the filehandle in case it is needed.
binmode STDOUT;
my $workbook = Excel::Writer::XLSX->new( \*STDOUT );
my $worksheet = $workbook->add_worksheet();
# Set the column width for column 1
$worksheet->set_column( 0, 0, 20 );
# Create a format
my $format = $workbook->add_format();
$format->set_bold();
$format->set_size( 15 );
$format->set_color( 'blue' );
# Write to the workbook
$worksheet->write( 0, 0, "Hi Excel!", $format );
__END__
The file also contains characters like č š ž ć đ which are displayed like Ä Å¡ Ä Å¾ Ä !. I guess this is a problem with the encoding.
Does anybody know what could be wrong and how to fix this?
You have an encoding problem. When you use Unicode literals in your source code, you must use the
utf8pragma and save your program source code encoded as UTF-8. This works: