Springboot?前后端分離項(xiàng)目使用?POI?生成并導(dǎo)出?Excel的操作方法
在做一個(gè) SpringBoot 前后端分離項(xiàng)目的時(shí)候,需要將數(shù)據(jù)存到 Excel中,用戶(hù)可以下載 Excel。具體實(shí)現(xiàn)是采用 Apache 強(qiáng)大的 POI。文章最后將源碼例出。

POI API 文檔: https://poi.apache.org/apidocs/dev/index.html
步驟
1.導(dǎo)入 POI 的 maven 依賴(lài)
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.1.0</version>
</dependency>2.使用 produces 設(shè)置響應(yīng)類(lèi)型和編碼為 “application/octet-stream”。
@RequestMapping(value = "/down", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
3.通過(guò)使用 SXSSFWorkbook 設(shè)置 Excel 表
SXSSFWorkbook workbook = new SXSSFWorkbook();
//設(shè)置表格名稱(chēng)
SXSSFSheet sheet = workbook.createSheet("銷(xiāo)售榜單");
//設(shè)置表格默認(rèn)寬度30
sheet.setDefaultColumnWidth(30);
//設(shè)置 sheet 表格的第0行
SXSSFRow row = sheet.createRow(0);
//設(shè)置 sheet 表格的第0行第0列的值
row.createCell(0).setCellValue("商品名稱(chēng)");
//設(shè)置 sheet 表格的第0行第1列的值
row.createCell(1).setCellValue("數(shù)量");4.設(shè)置響應(yīng)頭
//設(shè)置響應(yīng)頭
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
//filename 為 Excel 文件名稱(chēng)5.獲取 response 的輸出流,通過(guò)輸出流將 Excel 輸出。
//將 Excel 表輸出到輸出流 OutputStream out = response.getOutputStream(); workbook.write(out);
樣例代碼
//1、通過(guò) SXSSFWorkbook 設(shè)置 Excel 表
//2、設(shè)置響應(yīng)頭
//3、輸出流輸出
@RequestMapping(value = "/down", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public void downXlsx(HttpServletResponse response) {
//設(shè)置表名
String fileName = "銷(xiāo)售榜單.xlsx";
SXSSFWorkbook workbook = new SXSSFWorkbook();
//設(shè)置表格名稱(chēng)
SXSSFSheet sheet = workbook.createSheet("銷(xiāo)售榜單");
//設(shè)置表格默認(rèn)寬度30
sheet.setDefaultColumnWidth(30);
//設(shè)置 sheet 表格的第0行
SXSSFRow row = sheet.createRow(0);
//設(shè)置 sheet 表格的第0行第0列的值
row.createCell(0).setCellValue("商品名稱(chēng)");
//設(shè)置 sheet 表格的第0行第1列的值
row.createCell(1).setCellValue("數(shù)量");
OutputStream out = null;
try {
//設(shè)置響應(yīng)頭
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
//將 Excel 表輸出到輸出流
out = response.getOutputStream();
workbook.write(out);
out.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
workbook.dispose();
try {
if (out != null)
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}到此這篇關(guān)于Springboot 前后端分離項(xiàng)目使用 POI 生成并導(dǎo)出 Excel的文章就介紹到這了,更多相關(guān)Springboot 前后端分離項(xiàng)目?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django rest framework使用類(lèi)視圖實(shí)現(xiàn)首頁(yè)API
這篇文章主要介紹了Django rest framework使用類(lèi)視圖實(shí)現(xiàn)首頁(yè)API,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
面試題:java中為什么foreach中不允許對(duì)元素進(jìn)行add和remove
讀者遇到了一個(gè)比較經(jīng)典的面試題,也就是標(biāo)題上說(shuō)的,為什么 foreach 中不允許對(duì)元素進(jìn)行 add 和 remove,本文就詳細(xì)的介紹一下,感興趣的可以了解一下2021-10-10
Java自定義類(lèi)加載器實(shí)現(xiàn)類(lèi)隔離詳解
由于每種組件的不同版本所依賴(lài)的jar包不同,我們可以借鑒tomcat的實(shí)現(xiàn)方式,通過(guò)自定義類(lèi)加載器打破雙親委派機(jī)制來(lái)實(shí)現(xiàn)類(lèi)隔離,從而達(dá)到操作多組件多版本的目的。本文就來(lái)和大家詳細(xì)聊聊實(shí)現(xiàn)方法2023-03-03
在MyBatis的XML映射文件中<trim>元素所有場(chǎng)景下的完整使用示例代碼
在MyBatis的XML映射文件中,<trim>元素用于動(dòng)態(tài)添加SQL語(yǔ)句的一部分,處理前綴、后綴及多余的逗號(hào)或連接符,示例展示了如何在UPDATE、SELECT、INSERT和SQL片段中使用<trim>元素,以實(shí)現(xiàn)動(dòng)態(tài)的SQL構(gòu)建,感興趣的朋友一起看看吧2025-01-01
SpringBoot實(shí)現(xiàn)圖形驗(yàn)證碼的操作方法
隨著安全性的要求越來(lái)越高,目前許多項(xiàng)目中都使用了驗(yàn)證碼,驗(yàn)證碼也有各種類(lèi)型,如 圖形驗(yàn)證碼、短信驗(yàn)證碼、郵件驗(yàn)證碼、人臉識(shí)別等,本文給大家介紹SpringBoot實(shí)現(xiàn)圖形驗(yàn)證碼的方法,感興趣的朋友跟隨小編一起看看吧2024-07-07
全面詳解java代碼重構(gòu)與設(shè)計(jì)模式
這篇文章主要為大家介紹了全面詳解java代碼重構(gòu)與設(shè)計(jì)模式的全面詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
ConcurrentMap.putIfAbsent(key,value)用法實(shí)例
這篇文章主要介紹了ConcurrentMap.putIfAbsent(key,value)用法實(shí)例,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02
Spring @Value如何通過(guò)${}、#{}注入不同類(lèi)型的值
這篇文章主要介紹了Spring @Value如何通過(guò)${}、#{}注入不同類(lèi)型的值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
spring cloud gateway請(qǐng)求跨域問(wèn)題解決方案
這篇文章主要介紹了spring cloud gateway請(qǐng)求跨域問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01

