首页 > 其他分享 >使用EasyExcel读取Excel文件遇到的小问题

使用EasyExcel读取Excel文件遇到的小问题

时间:2024-03-14 21:24:53浏览次数:18  
标签:username 读取 excel EasyExcel Excel pwd User public String

没有读取到内容的问题

excel内容

具体代码

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.annotation.ExcelProperty;

import java.io.File;
import java.util.List;

public class TestEasyExcel {
    public static void main(String[] args) {
        List<User> users = EasyExcel.read(new File("/Users/xxx/testjars/Users.xlsx"))
                .head(User.class)
                .sheet()
                .doReadSync();
        System.out.println(users); // [User{username='null', pwd='null'}, User{username='null', pwd='null'}]
    }

    public static class User {
        @ExcelProperty("用户名")
        private String username;
        @ExcelProperty("密码")
        private String pwd;

        public String getUsername() {
            return username;
        }

        public User setUsername(String username) {
            this.username = username;
            return this;
        }

        public String getPwd() {
            return pwd;
        }

        public User setPwd(String pwd) {
            this.pwd = pwd;
            return this;
        }

        @Override
        public String toString() {
            return "User{" +
                    "username='" + username + '\'' +
                    ", pwd='" + pwd + '\'' +
                    '}';
        }
    }
}

如果属性的set()方法返回值不是void,就不会调用set()方法,就读取不到数据。

原因分析

easyexcel 库内部使用了 cglib 中的 BeanMap 来设置属性

  1. 具体类为 com.alibaba.excel.read.listener.ModelBuildEventListener 的 buildUserModel() 方法。
  2. 进入 BeanMap 的 create() 方法
  3. 进入 DefaultGeneratorStrategy 的 generate() 方法
  4. 继续进入 net.sf.cglib.beans.BeanMap.Generator 的 generateClass() 方法
  5. 进入 BeanMapEmitter 构造器,继续 net.sf.cglib.core.ReflectUtils 的 getBeanSetters() 方法
  6. 最终调用 java.beans.PropertyDescriptor 的 getWriteMethod() 方法来获取 set() 方法,这里判断了方法返回值必须为 void 类型

跳过前面几行的实现

excel 内容为

跳过第一行,将第二行当作属性头,具体代码为

public static void main(String[] args) {
        List<User> users = EasyExcel.read(new File("/Users/xxx/testjars/Users.xlsx"))
                .head(User.class)
                .sheet()
                .headRowNumber(2) // 默认值为1
                .doReadSync();
        System.out.println(users);
    }

疑惑

easyexcel 读取 excel 文件会自动去除单元格内容的前后空格,原理暂时未知。

标签:username,读取,excel,EasyExcel,Excel,pwd,User,public,String
From: https://www.cnblogs.com/strongmore/p/18032533

相关文章

  • 【SpringBoot】自定义工具类实现Excel数据新建表存入MySQL数据库
    ......
  • Excel的几点运用#高级筛选#IFNA#VLOOKUP
    高级筛选应用场景:今天导员发了一个excel表格,内容是整个学院的学生名单,而且是乱序的,没有专业班级的信息,现在老师要求我们去完善表格中的邮箱这一项。然而,在那么多的数据中去找到自己的名字还是比较费时费眼睛的,所以我想要从中筛选出我们班级的同学信息,以便班内同学找到自己的名字......
  • 使用openpyxl模块比对两个excel表格
      需求:集团发了一张即将下线的服务器台账表格,里面有整个集团个部门计划下线的服务器列表,大概有三五百行,但是我们部门只有80多台服务器,还不一定都包含在集团下发的表格里。手动一个个去查比较麻烦,写了个python脚本去检测两个表格中相同的地方,并返回单元格信息。第一步、取出......
  • C# EPPlus导出dataset----Excel2绘制图像
    一、生成折线图方法 ///<summary>    ///生成折线图    ///</summary>    ///<paramname="worksheet">sheet页数据</param>    ///<paramname="colcount">总列数</param>    ///<paramname="......
  • Springboot2+consul启动时报错,读取的SystemConfig类的值全部为null
    【错误描述】     解决方案:检查是否已经在pom.xml配置了consul的相关jar包引用。 排查过程:检查了启动的日志,跟旧项目的正常日志进行对比,发现缺少了读取配置boostrap文件的日志。怀疑没有启动consul服务去远端读取consul的内容。 ......
  • Linux利用DS9490R读取多个温湿度
    1.DS9490R是一款由MaximIntegrated(原DallasSemiconductor)生产的USB至1-Wire®接口适配器。它允许计算机通过USB端口与遵循1-Wire协议的设备进行通信,非常适合需要通过PC进行数据采集和控制的应用。1.1基本特性接口类型:USB至1-Wire。连接方式:通过USB接口连接至PC,提供1-W......
  • PYTHON openpyxl 读取课程表,轮值排班表,输出每日班级简报
    源文件excel及python源文件链接:https://pan.baidu.com/s/1uswO_33jrgE3nvaJv47wGw提取码:clnw#frompickleimportAPPENDimportopenpyxlimportdatetimefromtimeimportstrftime#importre#fromdatetimeimportdatetime#fromdateutil.parserimportparse#impor......
  • Pandas导出美化技巧,让你的Excel更出众
    pandas的DataFrame可以通过设置参数使得在jupyternotebook中显示的更加美观,但是,将DataFrame的数据导出excel时,却只能以默认最朴素的方式将数据写入excel。本文介绍一种简单易用,让导出的excel更加美观的方法。1.概要首先,引入一个库StyleFrame,这个库封装pandas和openpyxl,让我......
  • STM32模拟IIC读取ACD10红外二氧化碳数据
    引脚介绍ACD10通过IIC来通信我们使用下图右边四个引脚就可以了,系统默认模式为IIC通信方式,他也支持USART串口通信不过需要配置pin5引脚(低电平)。模拟IIC通信配置比较简单,在单片机上面随便找两个引脚就可以。用来配置SDA数据与SCL时钟引脚。读取数据命令官方给我们命令行列......
  • GDCM:读取DICOM Series(附完整源码)
    GDCM:读取DICOMSeries以下是一个使用GDCM(GrassrootsDICOM)库读取DICOM系列的示例代码:#include<iostream>#include"gdcmReader.h"#include"gdcmFile.h"#include"gdcmFileHelper.h"#include"gdcmGlobal.h"#include"gdcmSyst......