[英]Change cell format (Length?) in Java Poi (Excel)
我一直在尋找實現此目的的方法,但只發現了幾種調整列大小的方法,這還不夠。
這很簡單:
當我將文件寫入excel文件時,數字會超過10.000.000,格式會發生變化,例如:
第11行:9.800.000
第12行:9.900.000
第13行:1.0E7
第14行:1.01E7
如何防止這種情況發生? 我需要一個完整的數字,因為以后我會從代碼中再次訪問此信息。
(我無法手動編輯excel,因為它是動態創建的,所以我猜想(並希望)某些Java POI類中有一個變量,我可以為其指定一個值以進行更改?)
謝謝你們。
這是單元格格式的情況,默認情況下,Excel對低於某個值的數字使用指數格式,對於2013版本,其低於1E10。 對於較舊的版本,我猜它是arround 1E7。
要解決此問題,您需要在使用HSSFCellStyle創建xls文件之前,在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)的輸出示例:
不要忘記導入必要的類。
從excel文件中提取值時,最簡單的方法可能就是轉換該值。
BigDecimal bigNumber = new BigDecimal(cell.getNumericCellValue());
//Use bigNumber when doing the calculations
根據您的示例,您必須將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格式: 如何在Excel的“設置單元格格式”對話框中控制和理解設置
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.