簡體   English   中英

更改Java Poi(Excel)中的單元格格式(長度?)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM