EasyExcel注意事项和发现bug

Posted by SFHJavaer on 2025-03-22
Estimated Reading Time 2 Minutes
Words 709 In Total
Viewed Times

注意事项:

直接写入可以和@Excelproperty配合,就可以根据注解的value定位

但是对于填充,注解可以不使用(使用也无效),但是填充占位符必须在excel模板文件中指明,所以如果对于单元格有数据校验的,不支持输入{.格式},那么就需要去掉数据校验

但是去掉校验的单元格,在导出后还是没有数据校验或下拉框,所以就有问题,这个时候只能手动加下拉框。

同时碰到了一些问题

:::success
如果excel未配置数据校验,当然也没有开启下拉框,那么在EasyExcel中可以进行条件覆盖(加下拉框)

但是产生问题:

指定的那行确实加入了条件,但是该列之下的原本有下拉框的单元格以及数据校验规则全被去掉了???而且前几个字段不会去除,第六个之后都被去除了

如果excel加了数据校验,但是没有开启下拉框,那么在EasyExcel中无法进行(新增约束的)条件覆盖

如果excel加了数据校验,也加了开启下拉框,那么在EasyExcel中无法进行(新增约束的)条件覆盖

:::

github issues:

实现模板填充时的静态下拉框,模板中的规则被去除 · Issue #4014 · alibaba/easyexcel (github.com)

触发场景描述

使用自定义注解实现模板填充时的静态下拉框时(仅对第一行数据无下拉框的补充,其他行均有下拉),发现第一行的需要条件的列都正常获得条件,但是其中某个字段除填充的第一行G2位置有条件外,该列的其余单元格(原本的模板就有数据校验和条件)数据校验和条件都被清除掉了,奇怪的是其它几个都正常,仅一个字段存在该错误

触发Bug的代码




展望原模板中整个校验规则被清空

提示的异常或者没有达到的效果

原模板中的字段校验或条件不应当被覆盖,给出的cellrange仅能作用于G2单元格

具体使用时:autoCloseStream()是只有当传入OutPutStream的时候,自动关闭使用的流,而不是关闭excelWriter,写入器可以在dofill或dowrite中自动关闭

所以如果使用fill,那么既需要关闭流,有需要关闭写入器

性能问题

EasyExcel本身就进行了内存映射等操作,即使不使用分段写入,那么性能也是比POI高的

注意多线程方法并不适合导出(写入),原因是难点在解决内存问题,而不是性能问题,多线程只会卡死


如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !