6
出现的问题:
如果只build 了 ExcelWriter对象后,但经过逻辑判断后没使用该对象真实写出. 会生成一个后缀为.xlsl的文件,此文件并不是真实可用的excle文件,所以打开/使用会报错.
原因:在EasyExcel.write("文件名").build()中只是简单的new File("文件名")了一下, 并没excel文件生成, 此时的文件其实是不可用的
场景: ExcelWriter excelWriter = EasyExcel.write("文件名").build();
try {
WriteSheet writeSheet = EasyExcel.writerSheet(i, "模板" + i).head(DemoData.class).build();
// list为空则直接跳过了真实写出这一步. 源码中做了非空判断, 用户不做该判断反而是更好
if(list不为空){
excelWriter.write(data, writeSheet);
}
} finally {
excelWriter.finish();
}
竞品:
hutool生成的是真实excel
public static void main(String[] args) {
ExcelWriter writer = ExcelUtil.getWriter("文件名");
writer.close();
}
poi需要手动创建一个sheet才可以创建一个真实的excel
public static void main(String[] args) {
Workbook workbook = new XSSFWorkbook();
workbook.createSheet("Sheet1");
try {
FileOutputStream outputStream = new FileOutputStream("文件名");
workbook.write(outputStream);
workbook.close();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
结论&力所能及的
- 上方库我都在真实库用过, easyExcel早就如雷贯耳, 是最近开始用easyExcel. 我认为该设计会增加出bug的概率(我就出了), 一些认为理所当然的事情,发现并不是这样.
- 这种issue应该有过吧(我没找到), 如果不做能烦请解释一下原因吗, 有什么考量
- 改动应该挺大, 牵扯到重写表头, 第一个sheet是否是真实的, 追加数据等问题, 如果做的话我愿意出一份力
我看有很多issue都是有该原因产生的 [#3351 ]