public void poiCreateExcel(HttpServletResponse response, Map<String, Object> map) {// 下载文件信息String fileName = (String) map.get("fileName");if (StringUtils.isBlank(fileName)) {throw new RuntimeException("导出参数fileName常");}//表数据信息List dataRows = (List) map.get("rows");if (dataRows == null || dataRows.size() == 0) {throw new RuntimeException("导出参数rows异常");}// 所需显示的字段List<String> titles = (List<String>) map.get("titles");//数据排序String order = (String) map.get("order");if (order == null || order.isEmpty()) {throw new RuntimeException("导出参数order异常");}if (titles == null || titles.isEmpty()) {throw new RuntimeException("导出参数titles异常");}//获取数据排序String[] orderDataString = order.toString().split(",");//创建Excel工作薄XSSFWorkbook workbook = new XSSFWorkbook();XSSFCellStyle cellStyle = workbook.createCellStyle();cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);//创建一个工作表sheetSheet sheet = workbook.createSheet();// 标记行int flagRow = -1;for (int i = 0; i < titles.size(); i++) {String[] tNames = titles.get(i).split(",");//创建行Row row = sheet.createRow(i);Cell cell = null;// 插入行for (int j = 0; j < tNames.length; j++) {//创建单元格cell = row.createCell(j);//插入数据cell.setCellValue(tNames[j]);// 插入样式cell.setCellStyle(cellStyle);}}//合并列for (int i = 0; i < titles.size(); i++) {String[] tNames = titles.get(i).split(",");List<String> tList = Arrays.asList(tNames);//合并列for (int frequency, f = 0; f < tNames.length; f++) {frequency = Collections.frequency(tList, tNames[f]);//判断重复字段是否连续if (frequency > 1) {// 标记结束合并行int endRos = i;// 防止数组越界(数组末位为重复且无需合并字段) 判断字段是否连续 非连续不合列if (f == (tNames.length - 1) || !tNames[f].equals(tNames[f + 1])) {continue;}// 保留开始列坐标int cos = f;//下标校验while ((f != tNames.length - 1) && tNames[f].equals(tNames[f + 1])) {// 查重处理下标if (tNames[f].equals(tNames[f + 1])) {++f;}}// 判断是否存在前一行if (i - 1 >= 0) {String[] preNames = titles.get(i - 1).split(",");// 与前一行字段匹配 不予处理if (tNames[f].equals(preNames[f])) {continue;}}for (int j = i; j < titles.size(); j++) {if (j + 1 < titles.size()) {String[] nextNames = titles.get(j + 1).split(",");//判断是否下一行是否存在数据if (tNames[f].equals(nextNames[f])) {endRos = j;}// 重复行终止if (!tNames[f].equals(nextNames[f])) {sheet.addMergedRegion(new CellRangeAddress(i, j, cos, f));flagRow = endRos;break;}if (endRos == titles.size() - 1 && endRos > flagRow) {sheet.addMergedRegion(new CellRangeAddress(i, endRos, cos, f));}// 不存在下一行且连续重复} else {sheet.addMergedRegion(new CellRangeAddress(i, j, cos, f));}}}}}// 合并行for (int frequency, i = 0; i < titles.size(); i++) {// 标记合并行int eRow = i;String[] tNames = titles.get(i).split(",");for (int j = 0; j < tNames.length; j++) {// 向上寻找if (i > 0) {String[] preNames = titles.get(i - 1).split(",");// 前一列有相同不予处理if (tNames[j].equals(preNames[j])) {continue;}}//判断字段是否连续重复if (j < (tNames.length - 1) && tNames[j].equals(tNames[j + 1])) {continue;}// 向下寻找for (int k = i + 1; k < titles.size(); k++) {String[] nextNames = titles.get(k).split(",");if (!tNames[j].equals(nextNames[j])) {break;}eRow = k;}// 如果 eRow 与i不一致if (eRow > i) {sheet.addMergedRegion(new CellRangeAddress(i, eRow, j, j));eRow = i;}}}// 追加数据for (int i = 0; i < dataRows.size(); i++) {// 数据行为表头行的顺延一行Row dataRow = sheet.createRow(i + titles.size());// 格式化表中数据Map<String, String> data = (Map) dataRows.get(i);for (int j = 0; j < orderDataString.length; j++) {Cell dataCell = dataRow.createCell(j);dataCell.setCellValue(data.get(orderDataString[j]));}}try {String encodedFileName = new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);String formattedAttachHeader = String.format("attachment;filename=%s", encodedFileName);response.setContentType(MediaType.MULTIPART_FORM_DATA_VALUE);response.addHeader(HttpHeaders.CONTENT_DISPOSITION, formattedAttachHeader);response.setCharacterEncoding(StandardCharsets.UTF_8.toString());ServletOutputStream outputStream = response.getOutputStream();workbook.write(outputStream);outputStream.flush();} catch (Exception e) {e.printStackTrace();}}

如何使用以及效果图

Poi excel 导出 工具类参考相关推荐

  1. Excel导出工具类

    前言 相信不少同学在开发中都会遇到导出excel这种需求,今天将Excel的导出工具和大家进行一个分享,如有错误还请大佬们批评指正.该工具类可以实现自定义列宽,自定义表头样式,实现了多sheet页合并 ...

  2. Java之Excel导出工具类使用教程

    前言: 本工具类经过PostMan和web页面严格测试可用,经过了多个版本迭代优化,可以直接使用,也方便大家根据自己的业务需求,修改定制自己的导出工具. 市面上有很多封装好的导出工具(如:阿里的eas ...

  3. POI导入导出工具类

    导入POI依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</art ...

  4. java Excel导出工具类

    Excel工具类 一.开发原因 最近工作的时候,正在写关于Excel导出功能,由于当前使用的工具类不太灵活和不易看懂,自己从头写又很浪费时间等原因,我决定自己写一款很简单的Excel导出的工具类,仅仅 ...

  5. 自己写的java excel导出工具类

    最近项目要用到excel导出功能,之前也写过类似的代码.因为这次项目中多次用到excel导出.这次长了记性整理了一下 分享给大伙 欢迎一起讨论 生成excel的主工具类: public class E ...

  6. javaExcel 导出(基于POI的复杂表格导出工具类)

    我的需求: 项目中有一些工程表格需要导出,设计到行列合并,定制样式,原有工具类冗余,内聚性强.所以想写一个可以随意定制excel的工具类,工具类满足需求: 对于常用的工程表格有模板格式,可以任意插拔. ...

  7. esayExcel导出工具类

    依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artif ...

  8. 一个基于POI的通用excel导入导出工具类的简单实现及使用方法

    前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...

  9. java读写excel文件poi_Java利用POI读写Excel文件工具类

    本文实例为大家分享了Java读写Excel文件工具类的具体代码,供大家参考,具体内容如下 package com.test.app.utils; import java.io.File; import ...

最新文章

  1. MySQL5.5加主键锁读问题
  2. 华为 Java 编程军规
  3. U3D 通过预置对象实现手动创建精灵
  4. 一文理解 K8s 容器网络虚拟化
  5. 网络协议,各层功能,各层协议
  6. shell 命令总结
  7. 一个星期学会python可能吗_学习python的一周
  8. 值得借鉴的新年海报设计|PSD分层模板,图层素材随心用
  9. visio交叉线去掉交叉点弯曲方法
  10. android4.0蓝牙使能的详细解析 (转载)
  11. 修改系统提供视图类的显示字体
  12. 【动态规划】P1057 传球游戏
  13. 华为机试题2[编程题] 汽水瓶
  14. iOS WKWebview JS与OC互相调用,传递数据
  15. python字典常见操作
  16. 微信小程序制作FC模拟器,从入坑到放弃
  17. 基于Maven的SSM总体架构设计(四)
  18. 关于 SONY WF1000XM3 在 Windows 10 下蓝牙连接只有 Handfree 没有 Stereo 模式
  19. 【翻译】智能制造中EDA 应用及益处系列之四:精密故障检测与分类(FDC)
  20. jquery+jplayer实现歌词同步的mp3音乐播放器效果

热门文章

  1. 谈笑间学会大数据-Hive数据定义
  2. python输出乘法式子(HLOJ)(完整解析)
  3. PPT如何直接转换为word
  4. P5638 【CSGRound2】光骓者的荣耀
  5. vb mysql 转义字符,MySQL_在VB.NET应用中使用MySQL的方法, 绪言 在Visual Studio中使用 - phpStudy...
  6. java mxs mxm_mxm格式在3DMax中具体怎么用(步骤)?
  7. 2020年一级计算机考试试题,2020年2016计算机一级考试考点试题
  8. 如何在cmd命令行窗口打开QQ
  9. TX2超详细,超实用刷机教程(亲测有效,所有步骤都是博主亲自实践过)
  10. android之ION内存管理器(1)-- 简介