java导出+多sheet

java导出+多sheet

  /**
     * 导出三个sheet
     * @param checkAnalysisVo
     * @param response
     */
    @DS("clickhouse")
    @Override
    public void downloadModeMore(CheckAnalysisVo checkAnalysisVo, HttpServletResponse response) {
        //普通的时间转换
        String currentMonth = DateUtil.now();
        String previousMonth = DateUtil.formatDateTime(DateUtil.offsetMonth(DateUtil.date(), -1));
        //开始时间
        if (StrUtil.isBlank(checkAnalysisVo.getStartTime())) {
            checkAnalysisVo.setStartTime(previousMonth);
        }
        //结束时间
        if (StrUtil.isBlank(checkAnalysisVo.getEndTime())) {
            checkAnalysisVo.setEndTime(currentMonth);
        }
        //设置 operate_type_id 值 查询表iu_notice
        checkAnalysisVo.setOperateTypeId(OperateTypeEnum.REPEAT.getId());
        List<CheckAnalysisVo> checkAnalysisVos5 = queryModeExcel5(checkAnalysisVo);

        //设置 operate_type_id 值  并且standard_project_name不为空
        checkAnalysisVo.setOperateTypeId(PatientOperateTypeEnum.HR_PATIENT.getId());
        List<CheckAnalysisVo> checkAnalysisVos8 = queryModeExcel8(checkAnalysisVo);
        //设置 operate_type_id 值
        checkAnalysisVo.setOperateTypeId(PatientOperateTypeEnum.NO_HR_PATIENT.getId());
        List<CheckAnalysisVo> checkAnalysisVos9 = queryModeExcel9(checkAnalysisVo);

        try {
            downloadMore(checkAnalysisVos5, checkAnalysisVos8, checkAnalysisVos9, response, checkAnalysisVo);
        } catch (Exception e) {
            log.error("检查分析项目导出报错,报错日志============", e);
        }
    }

downloadMore();

 /*
     * 导出三个sheet
     * */
    private void downloadMore(List<CheckAnalysisVo> checkAnalysisVos5,
                              List<CheckAnalysisVo> checkAnalysisVos8,
                              List<CheckAnalysisVo> checkAnalysisVos9,
                              HttpServletResponse response, CheckAnalysisVo checkAnalysisVo) throws IOException, ParseException {
       /* if (CollectionUtils.isEmpty(checkAnalysisVos2) && CollectionUtils.isEmpty(checkAnalysisVos8)) {
            return;
        }*/
        Map<String, String> map1 = new LinkedHashMap<String, String>();
        map1.put("id", "序号");
        map1.put("modality", "检查模式");
        map1.put("standardSecondBodyPart", "检查部位");
        map1.put("standardProjectName", "标准项目名称");
        map1.put("noticeNumber", "提醒次数");

        Map<String, String> map2 = new LinkedHashMap<String, String>();
        map2.put("id", "序号");
        map2.put("modality", "检查模式");
        map2.put("standardSecondBodyPart", "检查部位");
        map2.put("standardProjectName", "标准项目名称");
        map2.put("noticeNumber", "互认次数");

        Map<String, String> map3 = new LinkedHashMap<String, String>();
        map3.put("id", "序号");
        map3.put("modality", "检查模式");
        map3.put("standardSecondBodyPart", "检查部位");
        map3.put("standardProjectName", "标准项目名称");
        map3.put("noticeNumber", "不互认次数");

        List<SheetDTO> arrayList = new ArrayList<SheetDTO>();

        arrayList.add(new SheetDTO("重复提醒检查项目", map1, checkAnalysisVos5));
        arrayList.add(new SheetDTO("互认项目", map2, checkAnalysisVos8));
        arrayList.add(new SheetDTO("不互认项目", map3, checkAnalysisVos9));
        HuExcelUtils.exportExcel(response, arrayList, "检查项目分析", checkAnalysisVo.getStartTime(), checkAnalysisVo.getEndTime());

    }

实体类sheetdto

package com.imagingunion.common.base;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;

public class SheetDTO implements Serializable {

    private static final long serialVersionUID = 1L;

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

    /**
     * 字段和别名,如果使用这个,properties 和 titles可以不用处理
     * Map<字段, 别名>  如:Map<"name", "姓名">
     */
    private Map<String, String> fieldAndAlias;

    /**
     * 列宽
* 设置列宽时必须每个字段都设置才生效(columnWidth.size = fieldAndAlias.size) */
private List<Integer> columnWidth; /** 数据集 */ private Collection<?> collection; public SheetDTO() { } /** * * @param sheetName sheet页名称 * @param fieldAndAlias 字段和别名 * @param collection 数据集 */ public SheetDTO(String sheetName, Map<String, String> fieldAndAlias, Collection<?> collection) { super(); this.sheetName = sheetName; this.fieldAndAlias = fieldAndAlias; this.collection = collection; } public String getSheetName() { return sheetName; } public void setSheetName(String sheetName) { this.sheetName = sheetName; } public Map<String, String> getFieldAndAlias() { return fieldAndAlias; } public void setFieldAndAlias(Map<String, String> fieldAndAlias) { this.fieldAndAlias = fieldAndAlias; } public List<Integer> getColumnWidth() { return this.columnWidth; } public void setColumnWidth(List<Integer> columnWidth) { this.columnWidth = columnWidth; } public Collection<?> getCollection() { return collection; } public void setCollection(Collection<?> collection) { this.collection = collection; } }
package com.imagingunion.common.utils;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.imagingunion.common.base.SheetDTO;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

public class HuExcelUtils {

    public static void exportExcel(HttpServletResponse response, List<SheetDTO> sheetList,
                                   String fileName,String startTime,String endTime) throws ParseException {

        Date orderDateStart = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(startTime);
        String startTimeTo = new SimpleDateFormat("yyyy-MM-dd").format(orderDateStart);

        Date orderDateStart2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(endTime);
        String endTimeTo = new SimpleDateFormat("yyyy-MM-dd").format(orderDateStart2);


        ExcelWriter bigWriter = ExcelUtil.getBigWriter();
        // 重命名第一个Sheet的名称,不然会默认多出一个Sheet1的页
        bigWriter.renameSheet(0, sheetList.get(0).getSheetName());
        for (SheetDTO sheet : sheetList) {
            // 指定要写出的 Sheet 页
            bigWriter.setSheet(sheet.getSheetName());
            List<Integer> columnWidth = sheet.getColumnWidth();
            if (columnWidth == null || columnWidth.size() != sheet.getFieldAndAlias().size()) {
                // 设置默认宽度
                for (int i = 0; i < sheet.getFieldAndAlias().size(); i++) {
                    bigWriter.setColumnWidth(i, 25);
                }
            } else {
                // 设置自定义宽度
                for (int i = 0; i < columnWidth.size(); i++) {
                    bigWriter.setColumnWidth(i, columnWidth.get(i));
                }
            }
            // 设置字段和别名
            bigWriter.setHeaderAlias(sheet.getFieldAndAlias());
            // 设置只导出有别名的字段
            bigWriter.setOnlyAlias(true);
            // 设置默认行高
            bigWriter.setDefaultRowHeight(18);
            // 设置冻结行
            bigWriter.setFreezePane(1);
            // 一次性写出内容,使用默认样式,强制输出标题
            bigWriter.write(sheet.getCollection(), true);
            // 设置所有列为自动宽度,不考虑合并单元格
//            bigWriter.autoSizeColumnAll();
        }

        ServletOutputStream out = null;
        try {
            //response为HttpServletResponse对象
            response.setContentType("application/vnd.ms-excel;charset=utf-8");
            response.setHeader("Content-Disposition",
                    "attachment;filename=" +
                            URLEncoder.encode(fileName +"_"+ startTimeTo + "至" + endTimeTo + ".xlsx", "UTF-8"));
            out = response.getOutputStream();
            bigWriter.flush(out, true);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭writer,释放内存
            bigWriter.close();
        }
        //此处记得关闭输出Servlet流
        IoUtil.close(out);
    }

}

你可能感兴趣的:(java,开发语言)