[alibaba/easyexcel]多行表头 二级表头有相同名称时 读入和写出都

2024-05-24 460 views
1

@Data public class Demo { @ExcelProperty({"责任人","姓名"}) private String name; @ExcelProperty({"责任人","手机号"}) private String mobile; @ExcelProperty({"创建人","姓名"}) private String cName; @ExcelProperty({"创建人","手机号"}) private String cMobile; public Demo(String name,String mobile, String cName,String cMobile){ this.name = name; this.mobile = mobile; this.cName = cName; this.cMobile = cMobile; }

public static void main(String[] args) {
    a();
}

public static void a(){
    List<Demo> demoList = new ArrayList<>();
    demoList.add(new Demo("1","2","3","4"));
    demoList.add(new Demo("1","2","3","4"));
    demoList.add(new Demo("1","2","3","4"));
    EasyExcel.write("C:\\Users\\tzxx\\Desktop\\1234.xlsx",Demo.class)
            .sheet("报销").doWrite(demoList);
}

}

22

上边是我测试的写出时 出现的问题 创建人的 姓名和手机号都没值

回答

1

请遵循java命名规范,单个小写字母+大写字母开头会导致beanMap认为是两个大写字母,导致无法获取到值

1

谢谢 上一个问题解决了 写出都能赋上值 但导入时出现问题 @Data public class Demo { @ExcelProperty({"责任人","姓名"}) private String name; @ExcelProperty({"责任人","手机号"}) private String mobile; @ExcelProperty({"创建人","姓名"}) private String createName; @ExcelProperty({"创建人","手机号"}) private String createMobile; public Demo(String name,String mobile, String createName,String createMobile){ this.name = name; this.mobile = mobile; this.createName = createName; this.createMobile = createMobile; }

public Demo(){}

public static void main(String[] args) {
    File file = new File("C:\\Users\\tzxx\\Desktop\\1.xlsx");
    DemoDataListener listener = new DemoDataListener();
    EasyExcel.read(file,Demo.class,listener).sheet().headRowNumber(2).doRead();
}

} 33 责任人的姓名和手机号没有赋上值,创建人的姓名和手机号赋上值但赋的是责任人的姓名和手机号,错乱了 44

6

@pdkst 看我上一个回复 #990

8

@pdkst 看我上一个回复 #990

这个状况我复现了,我稍微调试了下,是因为表头读取的时候只创建了两个属性的,更加详细的可能需要再调试看看

4

这个可能是因为最后一行的标题是一样的导致的bug,先改成不一样的用着,issue增加一下处理人(Assignees) @zhuangjiaju 覆盖的代码在com.alibaba.excel.read.metadata.holder.AbstractReadHolder#buildHead,我不太确定这个方法的影响范围,还是让官方来改好了

4

这个目前没法解决。这个匹配是根据最后一行头来匹配中文的。建议用index指定。