使用alibab的EasyExce完成匯入匯出excel
一、準備工作
1、導包
<!-- poi 相關-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</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.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<!-- esayexcel 2.1.7 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.7</version>
</dependency>
二、瞭解註解
1、常用註解
欄位註解 | 類註解 |
---|---|
@ColumnWith(列寬) | @ColumnWidth(全域性列寬) |
@ExcelProperty(欄位配置) | @HeadFontStyle(頭樣式) |
@HeadRowHeight(標題高度) | |
@ContentFontStyle(內容字型樣式) | |
@ContentRowHeight(內容高度) |
2、@ExcelProperty註解
必要的一個註解,註解中有三個引數value,index分別代表列明,列序號
value和index只能二選一,通常不用設定converter
1.value 通過標題文字對應
2.index 通過文字行號對應
@ExcelProperty(value = "編號", index = 0)
private Long id;
3、@ColumnWith註解
設定列寬度,只有一個引數value,value的單位是字元長度,最大可以設定255個字元,因為一個excel單元格最大可以寫入的字元個數就是255個字元
public class ImeiEncrypt {
@ColumnWidth(value = 255) //excel單個單元格最大長度255
private String message;
}
4、@ContentFontStyle註解
用於設定單元格內容字型格式的註解
引數 | 含義 |
---|---|
fontName | 字型名稱 |
fontHeightInPoints | 字型高度 |
italic | 是否斜體 |
strikeout | 是否設定刪除水平線 |
color | 字型顏色 |
typeOffset | 偏移量 |
underline | 下劃線 |
bold | 是否加粗 |
charset | 編碼格式 |
5、@ContentStyle註解
設定內容格式註解
引數 | 含義 |
---|---|
dataFormat | 日期格式 |
hidden | 設定單元格使用此樣式隱藏 |
locked | 設定單元格使用此樣式鎖定 |
quotePrefix | 在單元格前面增加`符號,數字或公式將以字串形式展示 |
horizontalAlignment | 設定是否水平居中 |
wrapped | 設定文字是否應換行。將此標誌設定為true通過在多行上顯示使單元格中的所有內容可見 |
verticalAlignment | 設定是否垂直居中 |
rotation | 設定單元格中文字旋轉角度。03版本的Excel旋轉角度區間為-90°90°,07版本的Excel旋轉角度區間為0°180° |
indent | 設定單元格中縮排文字的空格數 |
borderLeft | 設定左邊框的樣式 |
borderRight | 設定右邊框樣式 |
borderTop | 設定上邊框樣式 |
leftBorderColor | 設定左邊框顏色 |
rightBorderColor | 設定右邊框顏色 |
topBorderColor | 設定上邊框顏色 |
bottomBorderColor | 設定下邊框顏色 |
fillPatternType | 設定填充型別 |
fillBackgroundColor | 設定背景色 |
shrinkToFit | 設定自動單元格自動大小 |
6、@HeadFontStyle註解
用於定製標題字型格式
引數 | 含義 |
---|---|
fontName | 設定字型名稱 |
fontHeightInPoints | 設定字型高度 |
italic | 設定字型是否斜體 |
strikeout | 是否設定刪除線 |
color | 設定字型顏色 |
typeOffset | 設定偏移量 |
underline | 設定下劃線 |
charset | 設定字型編碼 |
bold | 設定字型是否加粗 |
7、ExcelIgnore註解
不將該欄位轉換成Excel
三、編碼
1、對映實體類----例子
package com.pingou.admin.bean.param;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
@ContentRowHeight(35) //文字行高度
@HeadRowHeight(40) //標題高度
@ColumnWidth(40)
public class OrderExcel {
//設定excel表頭名稱
@ExcelProperty(value = "編號", index = 0)
private Long id;
@DateTimeFormat("yyyy年MM月dd日HH時mm分ss秒")
@ExcelProperty(value = "建立時間", index = 1)
private Date createTime;
}
以上是簡單的舉例,如果有更多屬性自己逐個寫就好,然後塞進該實體類就好~
2、生成excel
public void excel() {
//欲匯出excel的資料結果集
List<OrderExcel> excel = new ArrayList<>();
//省略 向結果集裡插入資料的操作
//UUID生成唯一name
String name = UUID.randomUUID().toString().replaceAll("-", "") + ".xlsx";
//實現excel寫的操作
//1 設定寫入資料夾地址和excel檔名稱
String filename = "/路徑" + name;
JSONObject json = new JSONObject();
try {
// 2 呼叫easyexcel裡面的方法實現寫操作
// write方法兩個引數:第一個引數檔案路徑名稱,第二個引數實體類class
EasyExcel.write(filename, OrderExcel.class).sheet("名字").doWrite(excel);
//上傳到fastdfs上 不上傳的話只有本機可以找到,在上面路徑下生成excel
File file = new File(filename);
String path = fastDFSClient.upload(new FileInputStream(file), name, null);
path = (this.fastdfsDomain + path);
json.put("url", path);
} catch (IOException e) {
e.printStackTrace();
} finally {
new File(filename).delete();
}
}
以上,就生成完畢了!
四、結果
豁~搞定