一.问题场景
使用若依框架在导出Excel模板时要填写身份证号,但是身份证号是个很长的数字,填写时会变成科学计数法,这就有bug了。如下图所示,我输入的值是112233202409291234,回车后变成了科学计数法,值也变成了112233202409291000,这样肯定是不对的。当然我们可以在输入前把单元格格式设置成文本,但是这对于用户来说是不愿意的。
二.解决方案
修改ExcelUtil类的writeSheet方法,增加如下内容:
放上代码,方便复制粘贴:
// 将所有的单元格类型都设置为文本 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); }
三.实现思路
利用POI中Sheet类的setDefaultColumnStyle(int var1, CellStyle var2)方法,其中入参var1表示列索引。首先我们知道导出的excel模板有多少列,即fielss.size()方法,然后利用setDefaultColumnStyle()方法把每一列都设置成文本格式。
效果如图,单元格样式已经变成了文本格式!
上面是设置所有的单元格,如果只想设置某一个单元格为文本的话,可以使用下面的方法:
CellStyle cellStyle = wb.createCellStyle(); DataFormat dataFormat = wb.createDataFormat(); cellStyle.setDataFormat(dataFormat.getFormat("@")); cell.setCellStyle(cellStyle);