MS-Excelのxlsファイルの内部フォーマットを解説しているサイトを探しています。
(OLEは使えないので、自力で解析してparseしようと思っています)
MSのサイトも探してみたのですが、PDFのフォーマットのようには公開されていないのでしょうか?
218 ページもあって読むのはしんどそうですが、探せばあるようですよ。
BIFF7 などのキーワードも混ぜると探しやすいと思います。
Javaを使うことができるなら、XLSファイルを操作することができます。
XLSファイルのフォーマットは OLE 2 複合ドキュメント形式になっていて構造が複雑ですので、OLEを使わずにアクセスすることは困難です。
http://www.stackasterisk.jp/tech/java/poi01_03.jsp
Jakarta POIを用いたExcelファイルの入出力 〜POI HSSFを用いたExcel簡単入出力〜
POIのサンプルです。
POIの存在は知っていたのですが、これって本当に既存のXLSファイルにデータを差し込んで、そのまま出力できるんでしょうか?
PerlとPHPでは「読むだけ」や「書き出すだけ」のモジュールは存在するのですが、両方を兼ね備えたものがなかったもので。。。
JavaはPHP関数でcallできるので、POIで実現できるのであれば、非常に魅力的ではあります。
URLダミーです。
文書の変な装飾などにより、たまにパースに失敗してPOI HSSFが例外出したり、読み込みは、改善が可能そうですが、差し込みなら安定して使えそうですね。プログラミングも楽ですし(開いて書き換え閉じるたけ。数十ステップ)。
なるほど!
こちらで対応させていただきたいと思います。
ありがとうございました。
perlに、OLE使わなくてもXLSデータを扱える、SpreadSheet::ParseExcelとWriteExcelモジュールがあります。
これを使うのが簡単ではないでしょうか。
http://www.drk7.jp/MT/archives/000565.html
Spreadsheet::WriteExcel = Perl で Excel 出力 :: Drk7jp
こちらにも同モジュールを使った例が出ています。
私が調査した限りでは、ParseExcelはセルデータの読み込みだけをサポートし、チャートや罫線などのフォーマットは再現できず、読み込んだイメージ自体をWriteExcelモジュールで出力ができないため、差込ということは出来なかった気がしますが。。。
http://search.cpan.org/~kwitknr/Spreadsheet-ParseExcel-0.260...
Spreadsheet::ParseExcel::SaveParser - Expand of Spreadsheet::ParseExcel with Spreadsheet::WriteExcel - search.cpan.org
先にParseExcelを紹介したものですので、ポイントは結構です。
確かに、ParseExcelでパースさせてWriteExcelで書くのでは、他の罫線やらチャートやらはダメそうですね。
それでCPAN捜してみたら、
Spreadsheet::ParseExcel::SaveParser
というのがあって、「Write an Excel file with previous data」とのことで、AddCellとかいうインターフェイスもあるんで、これでなんとかならないかなあ、と。
試していないので、単にParseしてWriteするのを簡単にしただけかもしれません。その場合は先の問題は解決されないと思うので、ダメだと思います。
参考までに。
ありがとうございます。
参考にさせていただきます。
なるほど、OpenOfficeですか。
しかし、OpenOfficeのExcelファイルはMSのものと微妙に互換性がないのが不安です。