springboot easyexcel 导出多数据源到各个sheet


pom.xml 导入

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
                        <version>2.2.7</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>

定义类SheetInfoBean,用于存储sheet名,要保存的实体类,以及数据列表

import java.util.List;

public class SheetInfoBean {

    /**
     * sheet页名称
     */
    private String sheetName;

    /**
     * sheet标题bean
     */
    private Class<?> headClass;

    /**
     * sheet页数据
     */
    private List<?> dataList;

    public SheetInfoBean() {
    }

    public SheetInfoBean(String sheetName, Class<?> headClass, List<?> dataList) {
        this.sheetName = sheetName;
        this.headClass = headClass;
        this.dataList = dataList;
    }

    public String getSheetName() {
        return sheetName;
    }

    public void setSheetName(String sheetName) {
        this.sheetName = sheetName;
    }

    public Class<?> getHeadClass() {
        return headClass;
    }

    public void setHeadClass(Class<?> headClass) {
        this.headClass = headClass;
    }

    public List<?> getDataList() {
        return dataList;
    }

    public void setDataList(List<?> dataList) {
        this.dataList = dataList;
    }

    @Override
    public String toString() {
        return "SheetInfoBean{" +
                "sheetName='" + sheetName + '\'' +
                ", headClass=" + headClass +
                ", dataList=" + dataList +
                '}';
    }
}

控制器方法写法

public void exportBaseDataExcel(HttpServletResponse response) {

        // 构造各个sheet页相关信息
        List<SheetInfoBean> sheetInfoList = new LinkedList<>();
        sheetInfoList.add(new SheetInfoBean("绩效打分领导", JxLeader.class, iJxLeaderService.list()));
        sheetInfoList.add(new SheetInfoBean("岗位级别系数人员分组", JxPostLevel.class, iJxPostLevelService.list()));
        sheetInfoList.add(new SheetInfoBean("绩效岗位条线", JxPostLine.class, iJxPostLineService.list()));
        sheetInfoList.add(new SheetInfoBean("部门系数", JxInstCoef.class, iJxInstCoefService.list()));
        //领导部门系数
        sheetInfoList.add(new SheetInfoBean("领导部门系数", JxLeaderInstCoef.class, iJxLeaderInstCoefService.list()));
        sheetInfoList.add(new SheetInfoBean("身份证号对应工号", JxIdCardToEmp.class, iJxIdCardToEmpService.list()));


        String fileName = "基础数据合集" + System.currentTimeMillis() + ".xlsx";
        String filePath = profile + "/" + fileName;

        // 导出文件
        File file = new File(filePath);
        try{
            ExcelWriter excelWriter = EasyExcel.write(file).build();
            WriteSheet writeSheet;
            for (SheetInfoBean bean : sheetInfoList) {
                // 构建sheet对象
                writeSheet = EasyExcel.writerSheet(bean.getSheetName()).head(bean.getHeadClass()).build();
                // 写出sheet数据
                excelWriter.write(bean.getDataList(), writeSheet);
            }
            // 关流
            excelWriter.finish();

            File targetFile = new File(filePath);
            FileInputStream inStream = new FileInputStream(targetFile);
            // 设置输出的格式
            response.setContentType("application/octet-stream");
            response.setCharacterEncoding("utf-8");
            response.addHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "utf-8"));
            // 循环取出流中的数据
            byte[] b = new byte[100];
            int len;
            while ((len = inStream.read(b)) > 0) {
                response.getOutputStream().write(b, 0, len);
            }
        } catch (Exception e) {
            // do something you want
            e.printStackTrace();
        }
    }

前端vue2 导出函数

// 导出文件 func: 接口,查询接口略...
var downloadFile = function (func) {
    func.then(function(result){
        var curType=result.headers["content-type"];
        if(curType=='application/json'){
             var fileReader = new FileReader();
            fileReader.onload = function() {
                try {
                    var jsonData = JSON.parse(fileReader.result); // 说明是普通对象数据,后台转换失败
                    gUtils.showMessage(jsonData.message);
                } catch (err) { // 解析成对象失败,说明是正常的文件流
                    console.log('success...');
                }
            };
            fileReader.readAsText(result);
            return;
        }
        var headers=result.headers;
        var fileName=headers['content-disposition'].split(";")[1].split("=")[1];
        var arr=fileName.split('"')
        fileName=arr.join("");
        fileName = revertUTF8(fileName);

        if (window.navigator.msSaveOrOpenBlob) {
           navigator.msSaveBlob(result, filename)
        }else{
            var tempLink = document.createElement("a");
            var url=window.URL || window.webkitURL || window.moxURL;
            tempLink.href = url.createObjectURL(result)
            tempLink.setAttribute("download", fileName);
            tempLink.click();
            window.URL.revokeObjectURL(result);//释放bolb内存
        }
       
       
    });
}

声明:大熊要飞翔|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - springboot easyexcel 导出多数据源到各个sheet


开心每一天