赞
踩
目录
减轻录入工作量
统计信息归档
异构系统之间数据传输
常见excel分析框架:POI、EasyExcel
https://github.com/alibaba/easyexcel
1、创建一个普通的maven项目
项目名:alibaba-easyexcel
2、pom中引入xml相关依赖
- <dependencies>
-
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>easyexcel</artifactId>
- <version>2.1.7</version>
- </dependency>
-
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-simple</artifactId>
- <version>1.7.5</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.xmlbeans</groupId>
- <artifactId>xmlbeans</artifactId>
- <version>3.1.0</version>
- </dependency>
-
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <version>1.18.12</version>
- </dependency>
-
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- </dependency>
-
- </dependencies>
- package com.atguigu.easyexcel.dto;
-
- import lombok.Data;
-
- import java.util.Date;
-
- @Data
- public class ExcelStudentDTO {
-
- private String name;
- private Date birthday;
- private Double salary;
- }
这些代码在官方文档可以看到
- public class ExcelWriteTest {
-
- @Test
- public void simpleWriteXlsx() {
- // 注意 simpleWrite在数据量不大的情况下可以使用(5000以内,具体也要看实际情况),数据量大参照 重复多次写入
-
- // 写法1 JDK8+
- // since: 3.0.0-beta1
- String fileName = "D:/idealworkspace/shangrb/excel/simpleWrite.xlsx";
- // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
- // 如果这里想使用03 则 传入excelType参数即可
- EasyExcel.write(fileName, ExcelStudentDTO.class)
- .sheet("模板")
- .doWrite(data());
- }
-
-
- private List<ExcelStudentDTO> data() {
- List<ExcelStudentDTO> list = new ArrayList<>();
- for (int i = 0; i < 10; i++) {
- ExcelStudentDTO data = new ExcelStudentDTO();
- data.setName("字符串" + i);
- data.setBirthday(new Date());
- data.setSalary(0.56);
- list.add(data);
- }
- return list;
- }
- }
运行后在D:/idealworkspace/shangrb/excel/生成了xlsx后缀的文件,列名为属性名,表明为我们指定的“模板”
使用@ExcekProperty注解添加列名后重新运行程序,记得先关闭excel文档
- @Data
- public class ExcelStudentDTO {
- @ExcelProperty("姓名")
- private String name;
-
- @ExcelProperty("生日")
- private Date birthday;
-
- @ExcelProperty("薪资")
- private Double salary;
- }
我们在创建下面几种文件时可以看到有两种后缀的文件,这其实是历史问题,03年的时候出现了三个字母后缀的文件,在07年的时候更新出现了四个字母的文件,这两种后缀的文件现在仍在大规模使用,我们上面的代码是对xlsx的写入,而xls的写入也是我们必须掌握的。
- @Test
- public void simpleWriteXls() {
-
- String fileName = "D:/idealworkspace/shangrb/excel/simpleWrite.xls";
- EasyExcel.write(fileName, ExcelStudentDTO.class)
- .sheet("模板")
- .doWrite(data());
- }
xlsx的优势是占用磁盘的内存更少。同样的写入65535条数据,两个文件的大小如下:
xls 版本的Excel最多一次可写0 ...65535行
xlsx 版本的Excel最多一次可写0...1048575行
- @Test
- public void simpleWriteXls() {
- //算上标题,做多可写65536行
- //超出:java.lang.IllegalArgumentException: Invalid row number (65536) outside allowable range (0..65535)
- String fileName = "D:/idealworkspace/shangrb/excel/simpleWrite.xls";
- EasyExcel.write(fileName, ExcelStudentDTO.class)
- .sheet("模板")
- .doWrite(data());
- }
-
-
- private List<ExcelStudentDTO> data() {
- List<ExcelStudentDTO> list = new ArrayList<>();
- for (int i = 0; i < 65536; i ++) {
- ExcelStudentDTO data = new ExcelStudentDTO();
- data.setName("字符串" + i);
- data.setBirthday(new Date());
- data.setSalary(0.56);
- list.add(data);
- }
- return list;
- }
- @Slf4j
- public class ExcelStudentDTOListener extends AnalysisEventListener<ExcelStudentDTO> {
-
- /**
- * 这个每一条数据解析都会来调用
- */
- @Override
- public void invoke(ExcelStudentDTO data, AnalysisContext context) {
- log.info("解析到一条数据:{}", data);
-
- }
-
- /**
- * 所有数据解析完成了 都会来调用
- */
- @Override
- public void doAfterAllAnalysed(AnalysisContext context) {
- log.info("所有数据解析完成!");
- }
- }
- public class ExcelReadTest {
- /*
- * 最简单的读
- *
- */
- @Test
- public void simpleReadXlsx() {
- String fileName = "D:/idealworkspace/shangrb/excel/simpleWrite.xlsx";
- EasyExcel.read(fileName, ExcelStudentDTO.class, new ExcelStudentDTOListener()).sheet().doRead();
- }
-
- /*
- * 03版本读
- */
- @Test
- public void simpleReadXls() {
- String fileName = "D:/idealworkspace/shangrb/excel/simpleWrite.xls";
- EasyExcel.read(fileName, ExcelStudentDTO.class, new ExcelStudentDTOListener())
- .excelType(ExcelTypeEnum.XLS).sheet().doRead();
- }
- }
效果:
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。