簡單導出更新版---詳細
1.導入依賴
<!--easy-poi-->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-spring-boot-starter</artifactId>
<version>4.3.0</version>
</dependency>
2.編寫一個導出的類的方法
package com.jx.util.api.util;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.stereotype.Component;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.net.URLEncoder;
import java.util.List;
@Component
public class MyExcelImportUtil {
/**
* 簡單導出數據
* @param tage 導出的表的名稱
* @param list 要導出的數據
* @param t 導出表的實體
* @param response 響應流
* @param <T>
* @throws Exception
*/
public static <T> void simplyExportExcel(String tage,List<T> list, T t, HttpServletResponse response) throws Exception {
ExportParams params = new ExportParams();
params.setSheetName(tage);
params.setStyle(ExcelStyleUtil.class);
Workbook workbook = ExcelExportUtil.exportExcel(params, t.getClass(), list);
// 設置響應的ContentType和Header,告訴瀏覽器下載文件
response.setContentType("application/vnd.ms-excel");
response.setHeader("Access-Control-Expose-Headers","Content-Disposition");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(tage+".xls", "UTF-8"));
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
workbook.write(byteArrayOutputStream);
byte[] bytes = byteArrayOutputStream.toByteArray();
ServletOutputStream servletOutputStream = response.getOutputStream();
int bufferSize = 1024 * 1024; // 1 兆字節(jié)
int offset = 0;
while (offset < bytes.length) {
int remaining = bytes.length - offset;
int chunkSize = Math.min(remaining, bufferSize);
servletOutputStream.write(bytes, offset, chunkSize);
offset += chunkSize;
servletOutputStream.flush();
}
servletOutputStream.close();
}
}
額外附加處理樣式的類
package com.jx.util.api.util;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.afterturn.easypoi.excel.entity.params.ExcelForEachParams;
import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler;
import org.apache.poi.ss.usermodel.*;
/**
* @author 丁慶洋
*/
public class ExcelStyleUtil implements IExcelExportStyler {
private static final short STRING_FORMAT = (short) BuiltinFormats.getBuiltinFormat("TEXT");
private static final short FONT_SIZE_TEN = 11;
private static final short FONT_SIZE_ELEVEN = 13;
private static final short FONT_SIZE_TWELVE = 10;
/**
* 大標題樣式
*/
private CellStyle headerStyle;
/**
* 每列標題樣式
*/
private CellStyle titleStyle;
/**
* 數據行樣式
*/
private CellStyle styles;
public ExcelStyleUtil(Workbook workbook) {
this.init(workbook);
}
/**
* 初始化樣式
*
* @param workbook
*/
private void init(Workbook workbook) {
this.headerStyle = initHeaderStyle(workbook);
this.titleStyle = initTitleStyle(workbook);
this.styles = initStyles(workbook);
}
/**
* 大標題樣式
*
* @param color
* @return
*/
@Override
public CellStyle getHeaderStyle(short color) {
return headerStyle;
}
/**
* 每列標題樣式
*
* @param color
* @return
*/
@Override
public CellStyle getTitleStyle(short color) {
return titleStyle;
}
/**
* 數據行樣式
*
* @param parity 可以用來表示奇偶行
* @param entity 數據內容
* @return 樣式
*/
@Override
public CellStyle getStyles(boolean parity, ExcelExportEntity entity) {
return styles;
}
/**
* 獲取樣式方法
*
* @param dataRow 數據行
* @param obj 對象
* @param data 數據
*/
@Override
public CellStyle getStyles(Cell cell, int dataRow, ExcelExportEntity entity, Object obj, Object data) {
return getStyles(true, entity);
}
/**
* 模板使用的樣式設置
*/
@Override
public CellStyle getTemplateStyles(boolean isSingle, ExcelForEachParams excelForEachParams) {
return null;
}
/**
* 初始化--大標題樣式
*
* @param workbook
* @return
*/
private CellStyle initHeaderStyle(Workbook workbook) {
CellStyle style = getBaseCellStyle(workbook);
Font font = getFont(workbook, FONT_SIZE_TWELVE, true);
font.setColor(Font.COLOR_RED);
style.setFont(font);
return style;
}
/**
* 初始化--每列標題樣式
*
* @param workbook
* @return
*/
private CellStyle initTitleStyle(Workbook workbook) {
CellStyle style = getBaseCellStyle(workbook);
style.setFont(getFont(workbook, FONT_SIZE_ELEVEN, true));
//背景色
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
return style;
}
/**
* 初始化--數據行樣式
*
* @param workbook
* @return
*/
private CellStyle initStyles(Workbook workbook) {
CellStyle style = getBaseCellStyle(workbook);
style.setFont(getFont(workbook, FONT_SIZE_TEN, false));
style.setDataFormat(STRING_FORMAT);
return style;
}
/**
* 基礎樣式
*
* @return
*/
private CellStyle getBaseCellStyle(Workbook workbook) {
CellStyle style = workbook.createCellStyle();
//下邊框
style.setBorderBottom(BorderStyle.THIN);
//左邊框
style.setBorderLeft(BorderStyle.THIN);
//上邊框
style.setBorderTop(BorderStyle.THIN);
//右邊框
style.setBorderRight(BorderStyle.THIN);
//水平居中
style.setAlignment(HorizontalAlignment.CENTER);
//上下居中
style.setVerticalAlignment(VerticalAlignment.CENTER);
//設置自動換行
style.setWrapText(false);
return style;
}
/**
* 字體樣式
*
* @param size 字體大小
* @param isBold 是否加粗
* @return
*/
private Font getFont(Workbook workbook, short size, boolean isBold) {
Font font = workbook.createFont();
//字體樣式
font.setFontName("宋體");
//是否加粗
font.setBold(isBold);
//字體大小
font.setFontHeightInPoints(size);
return font;
}
}
3.接下來就是正式開始處理數據
(1)對導出的實體進行處理

時間的格式一樣要注意 格式不對 會導致 解析錯誤 導出不合理的數據

一定記得加produces="application/octet-stream" 切記!!!!!!!

處理數據 如果想要文字 進行封裝方法處理

當查詢條件是ids時 用

來處理

這是用的時候注意事項
還有就是如果入參是多個id的時候 用post請求來寫 要不前端笨比不好處理

浙公網安備 33010602011771號