使用EasyExcel读写Excel文件 ╰半夏微凉° 2022-11-19 06:25 295阅读 0赞 ### 使用EasyExcel读写Excel文件 ### * 一、EasyExcel介绍 * 二、将数据写入Excel * * 1.创建excel对应的实体对象 * 2.write方法实现写操作 * 3.测试结果分析 * 三、将数据读出Excel * * 1.配置监听器 * 2.read方法实现写操作 * 3.测试结果分析 -------------------- # 一、EasyExcel介绍 # Java解析、生成Excel比较有名的框架有`Apache poi`、`jxl`。但这两个技术都非常的消耗内存。目前流行的解决方案是使用阿里出品的[EasyExcel框架][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 # ## 1.创建excel对应的实体对象 ## 创建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; } ## 2.write方法实现写操作 ## 在具体的写方法中,write方法传入两个参数: * String pathName:excel文件路径和文件名称。 * Class head:excel表头对应的实体类。 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); } } ## 3.测试结果分析 ## 项目运行后,成功将100条数据写入Excel表格: ![成功将100条数据写入Excel][100_Excel] ![将数据写入Excel流程][Excel] # 三、将数据读出Excel # ## 1.配置监听器 ## 监听器中重载的三个方法: * `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("读取完毕!"); } } ## 2.read方法实现写操作 ## 在具体的写方法中,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(); } } ## 3.测试结果分析 ## ![成功将100条数据从Excel读出][100_Excel 1] 至此,使用EasyExcel读写Excel文件演示完毕。 [EasyExcel]: https://github.com/alibaba/easyexcel [100_Excel]: /images/20221022/a993403717ca43ac9a467c3899554655.png [Excel]: /images/20221022/679921d9df61400e9088ab8bc4da0e6a.png [100_Excel 1]: /images/20221022/af7a7346d435475fbabbabc3dc2d828e.png
还没有评论,来说两句吧...