我们在使用EasyExcel导出文件时,需要设置Excel的一些格式,比如表头字体大小、自动换行、居中、冻结窗格、表头打印固定等
1、设置表头样式
// 创建一个写出的单元格样式对象
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
// 背景设置为白色,也可设置为其他颜色
headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
// 设置表头字体
WriteFont headWriteFont = new WriteFont();
// 设置字体大小为12
headWriteFont.setFontHeightInPoints((short)12);
// 设置加粗
headWriteFont.setBold(true);
// 如需设置斜体
// headWriteFont.setItalic(BooleanEnum.TRUE.getBooleanValue());
// 把字体对象设置到单元格样式对象中
headWriteCellStyle.setWriteFont(headWriteFont);
//设置表头居中
headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
2、设置内容样式
// 创建一个写出的单元格样式对象
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
// 设置内容字体
WriteFont contentWriteFont= new WriteFont();
// 设置内容字体大小为12
contentWriteFont.setFontHeightInPoints((short) 12);
// 把字体对象设置到单元格样式对象中
contentWriteCellStyle.setWriteFont(contentWriteFont);
// 设置水平居中
contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
// 设置垂直居中
contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
// 边框设置
// BorderStyle.THIN:细线
// BorderStyle.THICK:粗线
// BorderStyle.MEDIUM: 中线
// BorderStyle.MEDIUM_DASHED:中虚线
// 设置单元格左边框为细线
contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);
// 设置单元格上边框为细线
contentWriteCellStyle.setBorderTop(BorderStyle.THIN);
// 设置单元格右边框为细线
contentWriteCellStyle.setBorderRight(BorderStyle.THIN);
// 设置单元格下边框为细线
contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);
//设置 自动换行
contentWriteCellStyle.setWrapped(true);
3、设置打印表头固定以及冻结窗格第一行
需求:导出的Excel有很多列,打印出来会有很多页纸,需要每页纸都有表头
导出的Excel,下滑需要表头固定
public class CustomSheetWriteHandler implements SheetWriteHandler {
public int colSplit = 0, rowSplit = 1, leftmostColumn = 0, topRow = 1;
@Override
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
//得到Sheet
Sheet sheet = writeSheetHolder.getSheet();
// 设置每页都有表头
sheet.setRepeatingRows(CellRangeAddress.valueOf("1:1"));
// 设置冻结窗格第一行
sheet.createFreezePane(colSplit, rowSplit, leftmostColumn, topRow);
}
}
4、输出Excel
HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
// 输出 Excel到具体地址
String filePath = "/home/ssp_backend/exportFile/"+ System.currentTimeMillis()+".xlsx";
// String filePath = "D:\\data\\"+ System.currentTimeMillis()+".xlsx";
File tempFile = new File(filePath);
EasyExcel.write(tempFile, Demo.class)
.registerWriteHandler(horizontalCellStyleStrategy)
.registerWriteHandler(new CustomSheetWriteHandler())
.sheet("sheet").doWrite(demoList);
// 输出 Excel
// Class<T> head
EasyExcel.write(response.getOutputStream(), head)
.autoCloseStream(false) // 不要自动关闭,交给 Servlet 自己处理
.registerWriteHandler(horizontalCellStyleStrategy)
.registerWriteHandler(new CustomSheetWriteHandler())
.sheet(sheetName).doWrite(demoList);
// 设置 header 和 contentType。写在最后的原因是,避免报错时,响应 contentType 已经被修改了
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
response.setContentType("application/vnd.ms-excel;charset=UTF-8");