perlでexcelファイルの内容を表示する

(view_excel.pl)

#!/usr/bin/env perl

use strict;
use Spreadsheet::ParseExcel;

my $parser = Spreadsheet::ParseExcel->new();
my $workbook = $parser->Parse($ARGV[0]);

if(!defined $workbook){
  die $parser->error(),".\n";
}

for my $worksheet ($workbook->worksheets()) {

  my ($row_min,$row_max) = $worksheet->row_range();
  my ($col_min,$col_max) = $worksheet->col_range();
  my $sheet_name = $worksheet->get_name();

  print "<sheet_$sheet_name>\n";
  for my $row ($row_min..$row_max){

    print "<line_$row>\t";
    for my $col ($col_min..$col_max){
      my $cell = $worksheet->get_cell($row,$col);
      if($cell){
        print $cell->value(),"\t";
      }else{
        print "\t";
      }
    }
    print "<\\line_$row>\n";

  }
  print "<\\sheet_$sheet_name>\n\n";

}


実行してみる
excelファイルは→www.tepco.co.jp/images/kanagawa.xls

$ ./view_excel.pl ../Downloads/kanagawa.xls 
Wide character in print at ./view_excel.pl line 19.

Wide character in print at ./view_excel.pl line 27.
Wide character in print at ./view_excel.pl line 27.
	追加・変更などの掲載情報は随時更新されますので、都度、ご確認くださいますようお願いいたします。			平成23年4月5日18時	<\line_0>
Wide character in print at ./view_excel.pl line 27.
	なお、異なるグループにまたがっている地域は、電気を供給する変電所が異なる場合があることから、いずれかのグループでの停電となります。		<\line_1>
Wide character in print at ./view_excel.pl line 27.
Wide character in print at ./view_excel.pl line 27.
Wide character in print at ./view_excel.pl line 27.
Wide character in print at ./view_excel.pl line 27.
Wide character in print at ./view_excel.pl line 27.
	都県	市区郡	大字通称	グループ	サブグループ	<\line_2>
Wide character in print at ./view_excel.pl line 27.
Wide character in print at ./view_excel.pl line 27.
Wide character in print at ./view_excel.pl line 27.
	神奈川県	愛甲郡愛川町	春日台1丁目	4	D	<\line_3>
Wide character in print at ./view_excel.pl line 27.
Wide character in print at ./view_excel.pl line 27.
Wide character in print at ./view_excel.pl line 27.
	神奈川県	愛甲郡愛川町	春日台2丁目	4	D	<\line_4>
Wide character in print at ./view_excel.pl line 27.
Wide character in print at ./view_excel.pl line 27.
Wide character in print at ./view_excel.pl line 27.
	神奈川県	愛甲郡愛川町	春日台3丁目	4	D	<\line_5>
...


UTF-8フラグを外す処理を追加する
(view_excel2.pl)

#!/usr/bin/env perl

use strict;
use Spreadsheet::ParseExcel;
use Encode;

my $parser = Spreadsheet::ParseExcel->new();
my $workbook = $parser->Parse($ARGV[0]);

if(!defined $workbook){
  die $parser->error(),".\n";
}

for my $worksheet ($workbook->worksheets()) {

  my ($row_min,$row_max) = $worksheet->row_range();
  my ($col_min,$col_max) = $worksheet->col_range();
  my $sheet_name = $worksheet->get_name();
  $sheet_name = encode('utf-8',$sheet_name);

  print "<sheet_$sheet_name>\n";
  for my $row ($row_min..$row_max){

    print "<line_$row>\t";
    for my $col ($col_min..$col_max){

      my $cell = $worksheet->get_cell($row,$col);
      if($cell){
        print encode('utf-8',$cell->value()),"\t";
      }else{
        print "\t";
      }
    }
    print "<\\line_$row>\n";

  }
  print "<\\sheet_$sheet_name>\n\n";

}


実行してみる

$ ./view_excel2.pl ../Downloads/kanagawa.xls

	追加・変更などの掲載情報は随時更新されますので、都度、ご確認くださいますようお願いいたします。			平成23年4月5日18時		<\line_0>
	なお、異なるグループにまたがっている地域は、電気を供給する変電所が異なる場合があることから、いずれかのグループでの停電となります。					<\line_1>
	都県	市区郡	大字通称	グループ	サブグループ	<\line_2>
	神奈川県	愛甲郡愛川町	春日台1丁目	4	D	<\line_3>
	神奈川県	愛甲郡愛川町	春日台2丁目	4	D	<\line_4>
	神奈川県	愛甲郡愛川町	春日台3丁目	4	D	<\line_5>
...
	神奈川県	横浜市南区	六ツ川1丁目	5	D	<\line_2271>
	神奈川県	横浜市南区	六ツ川2丁目	5	D	<\line_2272>
	神奈川県	横浜市南区	六ツ川3丁目	5	D	<\line_2273>
	神奈川県	横浜市南区	六ツ川4丁目	5	D	<\line_2274>
<\sheet_神奈川県>


参照したURL:
http://search.cpan.org/~jmcnamara/Spreadsheet-ParseExcel-0.57/lib/Spreadsheet/ParseExcel.pm
http://www.ksknet.net/perl/wide_character.html