EasyExcel的简单读取操作
EasyExcel的简单读取操作
-
Java领域解析、生成Excel比较有名的框架有Apache poi、 jxl等。但他们都存在一个严重的问题就是 非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或 者JVM频繁的full gc。 EasyExcel是阿里巴巴开源的一个excel处理框架, 以使用简单、节省内存著称。 EasyExcel能大大减 少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一 行行读取数据,逐个解析。 EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理 (AnalysisEventListener)。
摘自
导入依赖
这个版本之间有个对应关系,不然会报错。
<!--xls--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> <!--xlsx--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency> <!-- easyexcel依赖 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.1</version> </dependency>
创建实体类
@Data @AllArgsConstructor @NoArgsConstructor public class DemoData { // 设置表头名称,index表示的是编号的索引 @ExcelProperty(value = "学生编号",index = 0) private Integer sno; @ExcelProperty(value = "学生姓名",index = 1) private String sname; }
用EasyExcel进行写操作测试
/** * easyExcel写操作测试 */ @Test public void write() { String outputFile = "E:\write11.xlsx"; EasyExcel.write(outputFile, DemoData.class).sheet("学生列表").doWrite(TestEasyExcel.getData()); } private static List<DemoData> getData() { List<DemoData> list = new ArrayList<>(); for (int i = 0; i < 10; i++) { String name = UUID.randomUUID().toString().replace("-", "").substring(0, 5); list.add(new DemoData(i, name)); } return list; }
用EasyExcel进行读操作
读的时候要ExcelListener监听器。
创建ExcelListener类继承AnalysisEventListener带上excel表格中的对象
/** * Created with IntelliJ IDEA. * @Author: pzx * @Date: 2022/01/30 15:46 * @Version:1.0 */ public class ExcelListener extends AnalysisEventListener<DemoData> { // 一行一行去读取excel中的内容(表头不会去读取) @Override public void invoke(DemoData data, AnalysisContext context) { System.out.println("********" + data); } // 读取表头中的内容 @Override public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) { System.out.println("表头 " + headMap); } // 读取完成之后做的内容 @Override public void doAfterAllAnalysed(AnalysisContext context) { } }
代码测试
/** * easyExcel读操作测试 */ @Test public void read() { String outputFile = "E:\write11.xlsx"; // 加上继承了AnalysisEventListener类的监听器 ExcelListener excelListener = new ExcelListener(); EasyExcel.read(outputFile,DemoData.class, excelListener).sheet().doRead(); }