Speadsheet::ParseExcel.pm - 0.2405

                                                by 川合孝典 (Hippo2000)

更新履歴はChangesをご覧ください

概要
  このモジュールは、まだαバージョンです。

  Microsoft社のExcelファイルをWindows以外のプラットフォームでも情報を取り
  出すようにするモジュールです。

動作確認
  DOS/V     WindowsNT ver.4.0    Perl5.005
  DOS/V     TurboLinux ver.6.0   Perl5.005
  Sun Sparc Solaris 2.6          Perl5.005
  DOS/V     Vine Linux 2.0       Perl5.005
  Macintosh JPerl、FreeBSDでも動いているというレポートをいただいています

  その他の環境で実行された方は、教えてください。
  動いても動かなくても、ご協力よろしくお願いします。 <(__)>

簡単な確認(testディレクトリ)
  sampleディレクトリに以下のファイルが入っています:

  sample.pl   :簡単なテストスクリプト(Spreadsheet::ParseExcel::FmtDefaultを使用)
  sample_j.pl :簡単なテストスクリプト(Spreadsheet::ParseExcel::FmtJapanを使用、コードを指定して出力)
  res_sample  :sample.plの実行結果
  res_sample_j:sample_j.plの実行結果(euc)

  dmpEx.pl  : Excelファイルの内容を表示する(Spreadsheet::ParseExcel::FmtDefaultを使用)
  dmpExj.pl : Excelファイルの内容を表示する(Spreadsheet::ParseExcel::FmtJapanを使用)

  簡単にこのモジュールの動きを確認したいだけであれば、dmpExj.plによって
  指定したExcelファイルの内容を表示させることができます。

  ex.
    # perl -I.. dmpExj.pl Excel/Test97.xls euc 

    「-I..」は、親ディレクトリにあるSpreadsheet::ParseExcel.pmを利用するために指定します。
    「Excel/Test97.xls」は対象となるファイル名。
    「euc」は漢字を出力するときの文字コードです。euc、sjis、jisなど
    Jcode.pmと同じです。

インストール
  OLE::Storage_Liteがインストールされている必要があります。
 Spreadsheet::ParseExcel::FmtJapanを使用する場合、Jcode.pmを必要とします。(他のモジュールを必要としません。)
 Spreadsheet::ParseExcel::FmtJapan2を使用する場合、Jcode.pm、Unicode::Mapを必要とします。
 Perlの標準的なインストールになりました。このモジュール自体はPerlのみで作成されているので、コピーするだけでも動きます。
  perl Makefile.PL
  make
  make test
  make install (rootになって)
FmtJapan2のために
 機種依存文字に対応するためのFmtJapan2を0.09から同梱します。
 利用するためにはUnicode::Mapをインストールするほか、以下の手順が必要になります:
  (1) 同梱される"CP932Excel.map"を適切なディレクトリにコピーします。
  (2) "CP932Excel"をマップ名として追加するために、Unicode::Map階層にあるREGISTRYに以下の行を追加します。
      (mapのディレクトリ名は適切なディレクトリ名にしてください)
name:    CP932Excel
srcURL:  $SrcUnicode/VENDORS/MICSFT/WINDOWS/CP932.TXT
src:     $DestUnicode/VENDORS/MICSFT/WINDOWS/CP932.TXT
map:     (コピー先のディレクトリ)/CP932Excel.map
# Don't remove this line
使い方
  use strict;
  use Spreadsheet::ParseExcel;
  my $oExcel = new Spreadsheet::ParseExcel;
  my $oBook = $oExcel->Parse('Excel/Test97.xls');
  
  #または日本語対応では
  use strict;
  use Spreadsheet::ParseExcel;
  use Spreadsheet::ParseExcel::FmtJapan;
  my $oExcel = new Spreadsheet::ParseExcel;
  my $oFmtJ = Spreadsheet::ParseExcel::FmtJapan->new(Code => 'euc'); #sjis、jisなどのコード
  my $oBook = $oExcel->Parse('Excel/Test97.xls', $oFmtJ);
  #情報の取り出し例
  my($iR, $iC, $oWkS, $oWkC);
  
  print "FILE  :", $oBook->{File} , "\n";
  print "COUNT :", $oBook->{SheetCount} , "\n";
  print "AUTHOR:", $oBook->{Author} , "\n";
  for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) {
    $oWkS = $oBook->{Worksheet}[$iSheet];
    print "--------- SHEET:", $oWkS->{Name}, "\n";
    for(my $iR = $oWkS->{MinRow} ; 
            defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) {
        for(my $iC = $oWkS->{MinCol} ;
               defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
            $oWkC = $oWkS->{Cells}[$iR][$iC];
            print "( $iR , $iC ) =>", $oWkC->Value, "\n" if($oWkC);
        }
    }
  }

問題点・バグ
最大の問題点であった「Exce97 デベロッパーズ キット」が手に入りました。
  ただただHirofumi Morisadaさんに感謝、感謝です。
  Excel97/2000で保存した場合、FmtJapanでは機種依存文字((株)やローマ数字のIなど)が〓になってしまいます。
  FmtJapan2では一応対応しているつもりです。
  まだテストもちゃんとできていません。とりあえずは動くでしょう。 <(__)>
  TurboLinux Version 6で作成しているので、他の環境でどうなるのかとても気に
  なります。
  Solarisでは動作確認をしてもらいました。(まだ不具合がありそうですが)

  コメント、バグレポートをお待ちしています 川合孝典:kwitknr@cpn.org

やらなきゃいけないこと:
  テスト!
  ドキュメントの整備
  出力への対応 (^_^) Spreadsheet::WriteExcelを使っていただくのが一番

  だれかまるごと引きついてくれる人はいませんか?(^^)

謝辞:
  こんな半端な状態で謝辞もあったものではありませんが、以下のプログラム、
  モジュールを参考にさせていただきました。

    xlHtml
    OLE::Storage
        herbert (OLE::Storageに同梱されるツール)
    Spreadsheet::WriteExcel

   Solarisのデバッグは島本武氏と山路春奈さんがいなければ、成立しませんでした。(cloudyに感謝)
  埜口晴美さんにはExcel2000のファイルをいただきました。
   Hirofumi Morisadaさんからの情報で文字列のバグを発見、修正することができました。
   そして「Excel97デベロッパーズキット」をどうもありがとうございました。

  その他、たくさんの方からの動作報告やバグレポートをいただき感謝、感謝です。