ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Alibaba Easy Excel快速入门

2020-04-26 10:52:00  阅读:19831  来源: 互联网

标签:读取 void Excel private Alibaba Easy Student public String


一、Maven坐标

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>easyexcel</artifactId>
  <version>2.1.6</version>
</dependency>

二、常见问题

  1. 填充和写的选择

    填充其实也不会占用大量内存,用的也是文件缓存,最后统一书写,如果导出的内容各种格式复杂,建议直接用模板然后填充(填充的数据会自动有格式)。如果格式相对简单,建议直接用写,相对来说,直接导出性能还是高一丢丢。

  2. 部分字段读取或者写入为空

    读写反射对象用到了Cglib,所以成员变量必须符合驼峰规范,而且使用@Data不能使用@Accessors(chain = true)。后续会考虑支持非驼峰。

  3. 其他问题参考官方文档

三、读Excel

1. 最简单的读
  • 对象

    @Data
    public class Student {
        private String stu_name;
        private Integer age;
        private String address;
        private Float money;
    }
    
  • 表格(Excel)

    姓名 年龄 地址 余额
    张三 22 广东省深圳市 6543
    李四 18 湖北省武汉市 4900
    王五 36 云南省昆明市 5200
  • 监听器

    监听器采用匿名内部类的形式提供。

  • 代码

    @Test
    public void testRead() {
    
      // 被读取的文件绝对路径
      String fileName = "C:/location/myFiles/temp/students.xlsx";
    
      // 接收解析出的目标对象(Student)
      List<Student> studentList = new ArrayList<>();
      
      // 这里需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
      // excel中表的列要与对象的字段相对应
      EasyExcel.read(fileName, Student.class, new AnalysisEventListener<Student>() {
        
        // 每解析一条数据都会调用该方法
        @Override
        public void invoke(Student student, AnalysisContext analysisContext) {
          System.out.println("解析一条Student对象:" + JSON.toJSONString(student));
          studentList.add(student);
        }
    
        // 解析完毕的回调方法
        @Override
        public void doAfterAllAnalysed(AnalysisContext analysisContext) {
          System.out.println("excel文件读取完毕!");
        }
      }).sheet().doRead();
      
    }
    
2. 指定列的下标或列名

读的方法都一样(包括监听器),只不过要给目标对象的类上加如下注解(demo来自官方文档)。

@Data
public class IndexOrNameData {
  /**
   * 强制读取第三个 这里不建议 index 和 name 同时用,要么一个对象只用index,要么一个对象只用name	 * 去匹配
   */
  @ExcelProperty(index = 2)
  private Double doubleData;
  
  /**
   * 用名字去匹配,这里需要注意,如果名字重复,会导致只有一个字段读取到数据
   */
  @ExcelProperty("字符串标题")
  private String string;
  
  @ExcelProperty("日期标题")
  private Date date;
}
3. 不创建对象的读

不创建对象读取的话,直接用Map接收数据。

@Test
public void readWithoutObj() {
  
  // 被读取的文件绝对路径
  String fileName = "C:/location/myFiles/temp/students.xlsx";
  
  // 接收结果集,为一个List列表,每个元素为一个map对象,key-value对为excel中每个列对应的值
  List<Map<Integer,String>> resultList = new ArrayList<>();
  
  EasyExcel.read(fileName, new AnalysisEventListener<Map<Integer,String>>() {

    @Override
    public void invoke(Map<Integer, String> map, AnalysisContext analysisContext) {
      System.out.println("解析到一条数据:" + JSON.toJSONString(map));
      resultList.add(map);
    }
    
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
      System.out.println("excel文件解析完毕!" + JSON.toJSONString(resultList));
    }
  }).sheet().doRead();
}
4. 其他复杂方式读

读取多个sheet、日期/数字和自定义格式转换、多行头、同步返回、读取表头、web中的读等读法参考官方文档

四、写Excel

标签:读取,void,Excel,private,Alibaba,Easy,Student,public,String
来源: https://www.cnblogs.com/flySavior/p/12777717.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有