java使使用者EasyExcel匯入匯出excel

迷途者尋影而行發表於2021-05-15

使用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;
}

以上是簡單的舉例,如果有更多屬性自己逐個寫就好,然後塞進該實體類就好~
image

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();
        }
    }

以上,就生成完畢了!
image

四、結果

image

豁~搞定

image

相關文章