EasyExcel读取数据失败的常见问题

高频问题

最好不使用 lombok 的@Data、@Accessors注解

1、我的部分字段为什么没法读取或者写入?
  • 读写反射对象用到了Cglib,所以成员变量必须符合驼峰规范,请确认是否符合驼峰规范
    • 在3.0.0-beta1 兼容了部分非驼峰,但是还是不建议使用非驼峰字段
  • 使用了lombok的@Accessors(chain = true) ,无法被Cglib读取
    • 建议使用@Builder来替换@Accessors(chain = true)
  • 出现 NoSuchMethodException , ClassNotFoundException, NoClassDefFoundError等异常 一般是版本兼容出问题了,
    参照:
    TIP:如果项目中没有使用过poi,且jdk版本在8-17之间,直接使用最新版本,别犹豫。
    在这里插入图片描述
    • 3+版本的的easyexcel,使用poi 5+版本时,需要自己引入poi 5+版本的包,且手动排除:poi-ooxml-schemas,例如:
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.1.0</version>
    <exclusions>
        <exclusion>
            <artifactId>poi-ooxml-schemas</artifactId>
            <groupId>org.apache.poi</groupId>
        </exclusion>
    </exclusions>
</dependency>
2、只要部分字段去匹配excel(excel写入内容匹配不上等)

easyexcel默认是全部实体字段都会参与读写,不管你是否加了@ExcelProperty注解

  • 如果您的版本低于2.1.6,建升级到以上版本
  • 升级了还有,在类的最上面加入@ExcelIgnoreUnannotated注解,加入这个注解后只有加了@ExcelProperty才会参与读写。
3、我在本地可以,发布到线上环境怎么不可以了?

例如异常:NullPointerException at sun.awt.FontConfiguration.getVersion ,Could not initialize class sun.awt.X11FontManage
大概率是缺少字体库导致,2个方案:

  • 安装字体(推荐)
    看下服务器是否安装了字体,jdk8字体需要自己安装请安装字体:dejavu-sans-fonts 和 fontconfig 在dockerfile中增加字体安装命令: RUN yum install dejavu-sans-fonts fontconfig -y
    普通的线上环境直接运行: yum install dejavu-sans-fonts fontconfig -y
  • 开启内存处理模式(不推荐,1W数据以内可以考虑,大了很容易OOM)
        EasyExcel
        .write(fileName, DemoData.class)
        // 核心这个配置 开始内存处理模式
        .inMemory(Boolean.TRUE)
        .sheet("模板")
        .doWrite(data());
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
EasyExcel是一款Java的Excel操作工具,可以方便地取和写入Excel文件。下面是使用EasyExcel读取数据的基本步骤: 1. 首先,你需要引入EasyExcel的依赖。你可以在你的项目中添加以下Maven依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.10</version> </dependency> ``` 2. 创建一个数据模型类,用于存储Excel中每行数据的字段。假设你要取的Excel文件中包含"姓名"和"年龄"两列数据,你可以创建一个对应的数据模型类,例如: ```java public class Person { private String name; private int age; // 添加构造方法、getter和setter等 } ``` 3. 编写代码取Excel文件。你可以使用EasyExcel提供的`EasyExcel.read()`方法来取Excel文件,并通过`sheet()`方法指定要取的Sheet页。接下来,你可以通过`head()`方法指定Excel文件中每列对应的字段,以及通过`doRead()`方法来执行取操作。以下是一个简单的示例代码: ```java String fileName = "path/to/your/excel/file.xlsx"; EasyExcel.read(fileName, Person.class, new AnalysisEventListener<Person>() { @Override public void invoke(Person person, AnalysisContext analysisContext) { // 处理每行数据 System.out.println("姓名:" + person.getName() + ",年龄:" + person.getAge()); } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { // 取完成后的操作 } }).sheet().doRead(); ``` 在上面的代码中,你需要将`path/to/your/excel/file.xlsx`替换为你实际的Excel文件路径。 以上就是使用EasyExcel取Excel数据的基本步骤。你可以根据自己的需求进行扩展和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值