easyexcel是阿里巴巴開源的一款excel解析工具,底層邏輯也是基於apache poi進行二次開發的。不同的是,再讀寫數據的時候,採用sax模式一行一行解析,在並發量很大的情況下,依然能穩定運行!
下面就一起來了解一下這款新起之秀!
3.1 添加依賴包
<!-- EasyExcel --><dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.6</version> </dependency> <!--常用工具庫--> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>29.0-jre</version> </dependency>3.2 採用註解導出導入
easyexcel同樣也支持採用註解方式進行導出、導入!
首先,我們創建一個實體類UserEntity,其中@ExcelProperty註解表示導出文件的頭部信息。
3.2.1 導出操作
package cn.tedu.excel.easyexcel;
import com.alibaba.excel.EasyExcel;import com.alibaba.excel.annotation.ExcelProperty;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import org.springframework.format.annotation.DateTimeFormat;
import java.util.ArrayList;import java.util.Date;import java.util.List;
@Data@NoArgsConstructor@AllArgsConstructorpublic class UserEntity { @ExcelProperty(value = "姓名") private String name;
@ExcelProperty(value = "年齡") private int age;
@DateTimeFormat(fallbackPatterns = "yyyy-MM-dd HH:mm:ss") @ExcelProperty(value = "操作時間") private Date time;
public static void main(String[] args) { List<UserEntity> dataList = new ArrayList<>(); for (int i = 0; i < 10; i++) { UserEntity userEntity = new UserEntity(); userEntity.setName("張三" + i); userEntity.setAge(20 + i); userEntity.setTime(new Date(System.currentTimeMillis() + i)); dataList.add(userEntity); } EasyExcel.write("/Users/lixin/Desktop/easyexcel-user1.xls", UserEntity.class).sheet("用戶信息").doWrite(dataList); }}package cn.tedu.excel.easyexcel;
import com.alibaba.excel.EasyExcel;import org.json.simple.JSONArray;
import java.util.List;
public class DemoData { public static void main(String[] args) { String filePath = "/Users/lixin/Desktop/easyexcel-user1.xls"; List<DemoData> list = EasyExcel.read(filePath).head(UserEntity.class).sheet().doReadSync(); System.out.println(JSONArray.toJSONString(list)); }}[UserEntity(name=張三0, age=20, time=Mon Mar 29 16:42:20 CST 2021),UserEntity(name=張三1, age=21, time=Mon Mar 29 16:42:20 CST 2021),UserEntity(name=張三2, age=22, time=Mon Mar 29 16:42:20 CST 2021),UserEntity(name=張三3, age=23, time=Mon Mar 29 16:42:20 CST 2021),UserEntity(name=張三4, age=24, time=Mon Mar 29 16:42:20 CST 2021),UserEntity(name=張三5, age=25, time=Mon Mar 29 16:42:20 CST 2021),UserEntity(name=張三6, age=26, time=Mon Mar 29 16:42:20 CST 2021),UserEntity(name=張三7, age=27, time=Mon Mar 29 16:42:20 CST 2021),UserEntity(name=張三8, age=28, time=Mon Mar 29 16:42:20 CST 2021),UserEntity(name=張三9, age=29, time=Mon Mar 29 16:42:20 CST 2021)]3.3 自定義數據結構導出導入
easyexcel同樣也支持自定義數據結構導出、導入excel。
3.3.1 導出操作
public static void main(String[] args) { //表頭 List<List<String>> headList = new ArrayList<>(); headList.add(Lists.newArrayList("姓名")); headList.add(Lists.newArrayList("年齡")); headList.add(Lists.newArrayList("操作時間"));
//數據體 List<List<Object>> dataList = new ArrayList<>(); for (int i = 0; i < 10; i++) { List<Object> data = new ArrayList<>(); data.add("張三" + i); data.add(20 + i); data.add(new Date(System.currentTimeMillis() + i)); dataList.add(data); } EasyExcel.write("/Users/hello/Documents/easyexcel-user2.xls").head(headList).sheet("用戶信息").doWrite(dataList);}public static void main(String[] args) { String filePath = "/Users/panzhi/Documents/easyexcel-user2.xls"; UserDataListener userDataListener = new UserDataListener(); EasyExcel.read(filePath, userDataListener).sheet().doRead(); System.out.println("表頭:" + JSONArray.toJSONString(userDataListener.getHeadList())); System.out.println("數據體:" + JSONArray.toJSONString(userDataListener.getDataList()));}表頭:[{0:"姓名",1:"年齡",2:"操作時間"}]數據體:[{0:"張三0",1:"20",2:"2021-03-29 16:31:39"},{0:"張三1",1:"21",2:"2021-03-29 16:31:39"},{0:"張三2",1:"22",2:"2021-03-29 16:31:39"},{0:"張三3",1:"23",2:"2021-03-29 16:31:39"},{0:"張三4",1:"24",2:"2021-03-29 16:31:39"},{0:"張三5",1:"25",2:"2021-03-29 16:31:39"},{0:"張三6",1:"26",2:"2021-03-29 16:31:39"},{0:"張三7",1:"27",2:"2021-03-29 16:31:39"},{0:"張三8",1:"28",2:"2021-03-29 16:31:39"},{0:"張三9",1:"29",2:"2021-03-29 16:31:39"}]