- PR -

poiを用いたセルの取得方法

1
投稿者投稿内容
未記入
会議室デビュー日: 2005/12/09
投稿数: 3
投稿日時: 2005-12-09 15:44
ただいまPoiを使用してJavaアプリケーションを作成しております。
Excelよりデータを取得する際にセル内に「123,456,789,012」とあった場合、
getNumericCellValue()では取得できませんでした。

ex.「123,456,789,012」と入力された数値型のセルを参照し、値を取得する。
String retValue = String.valueOf(cell.getNumericCellValue());

このロジックではcellの参照先は正しいものが指定されており、
そこには上記の数値が入っています。
取得した結果、retvalueには「1.23456789012E11」等で帰ってくる為、
getNumericCellValue()では値をint型で取得し、double型で戻しているような気がします。
もしこれを正常な値(今回のケースでは123,456,789,012と取得したい)で取得したい場合はどのようなロジックが必要でしょうか?
ご存知の方いらっしゃいましたらご教示ください。

シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2005-12-09 15:54
POIは、POIが内蔵するエクセルファイルパーサがオブジェクトモデルを構
築する際に、数値型セルの値をdouble決め打ちで保管しています。
ですので、数値型のセルからはdouble型でしか値を取得することが出来ない
はずです。

桁落ちが発生して困るような精度の数値をやり取りしたい場合、

・Excelセルには文字型のセルとを定義し、そこに値を文字列として記述する
・POIからは文字列として取得する

とすべきかと思います。
未記入
会議室デビュー日: 2005/12/09
投稿数: 3
投稿日時: 2005-12-09 16:01
>シュンさん
早速の回答ありがとうございます。
自分もその方法を考えたのですが
今回セルの書式を固定で持つことが出来ません。
その為、getCellType()を使用し数値型であると判断した場合、
下記のような処理を行いたいと思います。
getNumericCellValue()を使用してもdoubleにてセルの値を判断しているとの
ことですが、今回のケースでは12桁を整数値を取得するのですが
double型であれば問題ないような気がしますが、そういうわけではないのでしょうか?
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2005-12-09 16:13
ああ、今回の問題となる箇所は、POIではなくて「12桁整数値を持つ
double型変数を文字列化する処理」ですね。すみません、良く分か
っていませんでした。

String#valueOf(double)は、"X.XXXEXX"という文字列を作ってし
まいますので、別のメソッドを呼んでください。

String.valueOf((long)cell.getNumericCellValue());
未記入
会議室デビュー日: 2005/12/09
投稿数: 3
投稿日時: 2005-12-09 16:20
>シュンさん
アドバイスのメソッドをしようしたところ、正常に
値をとることが出来ました。
ありがとうございました。

----------解決済み----------
1

スキルアップ/キャリアアップ(JOB@IT)