easypoi 导出Excel 使用总结

easypoi 导出Excel

导出Excel需要设置标题,且标题是多行,标题下面是列表头

设置表格标题

java 复制代码
 ExportParams headExportParams = new ExportParams();
 StringBuilder buffer = new StringBuilder("");
 buffer.append("1、课程名称:......\n")
         .append("2、课程标签:......\n")
         .append("5、适用人群:......");
 headExportParams.setTitle(buffer.toString());
 headExportParams.setTitleHeight((short) 50);

设置标题样式

java 复制代码
headExportParams.setStyle(MyExcelExportStyler.class);

完整代码如下

java 复制代码
@Override
@Async
public void downloadCoursewareDataAsync(List<Long> ids, FileDownloadHistory history, String sheetName) {
    try {
        history.setExportStatus(1);
        List<CoursewareManagement> list = coursewareManagementMapper.queryCoursewareByIdList(ids);
        List<CoursewareManagementDto> voList = new ArrayList<>();
		
        // 创建参数对象(用来设定excel得sheet得内容等信息)
        ExportParams headExportParams = new ExportParams();
        StringBuilder buffer = new StringBuilder("");
        buffer.append("1、课程名称:......,不允许重名\n")
                .append("2、课程标签:多个标签用 、 隔开\n")
                .append("5、适用人群-岗位:......");
        headExportParams.setTitle(buffer.toString());
        headExportParams.setTitleHeight((short) 50);
        headExportParams.setStyle(MyExcelExportStyler.class);
        // 设置sheet得名称
        headExportParams.setSheetName(sheetName);
        // 创建sheet1使用得map
        Map<String, Object> headExportMap = new HashMap<>();
        // title的参数为ExportParams类型,目前仅仅在ExportParams中设置了sheetName
        headExportMap.put("title", headExportParams);
        // 模版导出对应得实体类型
        headExportMap.put("entity", CoursewareManagementDto.class);
        // sheet中要填充得数据
        headExportMap.put("data", voList);

        // 将sheet1、sheet2、sheet3使用得map进行包装
        List<Map<String, Object>> sheetsList = new ArrayList<>();
        sheetsList.add(headExportMap);

        try (
                Workbook workbook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.XSSF);
                FileOutputStream outputStream = new FileOutputStream(history.getFilePath());
        ) {
            workbook.write(outputStream);
        } catch (Exception e) {
            throw e;
        }
    } catch (Exception e) {
        log.error("课件管理异步下载接口==>{}", e.getLocalizedMessage(), e);
        history.setExportStatus(0);
    }
    history.setModifyTime(new Date());
    fileDownloadHistoryMapper.updateByPrimaryKeySelective(history);
}

public class MyExcelExportStyler extends ExcelExportStylerDefaultImpl {

    public MyExcelExportStyler(Workbook workbook) {
        super(workbook);
    }

    /**
     * <p>
     * 设置表格标题样式
     * </p>
     */
    @Override
    public CellStyle getHeaderStyle(short color) {
        CellStyle titleStyle = workbook.createCellStyle();
        Font font = workbook.createFont();
        font.setFontHeightInPoints((short) 12);
        titleStyle.setFont(font);
        titleStyle.setWrapText(true);
        titleStyle.setAlignment(HorizontalAlignment.LEFT);
        titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        return titleStyle;
    }
}

源码里的 Excel 导出基本注释很重要,特别是按实体类导出的时候

可以看下这个类 cn.afterturn.easypoi.excel.annotation.Excel

@Excel needMerge 和 @ExcelCollection 配合使用,处理 Excel 一对多的关系

java 复制代码
@Data
public class CoursewareManagementVo implements IExcelModel, IExcelDataModel {

    @Excel(name = "课件名称", needMerge = true, width = 25, orderNum = "1")
    private String coursewareName;
    @Excel(name = "课件格式", needMerge = true, width = 25, orderNum = "2")
    private String coursewareFormat;
    @Excel(name = "创建时间", needMerge = true, width = 25, orderNum = "3", format = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    @Excel(name = "课程条线", needMerge = true, width = 25, orderNum = "4")
    private String classifyName;
    @ExcelCollection(name = "", orderNum = "5")
    private List<ColumnVo> columnVos;

    private String errorMsg;
    private Integer rowNum;

    @Override
    public Integer getRowNum() {
        return rowNum;
    }

    @Override
    public void setRowNum(Integer integer) {
        this.rowNum = integer;
    }

    @Override
    public String getErrorMsg() {
        return errorMsg;
    }

    @Override
    public void setErrorMsg(String s) {
        this.errorMsg = s;
    }

}
相关推荐
cpsvps_net15 小时前
美国服务器环境下Windows容器工作负载智能弹性伸缩
windows
甄超锋16 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
cpsvps18 小时前
美国服务器环境下Windows容器工作负载基于指标的自动扩缩
windows
网硕互联的小客服21 小时前
Apache 如何支持SHTML(SSI)的配置方法
运维·服务器·网络·windows·php
etcix21 小时前
implement copy file content to clipboard on Windows
windows·stm32·单片机
许泽宇的技术分享1 天前
Windows MCP.Net:基于.NET的Windows桌面自动化MCP服务器深度解析
windows·自动化·.net
非凡ghost1 天前
AMS PhotoMaster:全方位提升你的照片编辑体验
windows·学习·信息可视化·软件需求
mortimer1 天前
一次与“顽固”外部程序的艰难交锋:subprocess 调用exe踩坑实录
windows·python·ai编程
gameatp1 天前
从 Windows 到 Linux 服务器的全自动部署教程(免密登录 + 压缩 + 上传 + 启动)
linux·服务器·windows
穷人小水滴1 天前
在 windows 运行 flatpak 应用 (WSL)
linux·windows·ubuntu