Bootstrap

使用EasyExcel导出文件的一些格式设置

我们在使用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");
;