JavaWeb導(dǎo)出Excel文件并彈出下載框
一、引言
在Java Web開發(fā)中經(jīng)常涉及到報(bào)表,最近做的項(xiàng)目中需要實(shí)現(xiàn)將數(shù)據(jù)庫中的數(shù)據(jù)顯示為表格,并且實(shí)現(xiàn)導(dǎo)出為Excel文件的功能。
二、相關(guān)jar包
使用POI可以很好的解決Excel的導(dǎo)入和導(dǎo)出的問題,POI下載地址:
poi-3.6-20091214.jar
三、關(guān)鍵代碼
首先導(dǎo)入上述jar包。
在生成excel時(shí)一般數(shù)據(jù)源形式為一個(gè)List,下面把生成Excel格式的代碼貼出來:
/**
* 以下為生成Excel操作
*/
// 1.創(chuàng)建一個(gè)workbook,對應(yīng)一個(gè)Excel文件
HSSFWorkbook wb = new HSSFWorkbook();
// 2.在workbook中添加一個(gè)sheet,對應(yīng)Excel中的一個(gè)sheet
HSSFSheet sheet = wb.createSheet("XXX表");
// 3.在sheet中添加表頭第0行,老版本poi對excel行數(shù)列數(shù)有限制short
HSSFRow row = sheet.createRow((int) 0);
// 4.創(chuàng)建單元格,設(shè)置值表頭,設(shè)置表頭居中
HSSFCellStyle style = wb.createCellStyle();
// 居中格式
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 設(shè)置表頭
HSSFCell cell = row.createCell(0);
cell.setCellValue("表頭1");
cell.setCellStyle(style);
cell = row.createCell(1);
cell.setCellValue("表頭2");
cell.setCellStyle(style);
cell = row.createCell(2);
cell.setCellValue("表頭3");
cell.setCellStyle(style);
cell = row.createCell(3);
cell.setCellValue("表頭4");
cell.setCellStyle(style);
cell = row.createCell(4);
cell.setCellValue("表頭5");
cell.setCellStyle(style);
生成excel格式后要將數(shù)據(jù)寫入excel:
// 循環(huán)將數(shù)據(jù)寫入Excel
for (int i = 0; i < lists.size(); i++) {
row = sheet.createRow((int) i + 1);
List list= lists.get(i);
// 創(chuàng)建單元格,設(shè)置值
row.createCell(0).setCellValue(list.getXXX());
row.createCell(1).setCellValue(list.getXXX());
row.createCell(2).setCellValue(list.getXXX());
row.createCell(3).setCellValue(list.getXXX());
row.createCell(4).setCellValue(list.getXXX());
}
之后將生成的Excel以流輸出。
*不彈出下載框
FileOutputStream out =new FileOutputStream("E:/XXX.xls");
wb.write(out);
out.close();
*彈出下載框
String fileName = "XXX表";
ByteArrayOutputStream os = new ByteArrayOutputStream();
wb.write(os);
byte[] content = os.toByteArray();
InputStream is = new ByteArrayInputStream(content);
// 設(shè)置response參數(shù),可以打開下載頁面
res.reset();
res.setContentType("application/vnd.ms-excel;charset=utf-8");
res.setHeader("Content-Disposition", "attachment;filename="
+ new String((fileName + ".xls").getBytes(), "iso-8859-1"));
ServletOutputStream out = res.getOutputStream();
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(is);
bos = new BufferedOutputStream(out);
byte[] buff = new byte[2048];
int bytesRead;
// Simple read/write loop.
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
if (bis != null)
bis.close();
if (bos != null)
bos.close();
}
完成以上操作之后即可跳轉(zhuǎn)到其他頁面。
同時(shí)POI還可以將Excel上傳解析顯示在網(wǎng)頁中,這個(gè)另一篇文章總結(jié),敬請期待!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springBoot不同module之間互相依賴的實(shí)現(xiàn)
本文主要介紹了springBoot不同module之間互相依賴的實(shí)現(xiàn),不同模塊之間的依賴通常是通過Maven或Gradle來管理的,下面就來介紹一下如何實(shí)現(xiàn),感興趣的可以了解一下2024-08-08
idea激活A(yù)ctivateJrebel熱部署的方法詳解
這篇文章主要介紹了idea激活A(yù)ctivateJrebel熱部署的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
在idea中創(chuàng)建SpringBoot項(xiàng)目
這篇文章主要介紹了在idea中創(chuàng)建SpringBoot項(xiàng)目,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07
詳解SpringCloud Finchley Gateway 統(tǒng)一異常處理
這篇文章主要介紹了詳解SpringCloud Finchley Gateway 統(tǒng)一異常處理,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-10-10
springboot?serviceImpl初始化注入對象實(shí)現(xiàn)方式
這篇文章主要介紹了springboot?serviceImpl初始化注入對象實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
詳解Java使用雙異步后如何保證數(shù)據(jù)一致性
這篇文章主要為大家詳細(xì)介紹了Java使用雙異步后如何保證數(shù)據(jù)一致性,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以了解下2024-01-01
Springboot RabbitMQ 消息隊(duì)列使用示例詳解
本文通過示例代碼介紹了Springboot RabbitMQ 消息隊(duì)列使用,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,感興趣的朋友跟隨小編一起看看吧2024-06-06
如何在 Java 中利用 redis 實(shí)現(xiàn) LBS 服務(wù)
基于位置的服務(wù),是指通過電信移動運(yùn)營商的無線電通訊網(wǎng)絡(luò)或外部定位方式,獲取移動終端用戶的位置信息,在GIS平臺的支持下,為用戶提供相應(yīng)服務(wù)的一種增值業(yè)務(wù)。下面我們來一起學(xué)習(xí)一下吧2019-06-06

