有一个需求,客户要求前台可以勾选需要展示的列,后台根据前台传过来的需要展示列,来导出符合的Excel表格。

前台列的结构

arrTableTitleData:[{header:"REGION",Column_name: "Region",hide:true},{header:"PROVINCE",Column_name:"Province",hide:true}]

后台代码

List<PageData> newlist=new ArrayList<PageData>();List<String> titles = new ArrayList<String>();for(int i = 0; i < list.size(); i++){boolean aa= (boolean) list.get(i).get("hide");if(aa){titles.add(list.get(i).get("Column_name").toString()); // titles 为显示的列名newlist.add(list.get(i));}}           XSSFWorkbook wb =  new XSSFWorkbook();// 设置标题样式CellStyle headerStyle = wb.createCellStyle(); //标题样式headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);headerStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 设置标题字体Font headerFont = wb.createFont();    //标题字体headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);headerFont.setFontHeightInPoints((short)11);headerStyle.setFont(headerFont);// 设置文本单元格样式XSSFCellStyle contextstyle =wb.createCellStyle();XSSFCellStyle contextstyle1 =wb.createCellStyle();// 根据页面index 获取sheet页XSSFSheet sheet1 = wb.createSheet("sheet1");// 设置标题XSSFRow rowTitle = sheet1.createRow(0);for (int i = 0;i< titles.size(); i++){rowTitle.createCell(i).setCellValue(titles.get(i));rowTitle.getCell(i).setCellStyle(headerStyle);}short width = 20,height=25*20;sheet1.setDefaultColumnWidth(width);
// -------- 循环数据

以上只是准备工作,接下来是循环数据创建单元格,以及设置样式等

for (int i = 0; i < varOList.size(); i++) { // 循环数据创建行 row 有多少数据就创建多少行XSSFRow row = sheet1.createRow(i + 1);for(int j = 0; j < titles.size(); j++){ // 循环title 有多少个title就有多少列,也就是一行创建多少个单元格// 设置内容XSSFCell contentCell = row.createCell(j);String data = varOList.get(i).getString(newlist.get(j).getString("header"));//获取第i行第j列所放数据Boolean isNum = false;//data是否为数值型Boolean isInteger=false;//data是否为整数Boolean isPercent=false;//data是否为百分数if (data != null || "".equals(data)) {//判断data是否为数值型isNum = data.matches("^(-?\\d+)(\\.\\d+)?$");//判断data是否为整数(小数部分是否为0)isInteger=data.matches("^[-\\+]?[\\d]*$");//判断data是否为百分数(是否包含“%”)isPercent=data.contains("%");}//如果单元格内容是数值类型,涉及到金钱(金额、本、利),则设置cell的类型为数值型,设置data的类型为数值类型if (isNum && !isPercent) {XSSFDataFormat df = wb.createDataFormat(); // 此处设置数据格式contextstyle.setDataFormat(df.getFormat("#0.00"));//保留两位小数点// 设置单元格格式contentCell.setCellStyle(contextstyle);// 设置单元格内容为double类型contentCell.setCellValue(Double.parseDouble(data));}else if(isPercent){XSSFDataFormat dataFormat = wb.createDataFormat(); // 此处设置数据格式contextstyle1.setDataFormat(dataFormat.getFormat("0.00%"));contentCell.setCellStyle(contextstyle1);contentCell.setCellValue(Double.parseDouble(data.split("%")[0])/100);} else {contentCell.setCellStyle(contextstyle);// 设置单元格内容为字符型contentCell.setCellValue(data);}}}
wb.write(out);out.close();wb.close();

这样就成功了,代码粘贴不全,如有需要请留言。

本人经验有限,如有问题,欢迎指正!

本文参考了【POI框架实战】——POI导出Excel时设置单元格类型为数值类型_点滴汇聚,智在积累。——Danny-CSDN博客_poi设置单元格类型https://blog.csdn.net/huyuyang6688/article/details/49786227

POI没有固定模板灵活导出Excel(表头title不固定,会多会少)相关推荐

  1. easy poi导出excel表头多语言

    原理:自定义一个注解,属性存放多个语言,运行时利用反射,根据选择的语言重新给@Excel的name属性赋值 1.自定义一个注解 @Retention(RetentionPolicy.RUNTIME) ...

  2. POI实战——好久不见,导出Excel的方式你知道几种?

    文章目录 常用的几种方式: 一.POI简介 二.使用poi的原因,以及为什么出现了本贴 三.依赖的包 四.几个单词含义 五.导出方式(创建并导出) 1.导出到本地磁盘: 2.导出到浏览器下载: 3.实 ...

  3. FineReport 报表模板生成+导出Excel表格

    跟spring boot 整合 :https://blog.csdn.net/zhanglixin_1984/article/details/79194145 看官方的文档纠结了一天,好东西,这个怎么 ...

  4. java 使用poi导出excel,可控制固定前2列固定标头排版,带统计数据格式的

    使用poi导出排版漂亮的excel文件 html代码: <button class="btn btn-link" ng-model="exportExcel&quo ...

  5. 基于poi的动态导出excel表头以及统计行列数据(全网最全)

    引入依赖 <!-- excel导入导出 --><dependency><groupId>com.github.stupdit1t</groupId>&l ...

  6. java导出excel表头斜线_Java导出Excel三表头

    1.问题背景 Java导出Excel表格时,表头出现了三个,即多表头Excel 2.实现源码 /** * * @Project:Report * @Title:ThreeHead.java * @Pa ...

  7. asp.net中GridView多行表头导出Excel表头显示不全问题解决方法

    本次需要导出的Excel表格格式如下: 项目 本周实际 本月实际 本年实际 刷卡额 佣金收入 刷卡额 佣金收入 刷卡额 佣金收入 多表头具体的后台代码是在Row_Created事件中创建的.先看创建代 ...

  8. Java 基于Excel模板实现导出Excel并插入数据

    [本案例基于spring boot架构] 一.需求介绍 给定一个Excel模板,在指定位置插入数据,然后将生成的excel导出. 二.实现方法介绍 1.准备Excel模板 模板中要插入数据的地方用&q ...

  9. 根据 excel 模板自定义导出excel

    导出excel //导出 excel 报价单 function exportbaojiaExcel(title,url,gname) {gridname=gname;var id = "&q ...

最新文章

  1. 第1关:最长非降子序列(非连续)问题
  2. linux常用命令简介- 用户管理及文件属性
  3. .NET字符串操作类StringHelper (C#版)
  4. 配件都包括什么_婚礼婚庆服务都包括什么
  5. Transformer性能优化:运算和显存
  6. Bash脚本教程之命令提示符
  7. rabbitmq消息重回队列
  8. window下的免安装redis
  9. 多用类型常量,少用#define预处理指令
  10. cfa英语不好的怎么学_英语基础很差,如何备考CFA?
  11. 梦幻西游打宝图脚本制作教程
  12. 经典点云配准算法:迭代最近点算法ICP(Iterative Closest Point)
  13. 周围剃光头顶留长发型_四周都剃光,头顶留在发的那叫什么发型
  14. Android隐藏的权限管理机制:AppOps
  15. SlashData开发者工具榜首等你而定!!!
  16. SOHO中国高管建“老鼠仓”吸钱 大企成空壳谁之责?
  17. iOS开发笔记之二十四——Xcode下类中供外部调用的方法添加注释说明技巧
  18. FZU2214 超大背包
  19. 2019年7月训练记录(更新ing)
  20. Linux比windows更适合工作和娱乐

热门文章

  1. roaming文件夹是什么文件夹,roaming文件夹能删除么?
  2. FACH EFACH及其DRX
  3. Midjourney绘制插画,绘画重来没有如此之简单 - 第12篇
  4. 3·15再次袭来 微微网络电话以“诚”相对
  5. 苹果新款iPad今开售:内地只有WiFi版 回收价2300
  6. HHUOJ 1014 火眼金睛
  7. 标准正态分布函数和反函数Ф^(-1)
  8. 深富策略:流动性大概率有利 A股小幅攀升
  9. Python基于AESSHA1PRNG 算法 加密与解密
  10. XVWA CSV Formula Injection