既存のxlsファイルを読み込み、特定の箇所にデータを差込みして出力させたいため、

MS-Excelのxlsファイルの内部フォーマットを解説しているサイトを探しています。
(OLEは使えないので、自力で解析してparseしようと思っています)
MSのサイトも探してみたのですが、PDFのフォーマットのようには公開されていないのでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:dasm No.1

回答回数66ベストアンサー獲得回数0

ポイント30pt

218 ページもあって読むのはしんどそうですが、探せばあるようですよ。

BIFF7 などのキーワードも混ぜると探しやすいと思います。

id:onten

なるほど、OpenOfficeですか。

しかし、OpenOfficeのExcelファイルはMSのものと微妙に互換性がないのが不安です。

2004/12/09 03:35:19
id:zizz_walla No.2

回答回数121ベストアンサー獲得回数0

ポイント30pt

Javaを使うことができるなら、XLSファイルを操作することができます。

XLSファイルのフォーマットは OLE 2 複合ドキュメント形式になっていて構造が複雑ですので、OLEを使わずにアクセスすることは困難です。

http://www.stackasterisk.jp/tech/java/poi01_03.jsp

Jakarta POIを用いたExcelファイルの入出力 〜POI HSSFを用いたExcel簡単入出力〜

POIのサンプルです。

id:onten

POIの存在は知っていたのですが、これって本当に既存のXLSファイルにデータを差し込んで、そのまま出力できるんでしょうか?

PerlとPHPでは「読むだけ」や「書き出すだけ」のモジュールは存在するのですが、両方を兼ね備えたものがなかったもので。。。

JavaはPHP関数でcallできるので、POIで実現できるのであれば、非常に魅力的ではあります。

2004/12/09 03:39:15
id:shampoohat No.3

回答回数347ベストアンサー獲得回数0

ポイント40pt

URLダミーです。

文書の変な装飾などにより、たまにパースに失敗してPOI HSSFが例外出したり、読み込みは、改善が可能そうですが、差し込みなら安定して使えそうですね。プログラミングも楽ですし(開いて書き換え閉じるたけ。数十ステップ)。

id:onten

なるほど!

こちらで対応させていただきたいと思います。

ありがとうございました。

2004/12/09 13:03:39
id:stealthinu No.4

回答回数55ベストアンサー獲得回数1

ポイント20pt

perlに、OLE使わなくてもXLSデータを扱える、SpreadSheet::ParseExcelとWriteExcelモジュールがあります。

これを使うのが簡単ではないでしょうか。

http://www.drk7.jp/MT/archives/000565.html

Spreadsheet::WriteExcel = Perl で Excel 出力 :: Drk7jp

こちらにも同モジュールを使った例が出ています。

id:onten

私が調査した限りでは、ParseExcelはセルデータの読み込みだけをサポートし、チャートや罫線などのフォーマットは再現できず、読み込んだイメージ自体をWriteExcelモジュールで出力ができないため、差込ということは出来なかった気がしますが。。。

2004/12/09 13:14:49
id:stealthinu No.5

回答回数55ベストアンサー獲得回数1

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するのを簡単にしただけかもしれません。その場合は先の問題は解決されないと思うので、ダメだと思います。

参考までに。

id:onten

ありがとうございます。

参考にさせていただきます。

2004/12/13 06:08:16

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません