一.問題場景
使用若依框架在導(dǎo)出Excel模板時要填寫身份證號,但是身份證號是個很長的數(shù)字,填寫時會變成科學(xué)計數(shù)法,這就有bug了。如下圖所示,我輸入的值是112233202409291234,回車后變成了科學(xué)計數(shù)法,值也變成了112233202409291000,這樣肯定是不對的。當(dāng)然我們可以在輸入前把單元格格式設(shè)置成文本,但是這對于用戶來說是不愿意的。
二.解決方案
修改ExcelUtil類的writeSheet方法,增加如下內(nèi)容:
放上代碼,方便復(fù)制粘貼:
// 將所有的單元格類型都設(shè)置為文本 CellStyle cellStyle = this.wb.createCellStyle(); DataFormat dataFormat = this.wb.createDataFormat(); cellStyle.setDataFormat(dataFormat.getFormat("@")); for (int i = 0; i < fields.size(); i++) { sheet.setDefaultColumnStyle(i, cellStyle); }
三.實現(xiàn)思路
利用POI中Sheet類的setDefaultColumnStyle(int var1, CellStyle var2)方法,其中入?yún)ar1表示列索引。首先我們知道導(dǎo)出的excel模板有多少列,即fielss.size()方法,然后利用setDefaultColumnStyle()方法把每一列都設(shè)置成文本格式。
效果如圖,單元格樣式已經(jīng)變成了文本格式!
上面是設(shè)置所有的單元格,如果只想設(shè)置某一個單元格為文本的話,可以使用下面的方法:
CellStyle cellStyle = wb.createCellStyle(); DataFormat dataFormat = wb.createDataFormat(); cellStyle.setDataFormat(dataFormat.getFormat("@")); cell.setCellStyle(cellStyle);