- - PR -
POIを使用してEXCELから値を取得する方法
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-08-22 13:52
こんにちは。
私が先ほど調べた内容をメモしておきます。 ご参考までに。 書式情報はHSSFCellStyle.getDataFormat()と結びついている。 ただし、ここで返される値はshort値。 このshort値はHSSFWorkBook-WorkBook-formats-FormatRecord インスタンスのfield_1_index_codeと結びついているようだ。 FormatRecordとして登録されているレコードならば、 HSSFDataFormat format = book.createDataFormat(); format.getFormat(style.getDataFormat()); のようなコードで値を取得出来る。 ただし、FormatRecordはユーザ定義として新規に書式が登録さ れた場合などにしか作成されず、(完全な条件は未確認)エク セルが元々持つ"平成9年3月4日"などの書式は、ファイルでは なくアプリケーションが持つ情報のようだ。 従ってコード内で取得することは出来なそうな気がしたが、POI ではそのようなデフォルトの書式情報をHSSFDataFormat内で固定 値として管理しているっぽい。 デフォルト値はここから取得出来るのかー。と思ったら、英語版 の内容がそのままハードコードされている。 この中身を日本語版のエクセルアプリが持つ書式情報とマッチす るよう書き換えてあげれば、うまく動作させることが出来そう。 ただし、「日本語版のエクセルアプリが持つ書式情報」と対応す るshort値を何に設定してあげればいいのか分からないので×。 YYYY/M/D、 YYYY/MM/DD の2つの書式だけを対応させてあげればいいのなら、short値を調 べて独自の変換マップを持ったクラスを作成してあげれば、対応 できるかもしれない。 | ||||||||
|
投稿日時: 2005-08-22 16:48
いっきゅうさん、返信ありがとうございます。
僕も自分なりに調べていくうちに上記の方法に行き着きました。 上記の方法を試みたところ、 『yyyy/M/d h:m:s』形式でExcelでは表示されていても、 Javaで取得しようとすると『m/d/yy h:mm』で書式が取れてしまいます。 また、小文字のmで"月"も"分"も取れてしまうと、 Javaで日付フォーマットを変換しても、どちらも"分"になってしまいます。 いっきゅうさんの予想通り、この方法では難しいようです。 (この2つの壁をクリアできたらいけるのでしょうけど・・・)
いっきゅうさんのおっしゃる通り、 やはりPOIでは限界があるのでしょうか・・・ もう少し、調べてみます。 皆様、ご存知の方がいらっしゃいましたら、教えてください。 | ||||||||
|
投稿日時: 2005-08-22 16:49
masaさんへ
かなり突っ込んだ内容を教えてくださって、ありがとうございます。 投稿内容を熟読します。 [ メッセージ編集済み 編集者: ステイ 編集日時 2005-08-22 17:20 ] | ||||||||
|
投稿日時: 2005-08-22 21:54
こんばんは。
お世話になっております。
実践してみました。 上手くいきそうです。 ただ、やはり、 「日本語版のエクセルアプリが持つ書式情報」と対応するshort値 という大きな壁が立ちはだかってしまいます。 やはり、ここからは自力で、調べだす以外ないでしょうか? かなり前進してるとは思うのですが、まだ先は長そうです。 本当はYYYY/MM/DDとYYYY/M/Dの2種類だけではなく、 想定できる全ての書式を拾うことが目標なのですが、 あまりに作業時間がかかるようだと、別途代替案を考えねばなりません。 (最終目標は、Excelに表示されてる値を Javaプログラム内のString型で取得することです。) もし、 「日本語版のエクセルアプリが持つ書式情報」と対応するshort値 を知ってらっしゃる方がいらっしゃいましたら、それに関する情報をお持ちの方が いらっしゃったらご教授願えませんか? もしくは、それ以外の方法でもかまいません。 厚かましいとは思いますが、よろしくお願いいたします。 僕は、引き続き、この書式取得の方法で、 自力で少しずつ対応する値を導いていこうと考えております。 以上、よろしくお願い申し上げます。 [ メッセージ編集済み 編集者: ステイ 編集日時 2005-08-22 21:56 ] | ||||||||
|
投稿日時: 2005-08-22 23:05
こんばんは。
発見しました^-^ っhttp://sc.openoffice.org/excelfileformat.pdf これの160、161ページですね。 書式には条件文みたいなことも書けてしまうので、最終目標の達成は なかなか難しいかと思いますが、制限をつけることが許されるならば ある程度のレベルまでは持っていけそうな気がしてきました。 頑張ってくださいね | ||||||||
|
投稿日時: 2005-08-23 09:21
おはようございます。
masaさん、ありがとうございます。 リンク先、拝見しました。これは、すごいですね!!
早速、コードに反映させてみます。 本当にありがとうございます。 PS.検索のコツとか情報集めるコツってありましたら教えてくださいませ。 | ||||||||
|
投稿日時: 2005-08-24 12:22
masaさん、Clusterさん、Desmoさん、いっきゅうさん
ご教授いただきまして、本当にありがとうございました。 おかげさまで、条件を満たすことで解決ができそうです。 |