easyexcel复杂表头导出

easyexcel复杂表头导出

/*** @ClassName ColumnWidthStyleStrategy* @Description: excel导出列长度**/
public class ExcelWidthStyleStrategy extends AbstractColumnWidthStyleStrategy {private static final int MAX_COLUMN_WIDTH = 200;private  final Map<Integer, Map<Integer, Integer>> CACHE = new HashMap<Integer, Map<Integer, Integer>>(8);@Overrideprotected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<CellData> cellDataList, Cell cell, Head head,Integer relativeRowIndex, Boolean isHead) {boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);if (!needSetWidth) {return;}Map<Integer, Integer> maxColumnWidthMap = CACHE.get(writeSheetHolder.getSheetNo());if (maxColumnWidthMap == null) {maxColumnWidthMap = new HashMap<Integer, Integer>(10);CACHE.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap);}Integer columnWidth = dataLength(cellDataList, cell, isHead);if (columnWidth < 0) {return;}if (columnWidth > MAX_COLUMN_WIDTH) {columnWidth = MAX_COLUMN_WIDTH;}Integer maxColumnWidth = maxColumnWidthMap.get(cell.getColumnIndex());if (maxColumnWidth == null || columnWidth > maxColumnWidth) {maxColumnWidthMap.put(cell.getColumnIndex(), columnWidth);writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), columnWidth * 200);}}private Integer dataLength(List<CellData> cellDataList, Cell cell, Boolean isHead) {if (isHead) {return cell.getStringCellValue().getBytes().length;}CellData cellData = cellDataList.get(0);CellDataTypeEnum type = cellData.getType();if (type == null) {return -1;}switch (type) {case STRING:return cellData.getStringValue().getBytes().length;case BOOLEAN:return cellData.getBooleanValue().toString().getBytes().length;case NUMBER:return cellData.getNumberValue().toString().getBytes().length;default:return -1;}}
}
public static void main(String[] args) {//配置字体,表头背景等HorizontalCellStyleStrategy horizontalCellStyleStrategy = setConfigure();List<List<Object>> lists = new ArrayList<List<Object>>();for(int i = 0 ; i<20 ; i++){List<Object> list = new ArrayList<>();for(int j = 0 ; j<20 ; j++){list.add("测试"+i);}lists.add(list);}try {//设置请求信息(获取HttpServletResponse,可通过HttpServletResponse给导出数据命名)/*       response.setContentType("multipart/form-data");response.setCharacterEncoding("utf-8");response.setHeader("Content-disposition", "attachment;filename=sjbkzjap.xlsx");ExcelWriter excelWriter = EasyExcelFactory.getWriter(response.getOutputStream());*/String outPath = "c:/demo.xlsx";File file = new File(outPath);if(file.exists()){// 文件存在file.delete();}ExcelWriter excelWriter = EasyExcelFactory.getWriter(new FileOutputStream(outPath));WriteSheet writeSheet = EasyExcel.writerSheet(0, "sheet").registerWriteHandler(horizontalCellStyleStrategy).registerWriteHandler(new ExcelWidthStyleStrategy()).build();// 创建一个表格WriteTable table = new WriteTable();// 动态添加 表头 headList --> 所有表头行集合//表头数据List<List<String>> headList = setHeadList();table.setHead(headList);excelWriter.write(lists,writeSheet,table);excelWriter.finish();System.out.println("导出成功!");}catch (IOException e){e.printStackTrace();}}//设置表头数据public static List<List<String>>  setHeadList(){List<String> headTitle0 = new ArrayList<String>();List<String> headTitle1 = new ArrayList<String>();List<String> headTitle2 = new ArrayList<String>();List<String> headTitle3 = new ArrayList<String>();List<String> headTitle4 = new ArrayList<String>();List<String> headTitle5 = new ArrayList<String>();List<String> headTitle6 = new ArrayList<String>();List<String> headTitle7 = new ArrayList<String>();List<String> headTitle8 = new ArrayList<String>();List<String> headTitle9 = new ArrayList<String>();List<String> headTitle14 = new ArrayList<String>();List<String> headTitle15 = new ArrayList<String>();List<String> headTitle16 = new ArrayList<String>();List<String> headTitle17 = new ArrayList<String>();List<String> headTitle18 = new ArrayList<String>();List<String> headTitle23 = new ArrayList<String>();List<String> headTitle24 = new ArrayList<String>();List<String> headTitle25 = new ArrayList<String>();//设置第一列为项目导出标题headTitle0.add("测试导出");headTitle1.add("测试导出");headTitle2.add("测试导出");headTitle3.add("测试导出");headTitle4.add("测试导出");headTitle5.add("测试导出");headTitle6.add("测试导出");headTitle7.add("测试导出");headTitle8.add("测试导出");headTitle9.add("测试导出");headTitle14.add("测试导出");headTitle15.add("测试导出");headTitle16.add("测试导出");headTitle17.add("测试导出");headTitle18.add("测试导出");headTitle23.add("测试导出");headTitle24.add("测试导出");headTitle25.add("测试导出");headTitle0.add("");headTitle1.add("");headTitle2.add("");headTitle3.add("");headTitle4.add("");headTitle5.add("");headTitle6.add("");headTitle7.add("");headTitle8.add("");headTitle9.add("");headTitle14.add("");headTitle15.add("");headTitle16.add("");headTitle17.add("");headTitle18.add("");headTitle23.add("");headTitle24.add("");headTitle25.add("单位:元");headTitle0.add("编号");headTitle1.add("姓名");headTitle2.add("年龄");headTitle3.add("居住地");headTitle4.add("父亲");headTitle5.add("母亲");headTitle6.add("工作单位");headTitle7.add("工资");headTitle8.add("转正前");headTitle9.add("转正前");headTitle14.add("转正前");headTitle15.add("转正前");headTitle16.add("平均工资");headTitle17.add("转正后");headTitle18.add("转正后");headTitle23.add("转正后");headTitle24.add("转正后");headTitle25.add("平均工资");headTitle0.add("编号");headTitle1.add("姓名");headTitle2.add("年龄");headTitle3.add("居住地");headTitle4.add("父亲");headTitle5.add("母亲");headTitle6.add("工作单位");headTitle7.add("工资");headTitle8.add("第一个月");headTitle9.add("第一个月");headTitle14.add("第二个月");headTitle15.add("第二个月");headTitle16.add("平均工资");headTitle17.add("第一个月");headTitle18.add("第一个月");headTitle23.add("第三个月");headTitle24.add("第三个月");headTitle25.add("平均工资");headTitle0.add("编号");headTitle1.add("姓名");headTitle2.add("年龄");headTitle3.add("居住地");headTitle4.add("父亲");headTitle5.add("母亲");headTitle6.add("工作单位");headTitle7.add("工资");headTitle8.add("日期");headTitle9.add("金额");headTitle14.add("日期");headTitle15.add("金额");headTitle16.add("平均工资");headTitle17.add("日期");headTitle18.add("金额");headTitle23.add("日期");headTitle24.add("金额");headTitle25.add("平均工资");//列数据保存List<List<String>> headList = new ArrayList<List<String>>();headList.add(headTitle0);headList.add(headTitle1);headList.add(headTitle2);headList.add(headTitle3);headList.add(headTitle4);headList.add(headTitle5);headList.add(headTitle6);headList.add(headTitle7);headList.add(headTitle8);headList.add(headTitle9);headList.add(headTitle14);headList.add(headTitle15);headList.add(headTitle16);headList.add(headTitle17);headList.add(headTitle18);//临时插入(可动态获取)List<String> maxList = new ArrayList<String>();List<String> maxList2 = new ArrayList<String>();maxList.add("测试导出");maxList.add("");maxList.add("转正后");maxList.add("第二个月");maxList.add("日期");maxList.add("日期");maxList2.add("测试导出");maxList2.add("");maxList2.add("转正后");maxList2.add("第二个月");maxList2.add("金额");maxList2.add("金额");headList.add(maxList);headList.add(maxList2);headList.add(headTitle23);headList.add(headTitle24);headList.add(headTitle25);return headList;}//配置字体,表头背景等private static HorizontalCellStyleStrategy setConfigure() {// 头的策略WriteCellStyle headWriteCellStyle = new WriteCellStyle();// 背景色headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());WriteFont headWriteFont = new WriteFont();headWriteFont.setFontHeightInPoints((short) 10);headWriteCellStyle.setWriteFont(headWriteFont);// 内容的策略WriteCellStyle contentWriteCellStyle = new WriteCellStyle();// 字体策略WriteFont contentWriteFont = new WriteFont();// 字体大小contentWriteFont.setFontHeightInPoints((short) 10);contentWriteCellStyle.setWriteFont(contentWriteFont);//边框//导出数据垂直居中contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//导出数据水平居中contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);contentWriteCellStyle.setBorderTop(BorderStyle.THIN);contentWriteCellStyle.setBorderRight(BorderStyle.THIN);contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);//设置 自动换行contentWriteCellStyle.setWrapped(true);//设置// 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);}

在这里插入图片描述

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

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

相关文章

macOS下载

macOS 下载 历史版本下载地址&#xff1a; https://support.apple.com/zh-cn/HT211683 例&#xff1a; macOS 11 Big sur: https://apps.apple.com/cn/app/macos-big-sur/id1526878132?mt12

二维码智慧门牌管理系统升级:安全与便捷并存

文章目录 前言一、系统升级与用户操作记录二、展望与智能门禁未来三、智能科技为未来铺路 前言 科技与门禁系统演进 随着科技的飞速发展&#xff0c;智能门牌系统成为建筑物不可或缺的一部分。其中&#xff0c;二维码智慧门牌管理系统以其独特优势逐渐受到关注。它不仅提升了出…

【ARMv8M Cortex-M33 系列 1 -- SAU 介绍】

文章目录 Cortex-M33 SAU 介绍SAU 的主要功能包括SAU 寄存器配置示例 Cortex-M33 SAU 介绍 在 ARMv8-M 架构中&#xff0c;SAU&#xff08;Security Attribution Unit&#xff09;是安全属性单元&#xff0c;用于配置和管理内存区域的安全属性。SAU 是 ARM TrustZone 技术的一…

MATLAB - 机器人逆运动学设计器(Inverse Kinematics Designer APP)

系列文章目录 前言 一、简介 通过逆运动学设计器&#xff0c;您可以为 URDF 机器人模型设计逆运动学求解器。您可以调整逆运动学求解器并添加约束条件&#xff0c;以实现所需的行为。使用该程序&#xff0c;您可以 从 URDF 文件或 MATLAB 工作区导入 URDF 机器人模型。调整逆…

智能优化算法应用:基于晶体结构算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于晶体结构算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于晶体结构算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.晶体结构算法4.实验参数设定5.算法结果6.…

MyBatis见解3

8.MyBatis的关联查询 8.3.一对多查询 需求&#xff1a;查询所有用户信息及用户关联的账户信息。 分析&#xff1a;用户信息和他的账户信息为一对多关系&#xff0c;并且查询过程中如果用户没有账户信息&#xff0c;此时也要将用户信息查询出来&#xff0c;此时左外连接查询比…

Android Matrix画布Canvas缩放scale,Kotlin

Android Matrix画布Canvas缩放scale&#xff0c;Kotlin val originBmp BitmapFactory.decodeResource(resources, R.mipmap.pic).copy(Bitmap.Config.ARGB_8888, true)val newBmp Bitmap.createBitmap(originBmp.width, originBmp.height, Bitmap.Config.ARGB_8888)val canva…

P1883 函数

题目链接 P1883 函数 思路 举例 题目中的 F ( x ) F(x) F(x) 看起来很复杂&#xff0c;但由于每个 f ( x ) f(x) f(x) 的二次项系数 a a a 都不是负数&#xff0c;故 F ( x ) F(x) F(x) 是一个单谷函数。直接说出结论可能有些令人难以接受&#xff0c;不妨举出两个例子…

Ubuntu环境下使用Livox mid 360

参考文章&#xff1a; Ubuntu 20.04使用Livox mid 360 测试 FAST_LIO-CSDN博客 一&#xff1a;Livox mid 360驱动安装与测试 前言&#xff1a; Livox mid360需要使用Livox-SDK2&#xff0c;而非Livox-SDK&#xff0c;以及对应的livox_ros_driver2 。并需要修改FAST_LIO中部…

FastAPI实现文件上传下载

FastAPI实现文件上传下载 1.后端FastAPI2.后端html3.效果 最近的项目需求&#xff0c;是前端vue&#xff0c;后端fastAPI&#xff0c;然后涉及到图像的消息发送&#xff0c;所以需要用fast写文件上传下载的接口&#xff0c;这里简单记录一下。 1.后端FastAPI import os.path i…

.net core webapi 大文件上传到wwwroot文件夹

1.配置staticfiles(program文件中) app.UseStaticFiles();2.在wwwroot下创建upload文件夹 3.返回结果封装 namespace webapi;/// <summary> /// 统一数据响应格式 /// </summary> public class Results<T> {/// <summary>/// 自定义的响应码&#xff…

H266/VVC帧内预测编码

预测编码技术 预测编码&#xff08;Prediction Coding&#xff09;是指利用已编码的一个或多个样本值&#xff0c;根据某种模型或方法&#xff0c;对当前的样本值进行预测&#xff0c;并对样本真实值和预测值之间的差值进行编码。 视频中的每个像素看成一个信源符号&#xff…

python3 数据分析项目案例,用python做数据分析案例

本篇文章给大家谈谈python3 数据分析项目案例&#xff0c;以及用python做数据分析案例&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 目录 一丶可视化绘图案例 1.曲线图 2.柱形图 3.点线图 4.3D散点图 5. 绘制漏斗图 6. 绘制词云图 二丶包/模块使用示例 (1)…

高通切换到Emergency Download:adb reboot edl

刷机 开机下adb reboot edl 切到QDloader 9008 点下载。 The command “adb reboot edl” is used to reboot an Android device into EDL (Emergency Download) mode using the Android Debug Bridge (ADB) tool. EDL mode is primarily used for low-level firmware flashing…

数据结构---算法的空间复杂度

文章目录 空间复杂度概念实例 空间复杂度 概念 空间复杂度也是一个数学表达式&#xff0c;是对一个算法在运行过程中临时占用存储空间大小的量度 。 空间复杂度不是程序占用了多少bytes的空间&#xff0c;因为这个也没太大意义&#xff0c;所以空间复杂度算的是变量的个数。…

LLM之RAG实战(八)| 使用Neo4j和LlamaIndex实现多模态RAG

人工智能和大型语言模型领域正在迅速发展。一年前&#xff0c;没有人使用LLM来提高生产力。时至今日&#xff0c;很难想象我们大多数人或多或少都在使用LLM提供服务&#xff0c;从个人助手到文生图场景。由于大量的研究和兴趣&#xff0c;LLM每天都在变得越来越好、越来越聪明。…

[node]Node.js 模块系统

[node]模块系统 Node.js中的模块系统模块的使用模块的导入模块的导出导出多个值导出默认值导出可传参的函数 文件查找策略从文件模块缓存中加载从原生模块加载从文件加载 Node.js中的模块系统 为了让Node.js的文件可以相互调用&#xff0c;Node.js提供了一个简单的模块系统。 …

【第七在线】数据分析与人工智能在商品计划中的应用

随着技术的不断进步&#xff0c;数据分析和人工智能&#xff08;AI&#xff09;已经成为了现代商品计划的关键组成部分。在服装行业&#xff0c;这两项技术正在帮助企业更好地理解市场需求、优化库存管理、提高生产效率和提供更好的客户体验。本文将深入探讨数据分析和人工智能…

华为---登录USG6000V防火墙---console、web、telnet、ssh方式登录

目录 一、环境搭建 二、第一次登录USG6000V防火墙&#xff0c;即通过console方式登录 三、用户配置 四、web登录USG6000V防火墙 1. 用web创建的用户通过web方式登录USG6000V防火墙 2. 命令行创建的用户通过web方式登录USG6000V防火墙 五、ssh方式登录USG6000V防火墙 1. 用…

从CTF中学习自增构造webshell

FLAG&#xff1a;那天晚上和你聊了很久&#xff0c;手机烫的和心脏一样 专研方向: 代码审计&#xff0c;Crypto 每日emo&#xff1a;天一亮&#xff0c;时间就不属于我了 从CTF中学习自增构造webshell 前言1.异或2.自增3.取反青少年CTF之ezbypass 前言 今天写了几道代码审计的…