springboot-实现excle文件导出的单元格相同内容合并
导出excle文件中的单元格有些需要合并如何操作
例如:左边的表格想合并单元格成右边的表格更加便于观看

一、依赖文件
<!-- excle操作-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.8</version>
</dependency> <dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.10</version>
</dependency> <dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.1</version>
</dependency> <dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.1</version>
</dependency>
二、代码
@RequestMapping("/merge")
public class MergeController {
@RequestMapping(value = "/excleExport" )
@ResponseBody
public void csvExport(HttpServletResponse response){
//表头
List<String> headerList = Arrays.asList("编号", "姓名");
//通过工具类创建writer,默认创建xls格式
ExcelWriter writer = ExcelUtil.getWriter();
//写入表头
writer.writeHeadRow(headerList);
//组织数据
// 组织数据
List<List<Object>> data = new ArrayList<>();
List list1 = Arrays.asList("001","张三");
List list2 = Arrays.asList("001","张三");
List list3 = Arrays.asList("001","张三");
List list4 = Arrays.asList("002","李四");
List list5 = Arrays.asList("002","李四");
List list6 = Arrays.asList("003","王五");
data.add(list1);
data.add(list2);
data.add(list3);
data.add(list4);
data.add(list5);
data.add(list6);
//一次性写出内容,使用默认样式,强制输出标题
writer.write(data,true);
//设置表格宽度自动
writer.autoSizeColumnAll();
//获取底层的Workbook和Sheet对象
Workbook workbook = writer.getWorkbook();
Sheet sheet = workbook.getSheetAt(0);
//合并相同编号的单元格
int startRow = 1; // 数据开始行(跳过表头)
for (int i = 1; i < data.size(); i++) {
if (!data.get(i).get(0).equals(data.get(i - 1).get(0))) {
System.out.println(data.get(i).get(0));
System.out.println(data.get(i - 1).get(0));
if (startRow < i) {
// 合并编号列 前两个参数起始行和结束行 后两个参数起始列和结束列
sheet.addMergedRegion(new CellRangeAddress(startRow, i , 0, 0));
// 合并姓名列
sheet.addMergedRegion(new CellRangeAddress(startRow, i , 1, 1));
}
startRow = i+1;
}
}
//response为HttpServeltReponse对象
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition","attachment;filename=1.xls");
ServletOutputStream out= null;
try{
out = response.getOutputStream();
writer.flush(out,true);
}catch (IOException e){
e.printStackTrace();
}finally {
//关闭writer,释放内存
writer.close();
}
IoUtil.close(out);
}
}
三、postman调用

下载后就是开头合并单元格后的效果
源码获取方式(免费):
(1)登录-注册:http://resources.kittytiger.cn/
(2)搜索:springboot导出excle+导出的excle单元格合并
springboot-实现excle文件导出的单元格相同内容合并的更多相关文章
- 读取Excel文件中的单元格的内容和颜色
怎样读取Excel文件中的单元格的内容和颜色 先创建一个Excel文件,在A1和A2中随意输入内容,设置A1的字体颜色为红色,A2的背景为黄色.需要 using Excel = Microsoft.O ...
- Excel催化剂开源第15波-VSTO开发之DataTable数据导出至单元格区域
上篇提到如何从Excel界面上拿到用户的数据,另外反方向的怎样输出给用户数据,也是关键之处. VSTO最大的优势是,这双向的过程中,全程有用户的交互操作. 而一般IT型的程序,都是脱离用户的操作,只能 ...
- 个人永久性免费-Excel催化剂功能第81波-指定单元格区域内容及公式填充
在日常数据处理过程中,需要对缺失数据进行填充时,按一定逻辑规则进行处理,实现快速填充,规范数据源.此篇给大家带来多种填充数据的场景. 业务使用场景 对各种系统中导出的数据,很多时候存在数据缺失的情况, ...
- 个人永久性免费-Excel催化剂功能第52波-相同内容批量合并单元格,取消合并单元格并填充内容
在高级Excel用户群体中无比痛恨的合并单元格,在现实的表格中却阴魂不散的纠缠不断.今天Excel催化剂也来成为“帮凶”,制造更多的合并单元格.虽然开发出此功能,请使用过程中务必要保持节制,在可以称为 ...
- WPF备忘录(3)如何从 Datagrid 中获得单元格的内容与 使用值转换器进行绑定数据的转换IValueConverter
一.如何从 Datagrid 中获得单元格的内容 DataGrid 属于一种 ItemsControl, 因此,它有 Items 属性并且用ItemContainer 封装它的 items. 但是,W ...
- 如何从 Datagrid 中获得单元格的内容与 使用值转换器进行绑定数据的转换IValueConverter
一.如何从 Datagrid 中获得单元格的内容 DataGrid 属于一种 ItemsControl, 因此,它有 Items 属性并且用ItemContainer 封装它的 items. 但是,W ...
- c#DataGridView数据绑定示例——格式化单元格的内容(转)
转自http://blog.csdn.net/testcs_dn/article/details/37834063 c#DataGridView数据绑定示例 格式化单元格的内容 在使用DataGrid ...
- 分列:将excel单元格的内容拆分为两列
提要:处理excel数据时有时需要把单元格的内容拆分为两列,可能方便外部软件的链接,可能使数据显示更明晰等等,有人说直接剪切加粘贴不就可以了吗,但是有时数据过多,这样处理很不效率,网上搜索的方法说插入 ...
- 获取wpf datagrid当前被编辑单元格的内容
原文 获取wpf datagrid当前被编辑单元格的内容 确认修改单元个的值, 使用到datagrid的两个事件 开始编辑事件 BeginningEdit="dataGrid_Beginni ...
- NPOI扩展--判断指定单元格是否为合并单元格和输出该单元格的行列跨度(维度)
因工作需要用到跨合并单元格获取数据,所以写了个NPOI扩展类. 主要方法如下: 1.判断指定行/列索引(单元格)是否为合并单元格. 2.获取指定列索引的实际含有数据的单元格. 3.返回指定行/列索引的 ...
随机推荐
- windows系统下最新版gym[atari]中的游戏环境(此时最新版的gym为0.24.0,gym==0.24.0)
关于gym[atari]的安装参看以前的博文: windows系统下安装最新版gym的安装方法(此时最新版的gym为0.24.0,gym==0.24.0) 上代码: import time impor ...
- 零基础学习人工智能—Python—Pytorch学习(四)
前言 接续上一篇的optimizer的学习. optimizer 代码和上一篇文章的一样,如下: import torch import numpy as np import torch.nn as ...
- 微服务开发手册之GRPC
荐
GRPC是一个高性能.通用的开源RPC框架,基于HTTP/2协议标准和Protobuf序列化协议开发,支持众多的开发语言. @[TOC] 1 简介 在GRPC框架中,客户端可以像调用本地对象一样直接调 ...
- disconf分布式配置管理(一) 安装与配置
一.背景 在生产部署过程中,遇到以下问题: 1.由于节点较多,每次增量修改配置文件后都需要每个节点替换配置文件. 2.有些动态配置修改后,需要重启服务. 二.解决方案 1.使用linux文件共享配置文 ...
- 让你的C程序,可以自动更新版本信息
一.软件管理 稍微上点规模的软件开发往往周期都非常长, 中间会产生很多临时版本, 这些临时版本往往会有各种各样的bug, 由于项目参与的人员众多.水平参差不齐, 软件分支众多.功能复杂, 经常会有各种 ...
- 【Mac + Appium + Java1.8(一)】之Android自动化环境安装配置以及IDEA配置(附录扩展Selenium+Java自动化)
配置环境: MacOS:10.13.6 java:1.8 IntelliJ IDEA:2018.3 Android SDK:25 Appium:1.9.1 Appium-desktop:1.7.1 j ...
- 【图文教程】云服务器上,Linux安装VSFTPD组件及遇到的问题
服务器做迁移,从AXX云迁移到Txx云上,迁移的话,需要把图片服务器也迁移过去.之前使用的是VSFTPD这次也还用这个吧.这里就记录下FTP服务器安装及遇到的问题. 1:安装VSFTP组件 使用yum ...
- IntelliJ Idea 常用快捷键参照列表
IntelliJ Idea 常用快捷键参照列表 Ctrl+Shift + Enter,语句完成 "!",否定完成,输入表达式时按 "!"键 Ctrl+E,最近的 ...
- 线性dp:LeetCode122.买卖股票的最佳时机ll
买卖股票 本文所讲解的内容与LeetCode122. 买卖股票的最佳时机ll,这道题题意相同,阅读完本文后可以自行挑战一下 力扣链接 题目叙述: 给定一个长度为N的数组,数组中的第i个数字表示一个给定 ...
- babel-preset-env与stage-x的使用指南
babel介绍 babel总共分为3个阶段: 解析.转换和生成 babel本身不具有任何转换功能, 如果没有plugin,那么经过babel的代码和输入的是相同的. babel插件分为两种 语法插件: ...