2015-12-21 148 views
0

我一直在尋找一種方法來做到這一點,但只找到了一些調整列大小的方法,但還不夠。在Java Poi(Excel)中更改單元格格式(長度?)

It's簡單:

當I'm書面方式到一個Excel文件,我得到一個點,數字獲得比10.000.000高,格式變化,例如:

行11:9.800.000

行12:9.900.000

行13:1.0E7

行14:1.01E7

我該如何防止這種情況發生?我需要整個號碼,因爲我稍後從我的代碼中再次訪問這些信息。

(我不能手動編輯出類拔萃,我dinamically創建它,我想(和希望)存在一些Java POI類變量,我可以分配一個值,這個改變?)

謝謝你們。

+0

你將什麼樣的格式應用到單元格中?如果它不是已經被請求的數字比那更多,如果你改變它會發生什麼? – Gagravarr

回答

1

最簡單的方法可能是在從Excel文件中提取它時轉換該值。

BigDecimal bigNumber = new BigDecimal(cell.getNumericCellValue()); 
//Use bigNumber when doing the calculations 
+0

這工作。謝謝! – Tuzane

1

根據你的榜樣,你必須設置DataFormat"#.000"

DataFormat format = workbook.createDataFormat(); 
CellStyle cellStyle = workbook.createCellStyle(); 
cellStyle.setDataFormat(format.getFormat("#.000")); 
cell.setCellStyle(cellStyle); 

其中:

0 - 數字佔位符。例如,如果您鍵入8.9並且您希望它顯示爲8.90,則使用格式#.00

# - 數字佔位符。遵循與0符號相同的規則,但當您鍵入的數字在小數點的任何一邊的位數少於格式中的#符號時,Excel不會顯示額外的零。例如,如果自定義格式爲#。##,並且在單元格中鍵入8.9,則會顯示數字8.9。

更多的Excel格式:How to control and understand settings in the Format Cells dialog box in Excel

+0

不工作。無論如何感謝您的嘗試。 – Tuzane

2

這是一個單元格格式設置,缺省情況下使用Excel中指數格式數字低於一定值時,對2013年的版本是低於1E10。而對於舊版本,我猜它是1E7的。

爲了解決這個問題,你需要創建XLS文件,使用HSSFCellStyle之前,單元格的格式在Java代碼中,請檢查下面的代碼:

HSSFCellStyle style = workbook.createCellStyle(); 
style.setDataFormat(workbook.createDataFormat().getFormat("#")); 

Double d = 10000000000.0; 
thecell.setCellValue(d); 
thecell.setCellType(Cell.CELL_TYPE_NUMERIC); 
thecell.setCellStyle(style); 

您可能還需要重新大小的列配合通過添加

sheet.autoSizeColumn(0); 

這裏的數量是與所述單元格的格式(A1)和不具有它(B1)的輸出爲例:

exemple with the cell formatting

不要忘記導入必要的類。