近期一个项目中出现使用easyexcel导出表格非常慢的情况。数据量约10w行,50个列,排除从数据库取出和处理数据的时间,调用ExcelWriterBuilder
的doWrite
方法后需要1分多钟的时间才能够生成好文件,导致客户端经常请求超时,无法顺利导出文件。
通过排查,发现项目之前的开发封装的导出类在导出时使用了LongestMatchColumnWidthStyleStrategy
handler,该handler会根据表格内宽度最大的单元格自动设置列宽,而该功能需要遍历所有单元格的数据来计算宽度来实现,因而十分耗费性能和时间。
结合该项目导出的数据长度一般都比较固定,自动设置列宽并没有太大的必要性,因此决定去掉此handler,改为直接固定每列的宽度。在导出实体类中字段上增加@ColumnWidth(10)
注解,即可设置该列的宽度。
@ExcelProperty("姓名")
@ColumnWidth(20)
private String name;
经过以上调整后,导出同样数据量的耗时降低到了25s左右。
发表回复