2017-09-26 31 views
0

私はxlsxファイルを持っています。私はJava 6でApache poi 3.17を読んでいます。あるインスタンスでは、値が123456789011のセルがあります。これはJavaに数えられたCellTypeEnum Cellとして読み込まれます。私はこのようなセルの値を取得するためにDataFormatterを使用する場合:Apache POI DataFormatterは科学的表記を返します

DataFormatter formatter = new DataFormatter(Locale.US); String strVal = formatter.formatCellValue(cell);

を文字列値は、「+ 11 1.234567」として出てきます。私は "123456789011"というセルに本当の価値が必要です。どうすれば入手できますか?

すでにJavaでBigDecimalを使用して文字列を変換しようとしましたが、これは指定された情報で可能な限り最高のため "123456700000"を返します。つまり、実際のセルオブジェクトから正しい値を取得する必要があります。私もcell.getNumericCellValue()を使用しようとしましたが、元の値を扱うには小さすぎる制限を持つdoubleを返します。したがって、他の取得メソッドと同じ問題を持つ "1.234567E11"として取得されます。

xlsxに入力された元のCellからStringとして値を取得する方法はありますか?私は元のxlsx以上の力はありません。

ありがとうございます。

+1

なぜCell.getNumericCellValue()を使用しないのですか?書式設定を適用せずに実際の値をdoubleとして返す必要があります。 – centic

+0

これは質問セントセントでカバーされています – user3813942

+0

ここに表示しようhttps://stackoverflow.com/questions/16098046/how-to-print-double-value-without-scientific-notation-using-java – matrix

答えて

0

BigDecimalのtoPlainString()メソッドを使用します。それは科学的記法を取り、対応する数値のString値に変換します。

私はこれをやってみました:(私はNUMERICなどの細胞タイプで、私のシートのセルA1に番号123456789011を持っている)

Row row = sheet.getRow(0); 
Object o = getCellValue(row.getCell(0)); 
System.out.println(new BigDecimal(o.toString()).toPlainString()); 

getCellValue方法は、細胞を読み、私の一般的な方法である:

public Object getCellValue(Cell cell) { 
     if (cell != null) { 
      switch (cell.getCellType()) { 
      case Cell.CELL_TYPE_STRING: 
       return cell.getStringCellValue(); 

      case Cell.CELL_TYPE_BOOLEAN: 
       return cell.getBooleanCellValue(); 

      case Cell.CELL_TYPE_NUMERIC: 
       return cell.getNumericCellValue(); 
      } 
     } 
     return null; 
    } 

希望します。

+0

これはそれを解決しました、ありがとう、私は自分自身でそれを考え出したことはありませんでした。 – user3813942

関連する問題