天天看点

Java使用poi操作excel注意事项Java使用poi操作excel注意事项

Java使用poi操作excel注意事项

1.如果只需要获取sheet信息,用流模式打开文件即可获取,消耗内存少

2.上传的文件需要校验,防止Excel包含异常的缓存文件,缓存文件可能会有几百兆,会瞬间造成内存溢出系统崩溃

3.文件校验逻辑,先判断zip炸弹,在解压文件到本地,解压时刻获取文件大小进行校验,并限制解压循环次数和文件个数,判断Excel中如果包含过大子文件则进行特殊提醒处理

4.ZipSecureFile.setMinInflateRatio(-1.0d),防止Excel解析时遇到zip炸弹

5.wb.setSheetName(index,名称),sheet改名,如果非必须,不要改名,小概率会引起文件报错,

6.FormulaEvaluator formulaEvaluator = wb.getCreationHelper().createFormulaEvaluator(),创建公式计算对象,一个workbook一个,避免重复创建消耗性能

7.获取合并区域的值切记合并后只有左上角有值,建议一个sheet统一先获取合并区域的值然后转Map,后续从Map中获取合并单元格的值,避免在获取合并单元格值的时候因为大量的合并单元格导致解析异常的慢

8.单元格数据需要按照类型来处理,字符串,公式,空白,数字,等自定义类型

9.数字最为复杂,包含各种自定义,日期,货币,小数

10.DataFormatter dataFormatter =new DataFormatter(),dataFormatter.formatRawCellContents(单元格值,cell.getCellStyle().getDataFormat(),cell.getCellStyle().getDataFormatString()),这样格式化数据样式是目前还原率最高的方式,但是还有10种左右自定义数据类型无法还原,usermodel模式,sax模式,easyExcel都有同样的问题,目前无法解决,等待poi更新

11.设置sheet可见,wb.setActiveSheet(sheetIndex),wb.setSelectedTab(sheetIndex),wb.setFirstVisibleTab(sheetIndex),来一套才可以正常展示