- - PR -
POIを使用してEXCELから値を取得する方法
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-08-22 02:11
POIを使用してEXCELから値を取得しようと考えています。
値自体の数値・文字列・日付などを型ごとに メソッドを換えて取得ができています。 ただ、書式が日付だとYYYY/MM/DDで取得されてしまいます。 Excelを開いたときに、YYYY/M/Dで表示されている状態で取得できません。 YYYY/MM/DDはYYYY/MM/DDのままで、 YYYY/M/DはYYYY/M/Dのままで、 Javaで取得したいので、ここでつまづいてます。 (ExcelファイルをExcelアプリで開いたときに画面に表示されている状態) Excelにはどんな値が入ってくるかわかりませんし、 型(数値か文字列か日付か)もわかりませんし、 書式(YY年MM月DD日や整数・小数など)もわかりません。 Excelのセルに'を付ければ解決できそうですがExcelは変更できず、 Javaのプログラム内で解決しなければならない状況です。 どなたか、いい方法をご存知ありませんか? POIのバージョンは2.5です。 以上、よろしくお願い申し上げます。 [ メッセージ編集済み 編集者: ステイ 編集日時 2005-08-22 10:48 ] | ||||||||||||
|
投稿日時: 2005-08-22 10:29
質問の意味がよく判らないのですが・・・
1. *.xlsファイルをPOIで読み込んだ際の(Javaの変数の)値 2. *.xlsファイルにPOIで書き込んだものをExcelで開いた時の表示 のどちらで悩まれているのでしょうか? | ||||||||||||
|
投稿日時: 2005-08-22 10:47
Desmoさん、レスありがとうございます。
説明の仕方が分かりづらくて申し訳ありません。 自分の文章の表現力を恥ずかしく思う限りです。 1. *.xlsファイルをPOIで読み込んだ際の(Javaの変数の)値 で、悩んでいます。 自分でも、試行錯誤していろいろ試しておりますが、 突破口が開けそうにありません。 もしご存知の方がいらっしゃったらご教授をお願いします。 | ||||||||||||
|
投稿日時: 2005-08-22 11:23
こんにちは。
セルの値を読み込んだ結果が日付型データだった場合に セルの書式設定で定義された値を反映させてStringオブジェクトを生成したい。 といった感じでしょうか。 現状YYYY/MM/DDの形で取得されてしまうとのことですが、日付型で値を取得する 際のコード内で"yyyy/MM/dd"を固定指定していたりはしませんか? どのような方法にしろ、最終的にPOIでセルの書式定義を取得する方法があれば、 要件を満たすことが出来るかと思いますが、私が見る限りではソースに改修を 入れないと無理そうな感じでした。。 | ||||||||||||
|
投稿日時: 2005-08-22 11:23
# 私はPOIは全然詳しくないので、以下そのつもりで見てください。
値をどう取るか?、ではなく、 セルの書式情報(Excelの「表示形式」)をどう取るか?、 の問題のような気がしますが。 その上で、その書式情報に合わせてJavaでフォーマッティングする、とか。 Excelで開いたときにセルで表示されている値をそのまま取得する、っていうのはアプローチとして無理がないですか? # masaさんとかぶった・・・ [ メッセージ編集済み 編集者: Cluster 編集日時 2005-08-22 11:25 ] | ||||||||||||
|
投稿日時: 2005-08-22 12:28
ここで言うPOIって、POIのHSSFコンポーネントの事ですか?
私は HSSFしか使ったことが無いで、これ以外の場合ですと参考にならないかもしれません。 HSSFでは日付のセルのデータの取得時に HSSFCellクラスのgetDateCellValue()メソッドを使用します。 これは Date型を返すので、あとはこれをどう使う(表示する)かだと思います。 Java上で好みの書式に変換してやれば良いと思います。 > Excelにはどんな値が入ってくるかわかりませんし、 > 型(数値か文字列か日付か)もわかりませんし、 getCellType()メソッドで、数値か文字列かの区別はつきます。(但し日付は数値とみなされるようです) > YYYY/MM/DDはYYYY/MM/DDのままで、 > YYYY/M/DはYYYY/M/Dのままで、 > Javaで取得したいので、 繰り返しになりますが取得はあくまでもDate型で行い、あとは表示の問題になるとおもいます。Excelと同じ表示にしたいのであれば、セルの書式を取得する必要があると思いますが、そういうメソッドがあったかどうか・・・? (POIのAPIは結構充実しているので、それくらいある気がしますが確認していません) ただ単に値を取得するよりも高度なプログラムになることは間違いないと思います。 | ||||||||||||
|
投稿日時: 2005-08-22 13:03
masaさん、Clusterさん、Desmoさん、返信ありがとうございます。
そうです。まさしく、おっしゃるとおりの事を実践したいと考えております。 固定指定はしてないのですが、デフォルトでそういう書式になってしまうのかもしれないので、 見落としている部分があるかもしれません、もう一度、現ソースを見直します。
まだJavaを始めて数週間で、以前にVBやExcel-VBAを使ったことがありまして、 同じようなことができるかと考えておりましたが、さすがにそうは簡単にいかないようですね。 僕も正直、一筋縄にはいかなそうな気が一週間くらい前から感じておりまして、 実はしばらく保留中にして棚上げしていた問題なのです。 ただユーザのことを考えると、この問題はなかなか妥協できない点ですので、 もう少しねばってみます。
そうです。HSSFコンポーネントのことです。 ただ単に値を取得するよりも、易しくはなさそうですが、 書式をとってくるところから考えはじめたいと思います。 皆様、思い出されたりしたことなどありましたら、引き続きご教授くださいませ。 以上、よろしくお願いいたします。 [ メッセージ編集済み 編集者: ステイ 編集日時 2005-08-22 13:05 ] | ||||||||||||
|
投稿日時: 2005-08-22 13:37
HSSFCellからHSSFCellStyleを取得してHSSFDataFormatを取り出すことができます。
http://jakarta.apache.org/poi/apidocs/org/apache/poi/hssf/usermodel/HSSFDataFormat.html APIを見ていけばどのメソッドかはお分かりになると思います。 ステイさんが要望しているところは 実際やるとshort型でどのタイプか取り出し、それを文字列に変換するのですが POIではデフォルトに定義している分しか文字列に変換できないようです。 (Javadoc参照のこと) とすると YYYY/M/DやYYYY/MM/DDといった文字列は取り出せないので POIでは難しいのではないでしょうか? jcomやjacob?だったかなこのライブラリでActiveX経由のエクセル操作ならできそうで 環境は限定されますがこちらなら実現できるんでは、、 |