[Seasar-user:1652] Re: XlsReader による小数の扱い

nakamura toshihiro taedium
2005年 3月 21日 (月) 01:31:34 JST


中村です。

> > 要望なのですが、XlsWriterでExcelに小数値を書くときに、
> > 小数値を文字列扱いにするなどの対応をしていただけたらうれしいです。
> 
> POIは数値型のときには、Stringで取得させてくれないので
> 無理じゃないかと思います。

対応していただきたいと思ったのはExcelから「読む」処理ではなくて
Excelに「書く」処理です。

読み込みの際に対応できるならばそれに越したことはないのですが
XlsWriterをつかってExcelに書く際に小数値を文字列に変換してくれれば
うれしいなと思ったしだいです。

何がうれしいかというと

1. SqlReaderとXlsWriterを使ってDBからExcelへ書き込んだデータを、
そのまま(XlsReaderとSqlWriterを使って)DBに戻すことができる。
いまのままではExcelへ書き込んだ小数値を明示的に(アポストロフィを
つけるなどして)文字列に変換した後でないとこれができません。
たとえばDB2V8.2の場合、この作業をしないと、SqlWriterで実行不能な
INSERT文が発行されてしまいます(小数点以下桁数がカラムの定義と
異なるため)。

2. XlsWriterが小数を文字列として書き込みしてくれると小数点以下の桁数
を正しく保つことができる。いまのままですと、小数点以下5桁をもつDBの
データ「1.11000」はXlsWriterでExcelに書き込まれると「1.11」となって
しまいます。S2UnitでDBから取得した「1.11000」とExcelの「1.11」を比較
した場合、これらは違う値とみなされるので悩ましいです。
XlsWriterが文字列として「1.11000」をExcelに書き込めば正しい桁数が保たれます。

org.seasar.extension.dataset.impl.XlsWriterのsetValue(cell, value)で
valueがBigDecimal型のときにHSSFCell#setCellValue(double)ではなく
HSSFCell#setCellValue(String)を使うように変更して試してみたのですが
上記1と2はうまくいきました。

もしよろしければお願いします。
--
Nakamura Toshihiro





Seasar-user メーリングリストの案内