perlとプロセス置換でexcelファイルの差分を表示する

(view_excel3.pl)

$ more view_excel3.pl 
#!/usr/bin/env perl

use strict;
use Encode;
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 = encode('utf-8',$worksheet->get_name());

  for my $row ($row_min..$row_max){

    for my $col ($col_min..$col_max){
      my $cell = $worksheet->get_cell($row,$col);
      if($cell){
        print "<cell sheet:$sheet_name row=$row,col=$col>";
	print encode('utf-8',$cell->value());
        print "<\\cell>\n";
      }
    }

  }

}


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

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


kanagawa.xlsのE18のデータを"D"から"E"に書き換え、kanagawa2.xlsとして保存する。

プロセス置換

先日こんな機能があることを知りました。
http://news.mynavi.jp/column/zsh/012/index.html
http://d.hatena.ne.jp/kwg/20100108/p1



使ってみる。

$ diff <(./view_excel3.pl kanagawa.xls) <(./view_excel3.pl kanagawa2.xls)
90c90
< <cell sheet:神奈川県 row=17,col=4>D<\cell>
---
> <cell sheet:神奈川県 row=17,col=4>E<\cell>