[alibaba/easyexcel]多行表头,合并单元格表头无法按名称识别

2024-05-09 717 views
7

EasyExcel版本:3.1.0-3.1.2 demo.xlsx wps编辑了F列表头,取消合并,合并单元格,F2单元格值被清空。 导致导入时,无法按照F列的名称识别导入属性。

DefaultAnalysisEventProcessor 中只按第二行单元格数据识别处理对象,导致无法识别属性,必须采用index

if (!isData && currentHeadRowNumber == rowIndex + 1) { this.buildHead(analysisContext, cellDataMap); }

回答

3

这个问题要如何解决,必须使用index吗?

3

把第二行写上 再重新合并 就可以了

6

我试过可以在AnalysisEventListener的invokeHeadMap或者invokeHead方法中补齐合并表头,然后补齐AnalysisContext.readSheetHolder().excelReadHeadProperty().getHeadMap()的表头映射关系就可以找到对应关系,这样就可以用name而不是index。

是不是可以给加一个AnalysisContext.readSheetHolder().excelReadHeadProperty().getHeadMap()加一个回调方便修改。

2

这根本就不是个问题啊。 你修改了原本的excel,等于修改了元数据,还期待和以前的解析是相同的吗。

4

并不是修改了,而是读取合并表头的问题。 Snipaste_2023-03-29_15-58-20

这是从其他系统导出的excel,合并表头只有第一行有值。 像这种excel表头读取的时候就有问题,因为表头的列导出的时候可以随意更改顺序,所以没办法试用index来确定列。

Snipaste_2023-03-29_16-01-19

6

我听懂你的问题了,合并之后单元格的数据和合并之前是可以没关系的。 你可以粗略理解为一个合并之后的大单元格盖在了你合并之前的小单元格上。 所以你需要做的是把小单元格的数据保留,而不是删除

7

可是我没有办法修改导出这个excel的功能,因为这是其它系统做的事情。你有其他更好的建议吗 :)

4

并不是修改了,而是读取合并表头的问题。 Snipaste_2023-03-29_15-58-20

这是从其他系统导出的excel,合并表头只有第一行有值。 像这种excel表头读取的时候就有问题,因为表头的列导出的时候可以随意更改顺序,所以没办法试用index来确定列。

Snipaste_2023-03-29_16-01-19

这种情况我将第2行作为表头的时候读取不到“客户名称-名称”和 “客户名称电话” 这种列,将第3行作为表头的话又读取不到像“合同编号*”这种的合并单元格表头,所以陷入了两难

5

啊感觉是个很难顶的问题,index肯定能解决但是就不动态了。 如果你的excel是固定的那就用index解决吧

5

痛点我会记录的 之后有优雅方式我来reply

4

非常感谢!

5

遇到同样问题,插眼