导出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文件导出的单元格相同内容合并的更多相关文章

  1. 读取Excel文件中的单元格的内容和颜色

    怎样读取Excel文件中的单元格的内容和颜色 先创建一个Excel文件,在A1和A2中随意输入内容,设置A1的字体颜色为红色,A2的背景为黄色.需要 using Excel = Microsoft.O ...

  2. Excel催化剂开源第15波-VSTO开发之DataTable数据导出至单元格区域

    上篇提到如何从Excel界面上拿到用户的数据,另外反方向的怎样输出给用户数据,也是关键之处. VSTO最大的优势是,这双向的过程中,全程有用户的交互操作. 而一般IT型的程序,都是脱离用户的操作,只能 ...

  3. 个人永久性免费-Excel催化剂功能第81波-指定单元格区域内容及公式填充

    在日常数据处理过程中,需要对缺失数据进行填充时,按一定逻辑规则进行处理,实现快速填充,规范数据源.此篇给大家带来多种填充数据的场景. 业务使用场景 对各种系统中导出的数据,很多时候存在数据缺失的情况, ...

  4. 个人永久性免费-Excel催化剂功能第52波-相同内容批量合并单元格,取消合并单元格并填充内容

    在高级Excel用户群体中无比痛恨的合并单元格,在现实的表格中却阴魂不散的纠缠不断.今天Excel催化剂也来成为“帮凶”,制造更多的合并单元格.虽然开发出此功能,请使用过程中务必要保持节制,在可以称为 ...

  5. WPF备忘录(3)如何从 Datagrid 中获得单元格的内容与 使用值转换器进行绑定数据的转换IValueConverter

    一.如何从 Datagrid 中获得单元格的内容 DataGrid 属于一种 ItemsControl, 因此,它有 Items 属性并且用ItemContainer 封装它的 items. 但是,W ...

  6. 如何从 Datagrid 中获得单元格的内容与 使用值转换器进行绑定数据的转换IValueConverter

    一.如何从 Datagrid 中获得单元格的内容 DataGrid 属于一种 ItemsControl, 因此,它有 Items 属性并且用ItemContainer 封装它的 items. 但是,W ...

  7. c#DataGridView数据绑定示例——格式化单元格的内容(转)

    转自http://blog.csdn.net/testcs_dn/article/details/37834063 c#DataGridView数据绑定示例 格式化单元格的内容 在使用DataGrid ...

  8. 分列:将excel单元格的内容拆分为两列

    提要:处理excel数据时有时需要把单元格的内容拆分为两列,可能方便外部软件的链接,可能使数据显示更明晰等等,有人说直接剪切加粘贴不就可以了吗,但是有时数据过多,这样处理很不效率,网上搜索的方法说插入 ...

  9. 获取wpf datagrid当前被编辑单元格的内容

    原文 获取wpf datagrid当前被编辑单元格的内容 确认修改单元个的值, 使用到datagrid的两个事件 开始编辑事件 BeginningEdit="dataGrid_Beginni ...

  10. NPOI扩展--判断指定单元格是否为合并单元格和输出该单元格的行列跨度(维度)

    因工作需要用到跨合并单元格获取数据,所以写了个NPOI扩展类. 主要方法如下: 1.判断指定行/列索引(单元格)是否为合并单元格. 2.获取指定列索引的实际含有数据的单元格. 3.返回指定行/列索引的 ...

随机推荐

  1. 乌克兰学者的学术图谱case5

    ========================================== 背景: 弗兰采维奇材料问题研究是欧洲最大的材料科研院所,在核电.航空.航天.军工及其他装备制造领域的先进材料研制方 ...

  2. MySQL手动执行rollback,内部实现分析

    -- 测试手动回滚操作 -- 1手动开启事务 START TRANSACTION -- 2执行更新操作语句 UPDATE FraBakNtuAnalysize SET IsDeleted = 0 WH ...

  3. .NET 8 跨平台高性能边缘采集网关

    前言 在物联网(IoT)和工业自动化领域,边缘计算设备扮演着至关重要的角色.边缘采集网关作为连接物理世界与数字世界的桥梁,负责收集传感器数据并将数据传输到云端或本地数据中心进行处理. 本文将介绍一款基 ...

  4. Linux系统性能调优技巧

    Linux系统性能调优是一个复杂而细致的过程,它涉及到硬件.软件.配置.监控和调优策略等多个方面.以下将详细阐述Linux系统性能调优的技巧: 一.硬件优化 CPU优化 选择适合的CPU:根据应用需求 ...

  5. 推荐2款实用的持续集成与部署(CI&CD)自动化工具

    前言 最近DotNetGuide技术社区交流群有不少同学在咨询:持续集成与部署(CI&CD)自动化工具有什么好用的推荐?今天大姚给大家推荐2款实用且免费的持续集成与部署(CI&CD)自 ...

  6. Mac 使用远程 Ubuntu 机器进行时间备份

    设置 SMB 服务 首先在 Ubuntu 中配置 SMB 服务.可以参考 Ubuntu 设置 SMB 服务. 创建 APFS 磁盘映像 我们在 Ubuntu 上创建出的 SMB 共享文件夹可以用来存放 ...

  7. android java.lang.Exception: java.net.ProtocolException: Expected HTTP 101 response

    Android stomp长连接连接异常: 报错:java.lang.Exception: java.net.ProtocolException: Expected HTTP 101 response ...

  8. Jmeter、postman、python 三大主流技术如何操作数据库?

    1.前言 只要是做测试工作的,必然会接触到数据库,数据库在工作中的主要应用场景包括但不限于以下: 功能测试中,涉及数据展示功能,需查库校验数据正确及完整性:例如商品搜索功能 自动化测试或性能测试中,某 ...

  9. java_day2_常量,变量,数据类型,运算符

    一.常量 常量:在Java程序运行过程中其值不能发生改变的量 分类: 1.字面值常量: 整数常量 表示所有的整数,包括负数 10 -8 小数常量 表示所有的小数 1.23 -3.14 布尔常量 tru ...

  10. SpringBoot——项目快速启动

    SpringBoot项目快速启动 对SpringBoot项目打包(执行Maven构建指令package)    执行后会生成对应的项目 jar包,在文件夹找到该文件    在对应文件夹下即可执行  j ...