Java借助hutool插件导出Excel

news/2024/7/21 5:04:33 标签: java, excel, 开发语言, hutool

先定义一些变量

private static final String FILE_NAME = "流水";
private static final int DEFAULT_COLUMN_SIZE = 25;
private static final int DEFAULT_ROW_HEIGHT = 22;
private static final String EXCEL_FILE_TYPE = ".xlsx";

Controller层

java">@ApiOperation(value = "浦发流水导出", notes = "浦发流水导出")
@PostMapping("/export")
public void export(@RequestBody PfSerialReqDto pfSerialReqDto, HttpServletResponse httpServletResponse) {
    pfCapitalSerialService.exportPfSerial(pfSerialReqDto,httpServletResponse);
}

Service层

java"> @Override
    public void exportPfSerial(PfSerialReqDto pfSerialReqDto, HttpServletResponse httpServletResponse) {
        ExcelWriter excelWriter = null;
        ServletOutputStream servletOutputStream = null;
        String now = DateUtils.getYYMMDDHHmmssSSS();
        try {
             excelWriter = handleFile(excelWriter);
            //reqDto转Bo
            PfSerialReqBo pfSerialReqBo = ConvertPfSerivalService.INSTANCE.convertPfSerialReqDto2Bo(pfSerialReqDto);
            //分页查询浦发资金流水余额信息
            while (true) {
                PageHelper.startPage(PageUtil.initPageNo(PAGE_NUM),
                        PageUtil.initPageSize(Constants.DEFAULT_PAGE_SIZE));
                List<PfSerialRespBo> pfSerialRespBoList = slPfCapSerialMapper.queryPfSerialList(pfSerialReqBo,
                        DateUtils.getFormate(DateUtils.getDayBegin(pfSerialReqBo.getQueryStartDt(),DateUtils.FORMAT_YYYYMMDDHHMMSS,0L)),
                        DateUtils.getFormate(DateUtils.getDayEnd(pfSerialReqBo.getQueryEndDt(),DateUtils.FORMAT_YYYYMMDDHHMMSS,0L)));
                if (CollectionUtils.isEmpty(pfSerialRespBoList)) {
                    break;
                }
                //补充流水类型信息,转换流水类型
                for (PfSerialRespBo pfSerialRespBo : pfSerialRespBoList) {
                    pfSerialRespBo.setSerialType(SerialTypeEnum.getEnum(pfSerialRespBo.getSerialType()).getSerialTypeName());
                    pfSerialRespBo.setSerialType(SerialTypeEnum.getEnum(pfSerialRespBo.getSerialType()).getSerialTypeName());
                }
                if(DEFAULT_FIRST_PAGE_NUM==PAGE_NUM){
                    // 一次性写出内容,使用默认样式,强制输出标题
                    excelWriter.write(pfSerialRespBoList, true);
                    PAGE_NUM++;
                }else {
                    // 一次性写出内容,使用默认样式,强制输出标题
                    excelWriter.write(pfSerialRespBoList, false);
                    PAGE_NUM++;
                }
            }
            //HttpServletResponse对象
            httpServletResponse.setHeader(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, HttpHeaders.CONTENT_DISPOSITION);
            //response为HttpServletResponse对象
            httpServletResponse.setCharacterEncoding(Constants.CHARSET_UTF8);
            httpServletResponse.setContentType("application/vnd.ms-excel;charset=utf-8");
            //file.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
            httpServletResponse.setHeader("Content-Disposition",
                    "attachment;filename=" +
                            URLEncoder.encode(FILE_NAME + now + EXCEL_FILE_TYPE, Constants.CHARSET_UTF8));
            servletOutputStream = httpServletResponse.getOutputStream();
            excelWriter.flush(servletOutputStream, true);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if (excelWriter != null) {
                // 关闭writer,释放内存
                excelWriter.close();
            }
            if (servletOutputStream != null) {
                //此处记得关闭输出Servlet流
                IoUtil.close(servletOutputStream);
            }
        }
    }

    private ExcelWriter handleFile(ExcelWriter writer) {
        writer = ExcelUtil.getWriter(true);
        StyleSet styleSet = writer.getStyleSet();
        styleSet.setBorder(BorderStyle.NONE, IndexedColors.BLACK);
        // 重命名第一个Sheet的名称,不然会默认多出一个Sheet1的页
        writer.renameSheet(0, FILE_NAME);
        //获取实体类的所有属性,返回Field数组
        Field[] fields = PfSerialRespBo.class.getDeclaredFields();
        int fieldLength = fields.length;
        // 合并单元格后的标题行,使用默认标题样式
        writer.merge(fieldLength - 1, FILE_NAME);

        writer = getHeaderMap(writer);
        // 设置默认行高
        writer.setDefaultRowHeight(DEFAULT_ROW_HEIGHT);
        //设置列宽
        for (int i = 0; i < fieldLength; i++) {
            writer.setColumnWidth(i, DEFAULT_COLUMN_SIZE);
        }
        return writer;
    }

    //字段与列名对应关系
    private ExcelWriter getHeaderMap(ExcelWriter writer) {
        writer.addHeaderAlias("pfSno", "流水号");
        writer.addHeaderAlias("serialType", "流水类型");
        writer.addHeaderAlias("accntCode", "监管账号");
        writer.addHeaderAlias("accntName", "监管账号名称");
        writer.addHeaderAlias("happenDt", "入账日期");
        writer.addHeaderAlias("happenTm", "入账时间");
        writer.addHeaderAlias("tradeAmt", "发生额");
        writer.addHeaderAlias("balance", "当前余额");
        writer.addHeaderAlias("oppAccnt", "对方账号");
        writer.addHeaderAlias("oppName", "对方户名");
        writer.addHeaderAlias("summary", "摘要");
        writer.addHeaderAlias("note", "附言");
        writer.addHeaderAlias("usage", "用途");
        return writer;
    }


http://www.niftyadmin.cn/n/1449448.html

相关文章

java中怎么加测试包_java – 在arquillian测试中使用shrinkWrap在部署jar中添加包

我正在使用arquillian进行单元测试.我正在使用shrinkWrap创建部署jar.但为此我需要添加我的项目中使用的所有包,这些包的数量很多.以下是我的测试文件RunWith(Arquillian.class)public class GreeterTest {Deploymentpublic static JavaArchive createDeployment() throws Nami…

微投抖的1080_为什么说3000元以下的智能微投没有真正的1080P?

近日&#xff0c;智能微投界迎来了一股3000元廉价“1080P”新品投影潮。首先是去年十二月深圳某品牌发布R型号投影&#xff0c;定价2799&#xff0c;分辨率“1080P”。年后又有一波其他品牌投影新品已经或即将上市。行内人士指出&#xff1a;“市场上各品牌LED微投但凡物理分辨…

正则匹配基本用法与常用正则整理

2019独角兽企业重金招聘Python工程师标准>>> 正则基本语法 A:字符 x 字符 x。 举例&#xff1a; "a"表示字符a \\ 反斜线字符。 "\\" -->需要匹配的内容是\ 两个\\表示一个\ \n 新行&#xff08;换行&#xff09;符 …

uva 1561 - Cycle Game(推理)

题目链接&#xff1a;uva 1561 - Cycle Game 题目大意&#xff1a;给出一个环&#xff0c;每次从起点开始&#xff0c;可以选择一个权值非0的边移动&#xff0c;移动后减掉权值至少1点。不能移动的为失败。 解题思路&#xff1a; 1:有0的情况&#xff0c;如果有方向离权值为0的…

maven 打的包在哪_maven打包

1. 背景工程中免不了要通过maven打包。2. maven三种打包插件pluginfunctionsitemaven-jar-pluginmaven 默认打包插件&#xff0c;用来创建 project jarmaven-shade-plugin用来打可执行包&#xff0c;executable(fat) jarhttp://maven.apache.org/plugins/maven-shade-plugin/ma…

uva 1567 - A simple stone game(K倍动态减法游戏)

题目链接&#xff1a;uva 1567 - A simple stone game 题目大意&#xff1a;给定K和N&#xff0c;表示一堆石子有N个&#xff0c;先手第一次可以取1~N-1个石子&#xff0c;取到最后一个石子的人胜利&#xff0c;单词每次操作时&#xff0c;取的石子数不能超过对手上一次取的石子…

html下拉菜单的实现

这是简单的下拉菜单 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head><title>JavaS…

搜索技巧大观(转)

经常有人向笔者请教搜索技巧&#xff0c;虽然&#xff0c;要成为一个搜索专家远非学几条技巧那么简单&#xff0c;但确实有些精彩的搜索技巧能够极大地提高你的搜索能力。 最重要的搜索工具&#xff0c;是搜索引擎。人们经常把人工编辑的网站分类目录也叫做搜索引擎&#xff0c…