SpringBoot+EasyExcel设置excel样式

方式一:使用注解方式设置样式

模板可通过@HeadFontStyle、@HeadStyle、@ContentFontStyle、@ContentStyle、@HeadRowHeight @ContentRowHeight等注解设置excel单元格样式;

//字体样式及字体大小

@HeadFontStyle(fontName = "宋体",fontHeightInPoints = 11)

@ContentFontStyle(fontName = "宋体",fontHeightInPoints = 11)

//标题样式

@HeadStyle(wrapped = BooleanEnum.FALSE ,

horizontalAlignment= HorizontalAlignmentEnum.CENTER ,

verticalAlignment = VerticalAlignmentEnum.CENTER ,

borderLeft = BorderStyleEnum.THIN ,

borderRight = BorderStyleEnum.THIN ,

borderTop = BorderStyleEnum.THIN ,

borderBottom = BorderStyleEnum.THIN ,

fillForegroundColor = 49)

//单元格内容样式

@ContentStyle(wrapped = BooleanEnum.FALSE ,

horizontalAlignment= HorizontalAlignmentEnum.CENTER ,

verticalAlignment = VerticalAlignmentEnum.CENTER ,

borderLeft = BorderStyleEnum.THIN ,

borderRight = BorderStyleEnum.THIN ,

borderTop = BorderStyleEnum.THIN ,

borderBottom = BorderStyleEnum.THIN ,

fillForegroundColor = 9)

//标题及数据行高

@HeadRowHeight(24)

@ContentRowHeight(25)

public class CertifyOrderDetailsExcel {

复制代码
@ColumnWidth(10)
@ExcelProperty(value = {"统计","名称"},index = 1)
private String name;
复制代码
@ContentStyle(wrapped = BooleanEnum.TRUE,
        horizontalAlignment= HorizontalAlignmentEnum.CENTER,
        verticalAlignment = VerticalAlignmentEnum.CENTER,
        borderLeft = BorderStyleEnum.THIN,
        borderRight = BorderStyleEnum.THIN,
        borderTop = BorderStyleEnum.THIN,
        borderBottom = BorderStyleEnum.THIN,
        fillForegroundColor = 9)
复制代码
使用easyexcelFactory将数据到出excel文件

业务实现导出核心部分代码如下:

//此处list为需要导出的数据,通过数据库查询

List<Object> list = null;
// ServletOutputStream outputStream = response.getOutputStream();
//将列表导成excel,fileName为文件的具体路径(自行设定),也可为outputStream输出流

//CertifyOrderDetailsExcel.class为上面配置的excel模板类
EasyExcel.write(fileName, CertifyOrderDetailsExcel.class)
.sheet("统计")
.relativeHeadRowIndex(0)
.doWrite(list);

方式二:整体设置样式

复制代码
public static <T> void writeExcel(HttpServletRequest request, HttpServletResponse response, List<T> data, Class tClass, String name){
        try {
            name = java.net.URLEncoder.encode(name, "UTF-8").replaceAll("\\+", "%20");
            String dateStr = String.valueOf(LocalDate.now().getMonthValue())+"-"+LocalDate.now().getDayOfYear();
            name = name+dateStr;
            //防止下载时中文乱码
            name = new String(name.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
            response.setCharacterEncoding("utf-8");
            //添加这个是防止前端拿不到Content-disposition
            response.setHeader("Content-Disposition", "attachment;filename=" + name+".xlsx");
            response.setHeader("Access-Control-Expose-Headers","Content-disposition");
            WriteCellStyle headWriteCellStyle = new WriteCellStyle();
            WriteFont headWriteFont = new WriteFont();
            headWriteFont.setFontHeightInPoints((short) 12);
            headWriteCellStyle.setWriteFont(headWriteFont);
            //内容样式策略
            WriteCellStyle contentWriteCellStyle = new WriteCellStyle();

            contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
            contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);
            contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);
            contentWriteCellStyle.setBorderTop(BorderStyle.THIN);
            contentWriteCellStyle.setBorderRight(BorderStyle.THIN);
            contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);
            //设置 自动换行
            contentWriteCellStyle.setWrapped(true);
            // 字体策略
            WriteFont contentWriteFont = new WriteFont();
            // 字体大小
            contentWriteFont.setFontHeightInPoints((short) 12);
            contentWriteCellStyle.setWriteFont(contentWriteFont);
            // 这里需要设置不关闭流
            EasyExcelFactory.write(response.getOutputStream(), tClass).registerWriteHandler(new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle)).autoCloseStream(Boolean.FALSE).sheet("毛坯反馈参数(越南)").doWrite(data);
        } catch (Exception e) {
            //log.error("文件导出失败,错误信息{}",e);
            // 重置response
            response.reset();
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");
            try {
                response.getWriter();
            } catch (IOException ioException) {
                ioException.printStackTrace();
            }
        }
    }
相关推荐
愿你天黑有灯下雨有伞16 小时前
Java使用FastExcel实现Excel文件导入
java·excel
爆爆凯16 小时前
Excel 导入导出工具类文档
java·excel
凌康ACG1 天前
springboot打包二次压缩Excel导致损坏
spring boot·后端·excel
诸葛大钢铁1 天前
Excel转PDF的三种方法
笔记·职场和发展·pdf·excel
小小薛定谔2 天前
java操作Excel两种方式EasyExcel 和POI
java·python·excel
CodeCraft Studio2 天前
DHTMLX Suite 9.2 重磅发布:支持历史记录、类Excel交互、剪贴板、拖放增强等多项升级
javascript·excel·交互·表格·dhtmlx·grid·网格
小阳睡不醒2 天前
小白成长之路-Elasticsearch 7.0 配置
大数据·elasticsearch·excel
奋进的孤狼2 天前
【Excel】使用vlookup函数快速找出两列数据的差异项
excel
不讲废话的小白2 天前
解锁高效Excel技能:摆脱鼠标,快速编辑单元格
计算机外设·excel
CodeCraft Studio2 天前
Excel处理控件Aspose.Cells教程:使用 Python 在 Excel 中创建甘特图
python·excel·项目管理·甘特图·aspose·aspose.cells