Administrator
发布于 2024-07-22 / 6 阅读
0
0

2024 新项目开发问题日志记录6

1、使用easyexcel时,流的关闭问题

try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
.registerWriteHandler(new CustomCellStyleHandler())
.build()) {

}
上述情况是在try之内,似乎try-catch会对流进行处理,所以不用手动关闭

如果是

try {
excelWriter = excelWriterManager.getExcelWriter();
excelWriter.writeContext().writeWorkbookHolder().setOutputStream(response.getOutputStream());
}

这种的话貌似我建议是在最后对流进行关闭

// 结束 ExcelWriter 写入
excelWriter.finish();

2、如果使用缓存提前对ExcelWriter缓存,那么在第一次导表之后,可能会出问题

会报Attempting to write a row[0] in the range [0,63] that is already 
written to异常

原因是上一次导表时,使用的设置没有被清除,如果某些设置比如表头等
可以复用的话,可以对代码进行修改,下面补一个相关链接

由于初始化需要时间,我想减少这部分时间,我在容器启动时就创建10个并放在
map中,用一个删一个,没了之后再异步重新创建10个

http://t.csdnimg.cn/qCIkr

3、导表时,缓存下来的单元格式如果不进行清理的话,下次导表,格式就会出现问题

在使用ExcelWriter 时,会注册一个自定义处理器,自定义处理器有部分是
对单元格式数据进行处理上色的,由于处理的条件一致,只是处理列不一样
为防止重复生成设置,我会将设置好的格式放在缓存中。
但导一次表之后,再次导表时,会从缓存中取数据,此时得到的格式就会有问题。

我对此的做法是:
在自定义处理器中提供清理缓存的方法,在导表之后,调用方法清理,不对格式进行
永久式缓存。

4、数据库的字段类型为bigint时,如果使用long接收,数据会有些不一样,而使用string接收的话那就没有问题

如题

评论