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();
            }
        }
    }
相关推荐
葡萄城技术团队21 小时前
告别宽表拖拽:SpreadJS 如何让 Web 表格承接 Excel 操作习惯
数据库·html·excel
如意机反光镜裸21 小时前
如何合并局域网共享文件夹中的多个 Excel 工作簿?(免 WPS 会员解决方案)
服务器·excel·wps
不剪发的Tony老师1 天前
DuckDB数据分析实战:读写Excel文件
数据分析·excel·duckdb
lengjingzju2 天前
一天掌握Vim,精华使用笔记
笔记·vim·excel
灵析表格3 天前
灵析表格财务函数深度实用性分析与实操教程
开发语言·ai·json·excel·wps
杰夫(简道云个人搭建)3 天前
SAAS系统应该先解决业务问题,再优化体验
数据库·人工智能·低代码·excel·个人开发
AI导出鸭4 天前
怎么让豆包做表格?AI导出鸭苹果版将豆包输出的管道表格智能解析为二维结构,一键导出为Excel或Word标准表格。
人工智能·chatgpt·word·excel·ai导出鸭
Am-Chestnuts6 天前
AI表格复制到Excel后日期金额和编号被改写:导入与格式检查方法
excel
方渐鸿6 天前
【无标题】使用Agent总结网页信息写入Excel
ai·excel
汉拓3D数字化6 天前
设计标准化怎么落地?企业设计标准化的5阶段实施路径
科技·excel·系统·软件