in reply to Re^2: WriteExcel unicode question
in thread WriteExcel unicode question


Okay, the part we were missing is that you were reading the data with Spreadsheet::ParseExcel.

You should be able to read and write from an Excel file without intervention. Here is a working example using the Greek file generated from the example file above:

#!/usr/bin/perl use strict; use warnings; use Spreadsheet::WriteExcel; use Spreadsheet::ParseExcel; my $parser = Spreadsheet::ParseExcel->new(); my $in_workbook = $parser->Parse('unicode_8859_7.xls'); my $out_workbook = Spreadsheet::WriteExcel->new('newfile.xls'); my $out_worksheet = $out_workbook->add_worksheet(); for my $in_worksheet ( $in_workbook->worksheets() ) { my ( $row_min, $row_max ) = $in_worksheet->row_range(); my ( $col_min, $col_max ) = $in_worksheet->col_range(); for my $row ( $row_min .. $row_max ) { for my $col ( $col_min .. $col_max ) { my $cell = $in_worksheet->get_cell( $row, $col ); next unless $cell; $out_worksheet->write( $row, $col, $cell->value() ); } } }
The version of Spreadsheet::ParseExcel that you are using, 0.32, is quite old. Try upgrading to the latest, 0.55.

If that doesn't work you could try specifying an alternative parsing formatter such as S::PE::FmtUnicode or S::PE::FmtJapan (despite the name it also handles general Unicode via Encode):

... use Spreadsheet::ParseExcel; use Spreadsheet::ParseExcel::FmtJapan; my $parser = Spreadsheet::ParseExcel->new(); my $formatter = Spreadsheet::ParseExcel::FmtJapan->new(); my $in_workbook = $parser->Parse('unicode_8859_7.xls', $formatter) +; ...
--
John.