2013-03-21 84 views
9

数字はすべてApache POIセルの値からDoubleで返されます。Apache POI - 数値を整数として取得

getCell(...).toString()とすると、Excelで「123」と表示された数値は「123.0」に変換されます。

数値が整数で表示されるはずです。 Excelで "一般"の書式設定を複製するためにJavaで適用する必要があるいくつかの魔法がありますか?浮動小数点値として

+0

を私はあなたのコード内であなたのソリューションを提供する場合 – winklerrr

答えて

15

Excelの保存ファイル形式のほぼすべての数字を、それはかなりはっきりしていないのにそれが本当にそこ

たものだとして、POIが戻って数値のセルのための二重のあなたを与える理由である私は、信じていますあなたの質問から、あなたがやりたいことは、Excelのように数字を含むJavaのStringオブジェクトを取得することですか?すなわち、生の数字にセルに適用された書式設定規則を適用し、フォーマットされた文字列を返すか?

もしそうなら、まったく同じことをしたいと思いますas in my answer here。見積もり:

あなたがしたいのはDataFormatter classです。これをセルに渡すと、そのセルにExcelが表示する文字列が返されます。文字列セルを渡すと、文字列が返されます。書式設定規則が適用された数値セルを渡すと、それに基づいて数値が書式設定され、文字列が返されます。

あなたの場合、数値セルには整数の書式設定ルールが適用されているとします。これらのセルをフォーマットするようDataFormatterに依頼すると、その中に整数文字列を含む文字列が返されます。

編集、明らかclicking through to the JavaDocs to be just that little bit too much work...を見つけるあなたの人々のために、あなたはDataFormatter.formatCellValue(Cell)メソッドを使用する必要があります。反復する場合は、あなたがの線に沿って何かをしたい:

Workbook workbook = WorkbookFactory.create(new File("input.xlsx")); 
DataFormatter formatter = new DataFormatter(); 
Sheet s = workbook.getSheetAt(0); 
for (Row r : s) { 
    for (Cell c : r) { 
    System.out.println(formatter.formatCellValue(c)); 
    } 
} 
+0

DataFormatterは私が探していたまさにです、本当に感謝してます。これは、一般的にはうまく動作し、アカウンティングの小数点以下の桁数を私に与えます。私が理解していないのは、なぜExcelに通貨記号がないときに私に「*」を与えているのかということだけです。 – wrschneider

+0

Excelがセルに適用されたフォーマット文字列をチェックする価値があります(Excelは、特に英語以外のロケールでファイルに書き込むものとは別のものを表示することがあります)。 – Gagravarr

+0

例を挙げておけば、本当に感謝していたでしょう。 – winklerrr

-1
// We create a variable of type Workbook and load the excel for reading the fields.  

HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream("LIST.xls")); 

// Getting the working sheet 

HSSFSheet sheet = workbook.getSheetAt(0); 

// Getting the working row 

HSSFRow row = sheet.getRow(0); 

// Store the numeric value on Int var 

int d = (int) row.getCell(0).getNumericCellValue(); 

// Printing the result 

System.out.println(d0); 

// Close the current workbook 

workbook.close(); 
+2

コードの説明を提供する必要があります。 – YoungHobbit

+0

このコードは、パーセンテージ、通貨記号、その他多くの場合にもフォーマットされたセルに対して誤った回答を返します。 – Gagravarr

+0

このコードはgetNumericCellValue()メソッドを使用して、Apache POIの読み取りとIntフィールドのみです – renelhs

関連する問題