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.hqwc.cn/news/290200.html

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

相关文章

驱动开发-1

一、驱动课程大纲 内核模块字符设备驱动中断 二、ARM裸机代码和驱动有什么区别&#xff1f; 1、共同点&#xff1a; 都能够操作硬件 2、不同点&#xff1a; 1&#xff09;裸机就是用C语言给对应的寄存器里面写值&#xff0c;驱动是按照一定的套路往寄存器里面写值 2&#xff09…

多级缓存:亿级流量的缓存方案

文章目录 一.多级缓存的引入二.JVM进程缓存三.Lua语法入门四.多级缓存1.OpenResty2.查询Tomcat3.Redis缓存预热4.查询Redis缓存5.Nginx本地缓存6.缓存同步 一.多级缓存的引入 传统缓存的问题 传统的缓存策略一般是请求到达Tomcat后&#xff0c;先查询Redis&#xff0c;如果未…

22.JSP技术

JSP起源 在很多动态网页中&#xff0c;绝大部分内容都是固定不变的&#xff0c;只有局部内容需要动态产生和改变。如果使用Servlet程序来输出只有局部内容需要动态改变的网页&#xff0c;其中所有的静态内容也需要程序员用Java程序代码产生&#xff0c;整个Servlet程序的代码将…

司铭宇老师:汽车销售培训-如何提升4S店获客能力

一、数据分析与客户画像 1.数据收集与分析 4S店应当充分利用现有资源&#xff0c;收集客户信息、车辆信息、消费行为等数据。通过数据清洗、整理和分析&#xff0c;挖掘客户需求、喜好和购车习惯等关键信息。此外&#xff0c;还可以通过合作伙伴、互联网渠道等途径&#xff0…

【C++】开源:libmodbus通信协议库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍libmodbus通信协议库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#x…

阿里云服务器2核4G多少钱?阿里云服务器2核4G配置活动价格详解

阿里云服务器2核4G配置是很多个人和一般企业用户的首选云服务器配置&#xff0c;阿里云服务器2核4G的价格并不是一成不变的&#xff0c;而是跟云服务器实例规格、带宽、云盘、地域等因素有关&#xff0c;本文将详细介绍阿里云服务器2核4G配置的价格及相关因素&#xff0c;帮助用…

计算机基础:网络基础

目录 ​​​​​​​一.网线制作 1.制作所需要工具 网线制作标准 ​编辑 2.水晶头使用 3.网线钳使用 4.视频教学 二.集线器、交换机介绍 1.OSI七层模型 2.TCP/IP四层参考模型 3.集线器、交换机。路由器介绍 集线器 交换机 路由器 区别 三.路由器的配置 1.路由器设…

3-高可用-隔离术

隔离是指将系统或资源分割开&#xff0c;系统隔离是为了在系统发生故障时&#xff0c;能限定传播范围和影响范围&#xff0c;即发生故障后不会出现滚雪球效应&#xff0c;从而保证只有出问题的服务不可用&#xff0c;其他服务还是可用的。 比较多的隔离手段有线程隔离、进程隔…

【蓝桥杯一对一保奖辅导】国奖学姐蓝桥杯经验分享

目录 写在前面有关报名费如何准备&#xff1f;看书 /练习 /分类 /总结比赛技巧与指导 写在前面 蓝桥杯对于计算机专业相关的同学来说是非常值得参加的。 蓝桥杯相对于ACM比赛而言获奖难度较小&#xff0c;只要掌握技巧&#xff0c;拿到 省一甚至国奖是比较容易的&#xff0c;但…

移动端手机图片裁剪

移动端手机图片裁剪-遇见你与你分享

华为atlas300安装教程

1、安装包位置&#xff1a; /data/ai_install_packages 2、添加HwHiAiUser用户&#xff1a; groupadd -g 1000 HwHiAiUser useradd -g HwHiAiUser -u 1000 -d /home/HwHiAiUser -m HwHiAiUser -s /bin/bash 3、安装驱动&#xff1a; ./Ascend-hdk-310p-npu-driver_6.0.0_l…

我们不可能永远都在救火 ——Scrum中技术债务“偿还”指南

技术债务是指开发人员为了加速软件开发&#xff0c;在应该采用最佳方案时进行了妥协&#xff0c;改用了短期内能加速软件开发的方案&#xff0c;以至于未来给自己带来额外的开发负担。 软件工程师 Ward Cunningham首次将技术的复杂比作为负债。 简单来说&#xff0c;技术债务类…