2017-09-20 24 views
0

私は、Java 1.6でapache poi 3.12でHSSFWorkbookを使用して、xlsファイルをタブ区切りのテキストファイルに変換しています。私processRecord方法では、私は次のコードでは、NumberRecord、NUMRECにFormatTrackingHSSFListenerを使用して数値フィールドから値を取得:Apache POI Java 6から8への相違

String value = formatListener.getFormatString(numrec);

は、これは21.9のように、値をとり、かつ最も近い整数に丸め。私の問題は、Java 1.8を実行している新しいサーバに変更したときに値が切り捨てられる代わりに切り捨てられて21.9が22ではなく21になるということです。私はApacheのpoiドキュメントを見てきましたが、次の質問への回答を求めています:

  • なぜこれが起こりますか? (最も重要ではない)
  • 値を取得してJava 1.8で切り捨てるのではなく丸めますか?
  • 丸めや切り捨てなしで元の形式で値を取得する方法はありますか?

は、私はすでにXLSファイルから値を取得する別の方法を試してみた:

String value = new DataFormatter().formatCellValue(cell);

が、私は同じ動作を取得します。

+0

Apache POIの最新バージョン(現在3.17)をお試しになるとどうなりますか? – Gagravarr

+0

おそらくあなたはすでにチェックしていますが、numrec値がJavaバージョン間で常に同じであることを確認できますか?あなたは単体テストケースを書くことができます。 – Anon

+0

最新のpoi(3.17)に更新すると、仕事をしました、ありがとう皆 – user3813942

答えて

0

私はJava 8を持っていませんが、Java 7と次のApache poiライブラリは問題ありません(私は問題のApache poiバージョンと思います)。

public static void main(String[] args) { 

    try { 
     FileInputStream is = new FileInputStream(new File("C:\\ook.xls")); 
     HSSFWorkbook wb = new HSSFWorkbook(is); 
     HSSFSheet sheet = wb.getSheet("Sheet1"); 

     Row row = sheet.getRow(0); 
     Cell cell = row.getCell(0); 

     System.out.println(cell.getNumericCellValue());//returns a double value so its ok 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    finally{ 

    } 
} 

のApache POIライブラリ:

enter image description here

結果:

enter image description here

Excelファイル:

enter image description here