赞
踩
Java解析、生成Excel比较有名的框架有Apache poi
、jxl
。但这两个技术都非常的消耗内存。目前流行的解决方案是使用阿里出品的EasyExcel框架。EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。
使用前需要引入EasyExcel的依赖,这里以2.1.1版本为例。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>
创建excel对应的实体对象实际上就是Excel数据表中的表头属性。
import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; /** * @Description: 创建excel对应的实体对象 * @author Guoqianliang * @date 19:47 - 2021/4/14 */ @Data public class UserData { @ExcelProperty(value = "用户编号", index = 0) private int id; @ExcelProperty(value = "用户名", index = 1) private String username; @ExcelProperty(value = "性别", index = 2) private String gender; @ExcelProperty(value = "工资", index = 3) private Double salary; }
在具体的写方法中,write方法传入两个参数:
import com.alibaba.excel.EasyExcel; import java.util.ArrayList; import java.util.List; /** * @Description: 使用EasyExcel将数据写入Excel * @author Guoqianliang * @date 19:50 - 2021/4/14 */ public class TestWrite { public static void main(String[] args) { // 向list集合添加100条数据 List<UserData> list = new ArrayList<>(); for (int i = 0; i < 100; i++) { UserData data = new UserData(); data.setId(i); data.setUsername("Hudie" + i + "号"); data.setGender("男"); data.setSalary(100000.00); list.add(data); } // 设置excel文件路径和文件名称 String fileName = "D:\\Program Files (x86)\\test\\01.xlsx"; // write方法实现写操作 EasyExcel.write(fileName, UserData.class).sheet("用户信息") .doWrite(list); } }
项目运行后,成功将100条数据写入Excel表格:
监听器中重载的三个方法:
invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context)
:读取表头内容。invoke(UserData userData, AnalysisContext analysisContext)
:从第二行开始读取依次读取每行内容,userData中存储了读取到的数据。doAfterAllAnalysed(AnalysisContext analysisContext)
:读取之后执行的方法。public class ExcelListener extends AnalysisEventListener<UserData> { // 读取第一行表头内容 @Override public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) { System.out.println("表头信息" + headMap); } // 从第二行开始一行一行读取excel内容,每行内容读取到userData中 @Override public void invoke(UserData userData, AnalysisContext analysisContext) { System.out.println(userData); } // 读取之后执行 @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { System.out.println("读取完毕!"); } }
在具体的写方法中,read方法传入三个参数:
String pathName
:excel文件路径和文件名称。Class head
:excel表头对应的实体类。ReadListener readListener
:监听器。public class TestRead {
public static void main(String[] args) {
// 要读取文件的路径
String fileName = "D:\\Program Files (x86)\\test\\01.xlsx";
// 调用read方法实现读取操作
EasyExcel.read(fileName, UserData.class, new ExcelListener()).sheet("用户信息").doRead();
}
}
至此,使用EasyExcel读写Excel文件演示完毕。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。