PerlからExcelを操作する方法
PerlからExcelを操作するためには
- Win32::OLE
- SpreadSheet
- SpreadSheet::ParseExcel
- SpreadSheet::WriteExcel
- SpreadSheet::XLSX
- Excel
- Excel::Writer::XLSX
といったモジュールがあるみたいですが
ここでは、SpreadSheetを使ってやっていきます。
環境:Mac OS X Mountain Lion
◎ インストール ヾ(oゝω・o)ノ))
% sudo perl -MCPAN -e shell
cpan> install Jcode
cpan> install Unicode::Map
cpan> install Spreadsheet::WriteExcel
cpan> install Spreadsheet::ParseExcel
◎ 操作してみる ヾ(oゝω・o)ノ))
以下のコードを使って簡単に操作してみます。
# test1.pl #!/usr/bin/perl use strict; use warnings; use Spreadsheet::WriteExcel; # 新しいエクセルワークブックの作成 my $workbook = Spreadsheet::WriteExcel->new( "perlExcel.xls" ); exit;
ソースファイルが置かれたディレクトリに「PerlExcel.xls」が作成されました。
◎ データ(日本語を含む)を読み込んでみる ヾ(oゝω・o)ノ))
PerlExcel.xls
このようなデータを読み込んでみたいと思います。
ここで、、
日本語を扱う場合はもう少し作業が必要になります。
1. http://search.cpan.org/からSpreadsheet::ParseExcelをダウンロードし、解凍
2. 「CP932Excel.map」をUnicode::Mapがインストールされたディレクトリの/MS/WIN/にコピー
3. Unicode::Mapの「REGISTRY」に赤文字部分を以下のように追加
・・・
name: CP932
srcURL: $SrcUnicode/VENDORS/MICSFT/WINDOWS/CP932.TXT
src: $DestUnicode/VENDORS/MICSFT/WINDOWS/CP932.TXT
map: $DestMap/MS/WIN/CP932.mapname: CP932Excel
srcURL: $SrcUnicode/VENDORS/MICSFT/WINDOWS/CP932.TXT
src: $DestUnicode/VENDORS/MICSFT/WINDOWS/CP932.TXT
map: $DestMap/MS/WIN/CP932Excel.mapname: CP936
・・・
4. Spreadsheet::ParseExcelの「FmtJapan.pm」を以下のように変更
変更前:return bless $self, $class;
変更後:return bless $self, "$class";
では、以下のソースコードを使ってデータを読み込んでみる♩
# test2.pl #!/usr/bin/perl use strict; use warnings; use Spreadsheet::ParseExcel; my $input_file = $ARGV[0]; my $parser = Spreadsheet::ParseExcel->new(); my $format = Spreadsheet::ParseExcel::FmtJapan2->new(Code => 'utf8'); my $workbook = $parser->parse( $input_file, $format ); # ワークシートの読み込み for my $worksheet ( $workbook->worksheets() ) { my ( $row_min, $row_max ) = $worksheet->row_range(); my ( $col_min, $col_max ) = $worksheet->col_range(); for my $row ( $row_min .. $row_max ) { for my $col ( $col_min .. $col_max ) { my $cell = $worksheet->get_cell( $row, $col ); my $cell_in = $cell->value(); print "[$row][$col] : $cell_in", "\n"; next unless $cell; } } }
% perl test2.pl perlExcel.xls
[0][0] : A [0][1] : B [0][2] : C [1][0] : あ [1][1] : い [1][2] : う
表示されました。めでたしめでたし
ちなみに、ここではxls(Excel97-2003)しかサポートされていないので
xlsxを使うためにはSpreadsheet::XLSXが必要になるみたい (╭☞•́⍛•̀)╭☞