9

Spreadsheet::ParseExcel次のようにExcelスプレッドシートファイルを解析するために使用しています

my $FileName = "../excel.xls";
my $parser   = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse($FileName);

そして、このようにセルから値を読み取る

$product = $worksheeto->get_cell( $row, 0 )->value();

問題は、たとえば、フランス語の文字がある場合à、それが表示されることです。ò

使用した解析にエラーがないことを確認するために

print unpack('H*', $product) . "\n";

したがって、オンラインの16進数から文字列へのコンバーターを使用すると、à.

私も試しました

use utf8;
binmode(STDOUT, ":utf8");

àしかし、私が得る代わりに

正しい文字を取得する方法はありますか?

4

2 に答える 2

8

Spreadsheet::ParseExcel::FmtUnicodeなどのフォーマッタでファイルを解析してみてください。

use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::FmtUnicode;
#use Spreadsheet::ParseExcel::FmtJapan;

my $FileName = '../excel.xls';
my $parser   = Spreadsheet::ParseExcel->new();             
my $formatter = Spreadsheet::ParseExcel::FmtUnicode->new();
my $workbook = $parser->parse($FileName,$formatter);

ドキュメントに次のように記載されているため、FmtJapan も試してください。 Spreadsheet::ParseExcel :: FmtJapan フォーマッタは Unicode もサポートしています。デフォルトのフォーマッタでエンコードの問題が発生した場合は、代わりにそれを試してください。

*更新: ギリシャ文字を含む xls ファイルで自分で試してみましたが、 FmtUnicode または FmtJapan では機能しませんでした。次に、このperlmonksの投稿を見つけ、提供されたMy::Excel::FmtUTF8モジュールを使用して、セルの値を$cell->value().

于 2013-10-01T12:25:08.083 に答える