easyExcel 所需的maven 依賴
補充:這些依賴不是都需要導入,我這里用到了xlsx這個表格,所以需要poi-ooxml
詳情可以看這篇博客,根據需要去導入依賴,不然很有可能沖突,讀寫不了數據
POI各Jar包的作用 - 秋心無波 - 博客園 (cnblogs.com)
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.6</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency>
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.apche.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency>
1. 寫excel
package com.example.demo.excel; import com.alibaba.excel.EasyExcel; import java.util.ArrayList; import java.util.List; public class TestEasyExcel { public static void main(String[] args) { //1.設置文件夾的地址和名稱 String filename = "E:\\easyExcelDocument\\write.xlsx"; //2.調用easyExcel里的方法 EasyExcel.write(filename,DemoData.class).sheet("學生列表").doWrite(getData()); } //上面的靜態方法,不能調用非靜態方法,因此得聲明此方法為靜態方法 private static List<DemoData> getData(){ List<DemoData> list = new ArrayList<>(); for (int i = 0; i < 10000; i++) { DemoData data = new DemoData(); data.setSno(i); data.setSname("學生"+i); list.add(data); } return list; } }
1.1 實體類
package com.example.demo.excel; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @Data public class DemoData { //設置表頭名稱 @ExcelProperty("學生編號") private Integer sno; @ExcelProperty("學生姓名") private String sname; }
2. 讀操作(寫的話直接寫就行,但讀取excel得額外新建監聽器,實現相應的方法)
2.1 實體類
package com.example.demo.excel; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @Data public class DemoData { //設置表頭名稱 @ExcelProperty(value = "學生編號",index = 0) private Integer sno; @ExcelProperty(value = "學生姓名",index = 1) private String sname; } 增加index屬性
2.2 監聽器(用於處理read 執行前后的操作)
package com.example.demo.excel; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import java.util.Map; public class ExcelListener extends AnalysisEventListener<DemoData> { //一行一行的讀取excel內容 @Override public void invoke(DemoData demoData, AnalysisContext analysisContext) { System.out.println("****"+demoData); //數據太多的話控制台會自動清除 } //讀取表頭內容 @Override public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) { System.out.println("表頭"+headMap); } //讀取完成之后 @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { } }
3. 測試
package com.example.demo.excel; import com.alibaba.excel.EasyExcel; import java.util.ArrayList; import java.util.List; public class TestEasyExcel { public static void main(String[] args) { //***********寫操作 // //1.設置文件夾的地址和名稱 // String filename = "E:\\easyExcelDocument\\write.xlsx"; // // //2.調用easyExcel里的方法 // EasyExcel.write(filename,DemoData.class).sheet("學生列表").doWrite(getData()); //**********讀操作 String filename = "E:\\easyExcelDocument\\write.xlsx"; EasyExcel.read(filename,DemoData.class,new ExcelListener()).sheet("學生列表").doRead(); // System.out.println(EasyExcel.read(filename)); } //上面的靜態方法,不能調用非靜態方法,因此得聲明此方法為靜態方法 private static List<DemoData> getData(){ List<DemoData> list = new ArrayList<>(); for (int i = 0; i < 10000; i++) { DemoData data = new DemoData(); data.setSno(i); data.setSname("學生"+i); list.add(data); } return list; } }