[alibaba/easyexcel]用easyexcel导出excel 再

2024-05-23 998 views
3

用easyexcel导出excel 再用easyexcel读取之前导出的excel
不管excel有几行 Integer totalRowNumber = readSheetHolder.getApproximateTotalRowNumber(); 这条数据永远是1

回答

0

调试了下代码,easyexcel在解析xml的时候会获取 dimension标签中ref的值作为行数。然后我运行了下demo中的simpleWrite(),发现生成的excel转化成xml后dimension标签中的信息不太对: 2020-05-06_102321 实际的excel内容是这样: 3 所以dimension标签 中的内容应该是 :dimension ref="A1:C11"

3

这个问题是导出excel时使用了SXSSFWorkbook的原因,如果使用XSSFWorkbook就不会出错,参考SXSSFWorkbook的实现原理,通过这种流的方式生成excel的时候没有对xml中的dimension标签进行操作,所以导出之后再通过xml文件获取行数的时候就会出错,后续是不是可以考虑在导出excel后再增加一个修改dimension标签的操作,或者建议用户获取行数的时候自己数?

0

通过上述方案规避了此问题,不过需要通过反射获取XSSFSheet设置才行,代码如下: 没想到github的评论排版这么难用 WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").registerWriteHandler(new AbstractWorkbookWriteHandler() { @Override public void afterWorkbookDispose(WriteWorkbookHolder writeWorkbookHolder) { super.afterWorkbookDispose(writeWorkbookHolder); Sheet sheet = writeWorkbookHolder.getWorkbook().getSheetAt(0); if(sheet instanceof SXSSFSheet){ SXSSFSheet sh = ((SXSSFSheet) sheet); XSSFSheet _sh = (XSSFSheet) ReflectUtil.getFieldValue(sh,"_sh"); _sh.getCTWorksheet().getDimension().setRef("A1:" + CellReference.convertNumToColString(atomicMaxColSize.get()) + atomicRowSize.get()); } } }).build();

8

后续版本会解决

8

已经在3.0.0-beta1 版本修复,beta版本会在一个月内升级成正式版。