使用easypoi導出excel簡單使用、合並單元格(groupName)


原文參考:https://blog.csdn.net/H900302/article/details/109726240

 

今天嘗試使用easypoi做Excel導出,首先如它的名字一樣,導出相比之前使用的poi確實簡單了不少,但是它的官方文檔是真的不詳細,有待完善,拿我導出的文件來說吧(圖如下),這個標題合並單元格的效果是@Excel注解的groupName屬性實現的,但是在官方文檔中說明@Excel注解的時候並沒有對groupName屬性做說明,而且源碼中雖然有這個屬性,但是沒有對這些屬性做一點注釋說明,直到我看到文檔的這一節2.12 groupname和ExcelEntity的name屬性才對groupname屬性進行說明,還有錯別字真是太多了。

 

 

 

 

雖然感覺什么都有,但是就是源碼的注釋太少了,根本不知道這些方法是干啥的,雖然抱怨不是個好現象,但是沒忍住。。。吐槽到此結束,說歸說,入門還是離不開它的官方文檔,計划接下來幾篇記錄一下使用easypoi完成常用的表格操作。

首先,准備下測試表和數據:

 

 

 

 

實體類、Mapper接口啥的就不貼了,xml中也只有一個簡單的查詢:

<select id="selectUsers" resultType="com.example.springbootmp.dto.user.UserMobileDto">
select * from t_user_excel
</select>

先看下導出的文件樣子和生成導出文件的實體類:

 

 

 

 

 

 

 

對比上面兩張圖說明一下使用easypoi導出的實體UserExcelDto,按照官方的使用說明,簡單的使用@Excel注解標記一下字段就好,name屬性為導出表格的列明,數據庫中性別存的字符串類型的man/woman,如果我們導出的時候想顯示為男/女,@Excel注解有一個replace屬性可以替換值,當然也可以使用枚舉,easypoi也有對枚舉處理的說明,這個以后再測試,暫且使用replace屬性,replace值的寫法形如:replace = {"A_a","B_b"},它的意思就是假如實體字段的值為a,那么導出的時候列值替換為A,其它參數同理;@Excel注解還有一個參數groupName可以很容易的實現雙行表頭的樣子,如圖中的時間一列,使用groupName可以將多個字段歸並到一列。

貼一下controller導出方法代碼:

@GetMapping
public void export(HttpServletResponse response) throws IOException {
List<UserExcelDto> userExcelDtos = userExcelService.selectUsers();
String fileName = "下載的文件名";
String sheetName = "sheet名字";
String title = "sheet頁的title";
ExportParams exportParams = new ExportParams(title,sheetName);
ExcelUtil.exportExcel(userExcelDtos,UserExcelDto.class,fileName,exportParams,response);

}

 

雖然easypoi提供了導出方法ExcelExportUtil.exportExcel(),不過我這里自定義了一個導出工具類,便於設置參數,從上面的截圖可以知道,title、sheetName的作用不啰嗦了,看下導出工具類代碼:

/**
* excel 導出
*
* @param list 要導出的數據
* @param pojoClass pojo類型
* @param fileName 文件名稱
* @param exportParams 導出表格參數
* @param response
*/
public static void exportExcel(List<?> list, Class<?> pojoClass, String fileName,
ExportParams exportParams,
HttpServletResponse response) throws IOException {
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list);
downLoadExcel(fileName, response, workbook);
}

/**
* 下載文件
*
* @param fileName 文件名稱
* @param response
* @param workbook excel數據
*/
private static void downLoadExcel(String fileName, HttpServletResponse response,
Workbook workbook)
throws IOException {
try {
response.setCharacterEncoding("UTF-8");
response.setHeader("content-Type", "application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename="
+ URLEncoder.encode(fileName + ".xls", "UTF-8"));
workbook.write(response.getOutputStream());
} catch (Exception e) {
throw new IOException(e.getMessage());
}
}

easypoi的體驗到此結束,很明顯有很多待優化完善的地方,就像是時間顯示、枚舉類使用、可能一個用戶有多筆訂單這種需要合並展示的,接下來幾天慢慢補充。

補充一下:

ExportParams exportParams = new ExportParams(title,sheetName);

通常我們並不需要導出的表格中帶這個這個標題(sheet頁的title),那么可以將title設置為null即可,都不傳使用空構造器也可以,但是sheetName也會變為默認的sheet0、sheet1這種

還可以用設置二級標題。如:new ExportParams("sheet也title", "日期:2020-11-18","sheet名字");

看下title為null的效果(new ExportParams(null,sheetName)):

 

看下二級標題的效果:

 

總結:經測試,groupName是好用的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM