@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

POIについて

1
投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2005/04/20
投稿数: 69
投稿日時: 2006-06-13 23:22
お世話になります。
POIについて質問させていただきたいのですが…

String型のセル値をgetStringCellValue()メソッドで取得する際、セル値に空白を含まないのに、取得した値の最後に空白が付加されるのですが、何が原因でしょうか?
アドバイスお願いします。
まじぇ
常連さん
会議室デビュー日: 2006/05/31
投稿数: 22
投稿日時: 2006-06-14 11:47
引用:

未記入さんの書き込み (2006-06-13 23:22) より:

String型のセル値をgetStringCellValue()メソッドで取得する際、セル値に空白を含まないのに、取得した値の最後に空白が付加されるのですが、何が原因でしょうか?
アドバイスお願いします。




http://jakarta.apache.org/poi/apidocs/index.html
上記javadocによるとgetStringCellValue()は推奨されてないようです。
getRichStringCellValue()メソッドを使ってみて下さい。

実際にそのライブラリを使用していないので原因は分かりませんが、
getRichStringCellValue()を使用しても改善がない場合は、trim()するしか
ないですかね・・・

あまり参考にならない返答で申し訳ないです。

岸川克己
会議室デビュー日: 2006/06/14
投稿数: 2
投稿日時: 2006-06-14 13:58
私も以前同じ問題に当たりました。

まずバグデータベースに載っています。
http://issues.apache.org/bugzilla/show_bug.cgi?id=27394

上記の情報だけではよく分からなかったのさらに調べました。
原因はExcelのふりがな機能にあります。
Excelではどうやらセルの値はそのまま入っているわけではなく、オブジェクトに対する参照のような形で持っているようです。

そのとき、例えば「東風(トウフウで変換)」と「東風(コチで変換)」の二つの値がそれぞれ別のセルに入っているとします。
その場合、この二つは同じ文字列ですが異なるオブジェクトになります。(ふりがな情報が違うので。メニュー〔書式→ふりがな→表示/非表示〕、で確認できます。

しかし、Javaプログラム上は同じ文字列になってしまうので、POIはセルの値を格納するときに仕方なく最後にスペースを追加しているようです。

解決法は2つあります。
簡単なのはTrim()することです。
Trim()できない場合は、処理の前にExcelシートの全セルからふりがな情報を削除すればいいです。
POIで読み込む前にやらなければいけないので、POIで処理する前に、VBAのマクロ等で処理します。
未記入
ベテラン
会議室デビュー日: 2005/04/20
投稿数: 69
投稿日時: 2006-06-14 22:28
ありがとうございます。

原因もわからず参っていました。
とても参考になりました!
今は、Trimで処理していますが、getRichStringCellValue()も試してみます。
えめ
会議室デビュー日: 2006/10/24
投稿数: 1
投稿日時: 2006-10-24 22:11
すごい時間が経ってますが、フォローさせていただきます。
自分はDBUnitが使っているPOIにてスペースが追加される問題が発生したため、検索していたらここにたどり着きました。

ふりがなが原因ということで、一旦古いExcelの形式で保存すれば、この呪縛から逃れられるのではないかと思い、Excel95形式で保存したら、そもそも読めなくなりました(笑)。で、Excel97-2003形式で保存したら、スペースが付かずにちゃんと読めるようになりましたので報告させていただきます。ただ、読めるようになったという一例を挙げているにすぎず、いろいろな検証を行ったわけではありませんのであしからず。。。
1

アイティメディアの提供サービス

ホワイトペーパー(TechTargetジャパン/閲覧には会員登録が必要です)

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