EasyExcel设置动态head数据(不是格式)及postman自测的坑

news2024/11/28 14:16:55

需求背景:
导出某某业务模块的数据,但是,数据列的标题内容是根据当前日期计算出来的。 比如今天是5月20,那么列就是 5/21 、 5/22…以此类推

问题:
EasyExcel 通过Bean的注解实现匹配的,这是最便捷的方式,前提是已知固定的列标题。但是现在动态的不知道怎么做了

版本:
alibaba的easyexcel-core 3.2.1

实现方式:

	@Test
    public void easyExcelTest() {
        List<List<String>> heads = Lists.newArrayList();
        heads.add(Lists.newArrayList("表头1"));
        heads.add(Lists.newArrayList("表头2"));
        heads.add(Lists.newArrayList("表头3"));
        heads.add(Lists.newArrayList("表头4"));
        heads.add(Lists.newArrayList("表头5"));

        List<List<String>> contents = Lists.newArrayList();
        for (int i = 0; i <= 10; i++) {
            List<String> content = Lists.newArrayList();
            for (int j = 0; j < 5; j++) {
                content.add("第" + i + "行第" + j + "例内容");
            }
            contents.add(content);
        }

        // 表头样式策略
        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
        // 设置数据格式
        headWriteCellStyle.setDataFormat((short) BuiltinFormats.getBuiltinFormat("m/d/yy h:mm"));
        // 是否换行
        headWriteCellStyle.setWrapped(false);
        // 水平对齐方式
        headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);
        // 垂直对齐方式
        headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        // 前景色
        headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
        // 背景色
        headWriteCellStyle.setFillBackgroundColor(IndexedColors.WHITE.getIndex());
        // 设置为1时,单元格将被前景色填充
        headWriteCellStyle.setFillPatternType(FillPatternType.NO_FILL);
        // 控制单元格是否应自动调整大小以适应文本过长时的大小
        headWriteCellStyle.setShrinkToFit(false);
        // 单元格边框类型
        headWriteCellStyle.setBorderBottom(BorderStyle.NONE);
        headWriteCellStyle.setBorderLeft(BorderStyle.NONE);
        headWriteCellStyle.setBorderRight(BorderStyle.NONE);
        headWriteCellStyle.setBorderTop(BorderStyle.NONE);
        // 单元格边框颜色
        headWriteCellStyle.setLeftBorderColor(IndexedColors.BLACK.index);
        headWriteCellStyle.setRightBorderColor(IndexedColors.BLACK.index);
        headWriteCellStyle.setTopBorderColor(IndexedColors.BLACK.index);
        headWriteCellStyle.setBottomBorderColor(IndexedColors.BLACK.index);
        // 字体策略
        WriteFont writeFont = new WriteFont();
        // 是否加粗/黑体
        writeFont.setBold(false);
        // 字体颜色
        writeFont.setColor(Font.COLOR_NORMAL);
        // 字体名称
        writeFont.setFontName("宋体");
        // 字体大小
        writeFont.setFontHeightInPoints((short) 11);
        // 是否使用斜体
        writeFont.setItalic(false);
        // 是否在文本中使用横线删除
        writeFont.setStrikeout(false);
        // 设置要使用的文本下划线的类型
        writeFont.setUnderline(Font.U_NONE);
        // 设置要使用的字符集
        writeFont.setCharset(FontCharset.DEFAULT.getNativeId());
        headWriteCellStyle.setWriteFont(writeFont);

        // 内容样式策略策略
        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
        contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
        contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.GENERAL);
        contentWriteCellStyle.setBorderBottom(BorderStyle.NONE);
        contentWriteCellStyle.setBorderLeft(BorderStyle.NONE);
        contentWriteCellStyle.setBorderRight(BorderStyle.NONE);
        contentWriteCellStyle.setBorderTop(BorderStyle.NONE);
        contentWriteCellStyle.setFillPatternType(FillPatternType.NO_FILL);
        contentWriteCellStyle.setWrapped(false);

        EasyExcel.write("D:\\test.xlsx").head(heads)
                .registerWriteHandler(new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle))
                .registerWriteHandler(new SimpleColumnWidthStyleStrategy(16)) // 列宽
                .registerConverter(new LocalDateTimeConverter())
                .sheet("销售订单").doWrite(contents);

		// 通过接口调用,使用流生成文件
        /*String fileName = "导出测试";
        response.setCharacterEncoding("utf-8");
        fileName = URLEncoder.encode(fileName, "UTF-8") + ".xlsx";
        response.setHeader("Content-disposition", "attachment;filename=" + fileName);
        response.setHeader("content-Type", "application/vnd.ms-excel");
        response.setHeader("filename", fileName);

        EasyExcel.write(response.getOutputStream()).head(heads)
                .registerWriteHandler(new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle))
                .registerWriteHandler(new SimpleColumnWidthStyleStrategy(16)) // 列宽
                .registerConverter(new LocalDateTimeConverter())
                .sheet("销售订单").doWrite(contents);*/
    }

说明:
head集合里的每一个集合对应一个列标题
contents集合里的每一条数据对应的是一行,需要与head列匹配上

再说postman自测的方式:
java代码中需设置:

    public void setExportResponseDefaultAttr(HttpServletResponse response,String modelName)throws Exception{
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码,所有通过后端的文件下载都可以如此处理
        String fileName = URLEncoder.encode(modelName, "UTF-8");
        response.setContentType("application/octet-stream;charset=UTF-8");
        response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
    }

重点是: application/vnd.ms-excel

postman使用时注意:
在这里插入图片描述
点这个,找了半天
点击后,会弹出一个框:
在这里插入图片描述
这时候的坑就出现了,不是xlsx的,需要你手动修改后缀名
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/620346.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

这5款小众又好用的软件,你都知道吗?

1.文件比较——WinMerge WinMerge是一款用于比较和合并文件和文件夹的工具。它可以让你对不同的文件和文件夹进行可视化的对比,并显示出差异和相似之处。WinMerge支持多种功能,如合并,同步,过滤,插件等。这款工具非常实用,但是可以提供强大的文件比较功能,是管理文件和解决冲突…

123 2021年国赛 二分搜索+前缀和

题目描述 小蓝发现了一个有趣的数列&#xff0c;这个数列的前几项如下&#xff1a; 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 小蓝发现&#xff0c;这个数列前 1 项是整数 1&#xff0c;接下来 2 项是整数 1 至 2&#xff0c;接下来 3 项是整数 1 至 3&#xff0c;接下来 4 项是整数…

day2 ARM处理器概论

目录 RISC处理器和CISC处理器 SOC(System on Chip) ARM指令集概述 指令集 ARM指令集 编译原理 ARM存储模型 ARM指令存储 ARM工作模式 工作模式的理解 ARM工作模式分类 RISC处理器和CISC处理器 RISC处理器 只保留常用的的简单指令&#xff0c;硬件结构简单&#xff0c;复…

你觉得你很优秀,为什么连一个软件测试面试都过不了?

目录 前言 简历请用数字化结果不要只是堆研工作经历 简历一:我的工作内容有 简历二:我的工作内容有: 当你和HR面对面坐下来时&#xff0c;迎接我们的第一个问题往往是:“来&#xff0c;请简单介绍下你自己吧。 了解你的过去是判断你未来的最好方式 增加好印象&#xff0c…

基于SVM的鸢尾花数据集回归分析

目录 1. 作者介绍2. SVM支持向量机算法2.1 鸢尾花数据集2.2 鸢尾花数据集可视化2.2.1 散点图2.2.2 箱型图2.2.3 三维散点图&#xff08;3D&#xff09; 3. SVM算法实现3.1 完整代码3.2 运行结果3.3 问题与分析 1. 作者介绍 张佳伦&#xff0c;男&#xff0c;西安工程大学电子信…

androidstudio ffmpeg 音频转换

java-ffmpeg-音频转换 需求描述功能流程所需条件步骤步骤1步骤2步骤3一些我使用中遇到的异常 需求描述 项目中的语音唤醒后的语音识别人声检测一直是一个很令我头痛的问题,之前因为对各种类型的工具包使用不熟练,以及时间问题,一直没有根治这个人声检测体验不好的问题,之前的解…

不同品牌或型号的单片机

以下是一些常见的单片机品牌和型号&#xff1a; 微控制器&#xff08;Microchip&#xff09;&#xff1a;PIC系列&#xff08;如PIC16F877A、PIC18F4550&#xff09; 瑞萨电子&#xff08;Renesas&#xff09;&#xff1a;RX系列&#xff08;如RX231、RX65N&#xff09;需要资…

Termius 最好用的SSH 连接工具

Termius 最好用的SSH 连接工具 一、环境准备二、配置2.1 terminus 安装2.2 删除自动更新2.3 修改用户信息 三、使用四、页面展示 该工具 mac os 可直接使用 本文只展示 windows 使用步骤&#xff0c;本教程使用的 termius 版本为 7.59.6 一、环境准备 termius 下载 官网下载地址…

ubuntu上安装docker报错

执行docker命令的时候报错如下&#xff1a; Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 为了解决这个问题&#xff0c;看了一些帖子有的说重启docker.service服务或者看该服务是否已经正常启动&#xff0c;结果网上…

超实用!新手项目经理掏心窝总结的经验

像项目这样复杂的环境中&#xff0c;往往会出现错误判断、沟通不畅、管理不善以及最常见的错误。因此&#xff0c;项目管理需要项目经理有广泛的经验、洞察力和技能&#xff0c;无论是规划、组织还是有效领导团队&#xff0c;以在规定的时间和预算内实现项目目标。在这种情况下…

基于BAT指令定时备份Oracle并发送邮件

前言 在企业级应用程序中&#xff0c;数据是非常重要的资源。因此&#xff0c;我们需要定期备份数据以确保其安全性和完整性。在Oracle数据库中&#xff0c;我们可以使用多种方法来备份数据&#xff0c;其中一种方法是使用BAT脚本来进行自动化备份。 在本文中&#xff0c;我们…

【AI实时变声器,声音甜甜的小姐姐背后竟是抠脚大汉】

前言 这是一款基于AI算法的实时变声器&#xff0c;如果你不懂AI也没事&#xff0c;直接使用我提供的一键安装包 链接&#xff1a;https://pan.baidu.com/s/1f3X6JdBVOgeTNPf0B3CRKg 提取码&#xff1a;k5v2 变声器安装使用 有两款变声器&#xff0c;都是基于RVC做的&#xf…

ctfshow——web入门 SSRF

web351web352web353web354web355web356web357web358web359web360 web351 通过hackbar post提交 urlhttp://127.0.0.1/flag.php 获得flag web352 将127.0.0.1和localhost给过滤了&#xff0c;但并不影响post提交 post urlhttp://127.0.0.1/flag.php web353 过滤了localhost和1…

python基础学习1

pyhton数据分析的优势&#xff1a; ①语法简单精炼 ②有很强大的库 ③功能强大 ④适用于构建生产系统 ⑤胶水语言 python数据分析常用的类库&#xff1a; ①IPython------科学计算标准工具集的组成部分 ②NumPy------python科学计算的基础包 ③SciPy--------解…

【手撕Spring源码】深度理解SpringBoot

文章目录 Tomcat内嵌容器Tomcat 基本结构创建Tomcat内嵌容器内嵌Tomcat集成Spring 容器 Boot 自动配置什么是自动配置类自动配置类原理Aop自动配置DataSource自动配置MyBatis自动配置事务自动配置MVC自动配置条件装配 附&#xff1a;注解小总EnableConfigurationPropertiesCond…

RWKV配上ChatGPTBox让我们在浏览器中感受AI带来的魅力

这次我们来讲讲RWKV搭配ChatGPTBox结合使用带来的功能体验&#xff0c;这两个项目都是同一个大神创建的&#xff0c;完全可以无缝搭配进行使用。 以下是我之前在本地部署了AI模型RWKV的教程&#xff0c;如果还没有本地部署过AI的童鞋可以查看我之前发布的教程&#xff0c;在自…

在线聊天项目

人事管理项目-在线聊天 后端接口实现前端实现 在线聊天是一个为了方便HR进行快速沟通提高工作效率而开发的功能&#xff0c;考虑到一个公司中的HR并不多&#xff0c;并发量不大&#xff0c;因此这里直接使用最基本的WebSocket来完成该功能。 后端接口实现 要使用WebSocket&…

【NLP】有限自动机的KMP算法

目录 一、说明 二、无策略直接匹配法 2.1 简单粗暴的无脑匹配: 2.2 跳过外循环的思路 2.3 跳过内循环的思路 2.4 KMP算法时间分析 三、KMP有限状态机 四、结论 一、说明 KMP算法问题&#xff1a;给定一个&#xff08;短&#xff09;模式和一个&#xff08;长&#xff…

PCB材料选择与性能比较

PCB板被广泛应用于电子行业&#xff0c;作为电子设备的重要组成部分之一&#xff0c;负责连接各种电子元件。PCB板的性能直接影响着电子设备的质量和稳定性。而PCB板的材料选择则是影响PCB板性能的关键因素之一。本文将对常见PCB材料进行比较分析&#xff0c;以便于选择适合的材…

西电网课UMOOCs《英美概况》1-15单元课后答案

声明&#xff1a;本文CSDN作者原创投稿文章&#xff0c;未经许可禁止任何形式的转载&#xff0c;原文链接 如果图片挂了&#xff0c;可以移步至我的博客西电网课UMOOCs《英美概况》1-15单元课后答案 - 小木槌 文章目录 Quiz for Unit 1Quiz for Unit 2Quiz for Unit 3Quiz for…