SpringBoot實(shí)現(xiàn)excel文件生成和下載
使用SpringBoot實(shí)現(xiàn)excel生成和下載,生成模板如下

controller
@RequestMapping(value = { "/downloadExcelTemplate" }, method = RequestMethod.GET)
public String downloadExcelTemplate(HttpSession httpSession, HttpServletResponse response) {
try {
dealExcelService.downloadExcelTemplate(response);
return "success";
} catch (Exception e) {
logger.error("downloadExcelTemplate_error", e);
return "failure";
}
}
service
public void downloadExcelTemplate(HttpServletResponse response) throws Exception {
//文件名
SimpleDateFormat format3 = new SimpleDateFormat("yyyyMMddHHmm");
String fileName = new String(("文件名" + format3.format(new Date()) + "導(dǎo)入模板").getBytes(), "ISO8859_1");
//配置請求頭
ServletOutputStream outputStream = response.getOutputStream();
// 組裝附件名稱和格式
response.setHeader("Content-disposition", "attachment; filename=" + fileName + ".xlsx");
// 創(chuàng)建一個(gè)workbook 對應(yīng)一個(gè)excel應(yīng)用文件
XSSFWorkbook workBook = new XSSFWorkbook();
// 在workbook中添加一個(gè)sheet,對應(yīng)Excel文件中的sheet
XSSFSheet sheet = workBook.createSheet("模板");
ExportUtil exportUtil = new ExportUtil(workBook, sheet);
XSSFCellStyle headStyle = exportUtil.getHeadStyle();
XSSFCellStyle bodyStyle = exportUtil.getBodyStyle2();
// 構(gòu)建表頭
XSSFRow headRow = ExportUtil.createRow(sheet, 0);
XSSFCell cell;
String[] titles = {"表頭一", "表頭二", "表頭三"};
int index = 0;
for (String title : titles) {
cell = ExportUtil.createCell(headRow, index);
cell.setCellStyle(headStyle);
cell.setCellValue(title);
index++;
}
try {
workBook.write(outputStream);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
ExportUtil導(dǎo)出工具類
package com.shengsheng.utils;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.*;
/**
* excel 表格導(dǎo)出工具類
*
* @author shengshenglalala
*/
public class ExportUtil {
private XSSFWorkbook wb;
private XSSFSheet sheet;
/**
* @param wb
* @param sheet
*/
public ExportUtil(XSSFWorkbook wb, XSSFSheet sheet) {
this.wb = wb;
this.sheet = sheet;
}
/**
* 合并單元格后給合并后的單元格加邊框
*
* @param region
* @param cs
*/
public void setRegionStyle(CellRangeAddress region, XSSFCellStyle cs) {
int toprowNum = region.getFirstRow();
for (int i = toprowNum; i <= region.getLastRow(); i++) {
XSSFRow row = sheet.getRow(i);
for (int j = region.getFirstColumn(); j <= region.getLastColumn(); j++) {
XSSFCell cell = row.getCell(j);
cell.setCellStyle(cs);
}
}
}
/**
* 設(shè)置表頭的單元格樣式
*
* @return
*/
public XSSFCellStyle getHeadStyle() {
// 創(chuàng)建單元格樣式
XSSFCellStyle cellStyle = wb.createCellStyle();
// // 設(shè)置單元格的背景顏色為淡藍(lán)色
cellStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index);
cellStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
// 設(shè)置單元格居中對齊
cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
// 設(shè)置單元格垂直居中對齊
cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
// 創(chuàng)建單元格內(nèi)容顯示不下時(shí)自動(dòng)換行
// cellStyle.setWrapText(true);
// 設(shè)置單元格字體樣式
XSSFFont font = wb.createFont();
// 設(shè)置字體加粗
font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
font.setFontName("宋體");
// font.setFontHeight((short) 200);
cellStyle.setFont(font);
// 設(shè)置單元格邊框?yàn)榧?xì)線條
// cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);
// cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);
// cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);
// cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);
return cellStyle;
}
/**
* 設(shè)置表體的單元格樣式
*
* @return
*/
public XSSFCellStyle getBodyStyle2() {
// 創(chuàng)建單元格樣式
// 創(chuàng)建單元格樣式
XSSFCellStyle cellStyle = wb.createCellStyle();
// 創(chuàng)建單元格內(nèi)容顯示不下時(shí)自動(dòng)換行
// cellStyle.setWrapText(true);
// 設(shè)置單元格字體樣式
XSSFFont font = wb.createFont();
// 設(shè)置字體加粗
// font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
font.setFontName("宋體");
font.setFontHeight((short) 200);
font.setColor(HSSFColor.BLACK.index);
cellStyle.setFont(font);
// 設(shè)置單元格邊框?yàn)榧?xì)線條
return cellStyle;
}
/**
* 沒有行,就創(chuàng)建行
*
* @param sheet
* @param index
* @return
*/
public static XSSFRow createRow(XSSFSheet sheet, Integer index) {
XSSFRow row = sheet.getRow(index);
if (row == null) {
return sheet.createRow(index);
}
return row;
}
/**
* 如果沒有列,就創(chuàng)建列
*
* @param row
* @param index
* @return
*/
public static XSSFCell createCell(XSSFRow row, Integer index) {
XSSFCell cell = row.getCell(index);
if (cell == null) {
return row.createCell(index);
}
return cell;
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java配置JDK開發(fā)環(huán)境及環(huán)境變量
這篇文章主要為大家詳細(xì)介紹了Java配置JDK開發(fā)環(huán)境及環(huán)境變量,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
SpringBoot整合Security實(shí)現(xiàn)權(quán)限控制框架(案例詳解)
Spring Security是一個(gè)能夠?yàn)榛赟pring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框,是一個(gè)重量級的安全管理框架,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-08-08
Java實(shí)現(xiàn)郵件發(fā)送的過程及代碼詳解
這篇文章主要介紹了Java實(shí)現(xiàn)郵件發(fā)送的過程及代碼詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
Java中通過jsch來連接遠(yuǎn)程服務(wù)器執(zhí)行l(wèi)inux命令
這篇文章主要介紹了Java中通過jsch來連接遠(yuǎn)程服務(wù)器執(zhí)行l(wèi)inux命令的相關(guān)資料,需要的朋友可以參考下2016-03-03
MyBatis中的SQL映射文件配置結(jié)果映射的操作指南
MyBatis?是一款優(yōu)秀的?ORM?框架,它提供了多種配置方式來定義?SQL?語句以及結(jié)果映射規(guī)則,本文將介紹?MyBatis?中的?SQL?映射文件如何配置結(jié)果映射,包括常規(guī)類型、集合類型等多種情況,需要的朋友可以參考下2023-07-07
解析springboot集成AOP實(shí)現(xiàn)日志輸出的方法
如果這需要在每一個(gè)controller層去寫的話代碼過于重復(fù),于是就使用AOP定義切面 對其接口調(diào)用前后進(jìn)行攔截日志輸出。接下來通過本文給大家介紹springboot集成AOP實(shí)現(xiàn)日志輸出,需要的朋友可以參考下2021-11-11
一文詳解Spring事務(wù)的實(shí)現(xiàn)與本質(zhì)
這篇文章主要介紹了Spring中事務(wù)的兩種實(shí)現(xiàn)方式:聲明式事務(wù)、編程式事務(wù)以及他們的本質(zhì)。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-04-04
Java四種訪問控制修飾符知識(shí)點(diǎn)總結(jié)
本篇文章給大家詳細(xì)分析了Java四種訪問控制修飾符的相關(guān)知識(shí)點(diǎn),有興趣的朋友可以參考學(xué)習(xí)下。2018-03-03
springboot整合mybatis將sql打印到日志的實(shí)例詳解
這篇文章主要介紹了springboot整合mybatis將sql打印到日志的實(shí)例詳解,需要的朋友可以參考下2017-12-12

