1.判断当前单元格是不是合并单元格

 1 ...
2 private boolean isMergedRegion(Sheet sheet, int row, int column) {
3 //获取合并单元格的数量
4 int sheetMergeCount = sheet.getNumMergedRegions();
5 //循环合并的单元格
6 for (int i = 0; i < sheetMergeCount; i++) {
7 //获取合并单元格对象
8 CellRangeAddress range = sheet.getMergedRegion(i);
9 //获取第i个合并单元格的边界
10 int firstColumn = range.getFirstColumn();
11 int lastColumn = range.getLastColumn();
12 int firstRow = range.getFirstRow();
13 int lastRow = range.getLastRow();
14 //通过判断边界的大小范围来判断是不是合并单元格
15 if (row >= firstRow && row <= lastRow) {
16 if (column >= firstColumn && column <= lastColumn) {
17 return true;
18 }
19 }
20 }
21 return false;
22 }
23 ...

2.获取单元格的边界内容

 1 ...
2 public Map<String, Integer> getMergedRegionRange(Sheet sheet, int row, int column) {
3 //获取合并单元格的数量
4 int sheetMergeCount = sheet.getNumMergedRegions();
5 //循环获取的合并单元格
6 for (int i = 0; i < sheetMergeCount; i++) {
7 CellRangeAddress ca = sheet.getMergedRegion(i);
8 //获取合并单元格的边界
9 int firstColumn = ca.getFirstColumn();
10 int lastColumn = ca.getLastColumn();
11 int firstRow = ca.getFirstRow();
12 int lastRow = ca.getLastRow();
13 //如果这个是合并单元格,将内容放在map里面
14 if (row >= firstRow && row <= lastRow) {
15 if (column >= firstColumn && column <= lastColumn) {
16 Row fRow = sheet.getRow(firstRow);
17 Map<String, Integer> cellRangeMap = new HashMap<>();
18 cellRangeMap.put("firstRow", firstRow);
19 cellRangeMap.put("lastRow", lastRow);
20 cellRangeMap.put("firstColumn", firstColumn);
21 cellRangeMap.put("lastColumn", lastColumn);
22 return cellRangeMap;
23 }
24 }
25 }
26 return null;
27 }
28 ...

3.获取单元格的值

 1 ...
2 public String getMergedRegionValue(Sheet sheet, int row, int column) {
3 //获取合并单元格的数量
4 int sheetMergeCount = sheet.getNumMergedRegions();
5 //循环获取的合并单元格
6 for (int i = 0; i < sheetMergeCount; i++) {
7 CellRangeAddress ca = sheet.getMergedRegion(i);
8 int firstColumn = ca.getFirstColumn();
9 int lastColumn = ca.getLastColumn();
10 int firstRow = ca.getFirstRow();
11 int lastRow = ca.getLastRow();
12 if (row >= firstRow && row <= lastRow) {
13 if (column >= firstColumn && column <= lastColumn) {
14 Row fRow = sheet.getRow(firstRow);
15 Cell fCell = fRow.getCell(firstColumn);
16 return getCellValue(fCell);
17 }
18 }
19 }
20 return null;
21 }
22 ...

4.设置合并单元格

...
int firstRow = Integer.parseInt(((HashMap) topRangeMap).get("firstRow").toString());
int lastRow = Integer.parseInt(((HashMap) topRangeMap).get("lastRow").toString());
int firstColumn = Integer.parseInt(((HashMap) topRangeMap).get("firstColumn").toString());
int lastColumn = Integer.parseInt(((HashMap) topRangeMap).get("lastColumn").toString());
CellRangeAddress cra = new CellRangeAddress(firstRow, lastRow, firstColumn, lastColumn);
sheet.addMergedRegion(cra);
...

poi处理excel的合并单元格写的工具类,支持xlsx和xls的更多相关文章

  1. 使用POI创建word表格合并单元格兼容wps

    poi创建word表格合并单元格代码如下: /** * @Description: 跨列合并 */ public void mergeCellsHorizontal(XWPFTable table, ...

  2. 用NPOI创建Excel、合并单元格、设置单元格样式、边框的方法

    本篇文章小编为大家介绍,用NPOI创建Excel.合并单元格.设置单元格样式.边框的方法.需要的朋友参考下 今天在做项目中,遇到使用代码生成具有一定样式的Excel,找了很多资料,最后终于解决了,Ex ...

  3. WPF 导出Excel(合并单元格)

    WPF 导出Excel(合并单元格) DataTable 导出Excel(导出想要的列,不想要的去掉) ,B1,B2,B3,B4,B5} MisroSoft.Office.Interop.Excel. ...

  4. 使用npoi导入Excel - 带合并单元格--附代码

    之前我们在使用npoi导入excel表格的时候,往往会遇见那种带有合并单元格的数据在导入的时候出现合并为空的问题, 也就是只有第一条有数据,其余均为空白.在网上翻了半天也没有找到合适的解决方案,最后还 ...

  5. POI导出复杂Excel,合并单元格(2)

    /** * 导出excel (HSSFWorkbook) */ @GetMapping("/testExport") public void testExport1(HttpSer ...

  6. POI导出复杂Excel,合并单元格(1)

    /** * 导出复杂excel 合并单元格 (HSSFWorkbook) */ @GetMapping("/testHSSFWorkbook.do") public void te ...

  7. poi excel设置合并单元格边框格式

    版本3.17 //设置合并单元格的边框 public static void setBorderForMergeCell(BorderStyle style,int color, CellRangeA ...

  8. 导出excel带合并单元格方法的Demo

    package com.test.util; import java.io.FileNotFoundException; import java.io.FileOutputStream; import ...

  9. poi生成表格自动合并单元格

    直接复制这个工具类即可使用: /** * 合并单元格 * @author tongyao * @param sheet sheet页 * @param titleColumn 标题占用行 * @par ...

  10. Excel日期格式单元格写成yyyy.MM.dd格式将无法读取到DataTable

    最近在改公司的订单系统,遇到了一个奇怪的问题.C#程序需要从Excel文件中将数据全部读取到DataTable,其中Excel文件的第一列是日期格式yyyy/MM/dd,而这一列中大部分的单元格都是按 ...

随机推荐

  1. vue 前端选择弹窗取值完整实例[经典]

    <!-- 班次信息 --> <el-row> <el-col :span="24"> <el-form-item label=" ...

  2. Mybatis-Plus中的@TableName 和 table-prefix

    简介 本文介绍Mybatis-Plus中的@TableName 和 table-prefix的使用. 介绍 在 MyBatis-Plus 中,@TableName 注解和 table-prefix 配 ...

  3. kette介绍-Step之Merge Join

    Merge Join介绍 需要配合Sort rows使用,对关联字段进行排序 关联两个step数据,可以是两个不同的数据库表数据,也可以是一张表,一个文件,输出字段为两张表所有字段 注意将小数据集作为 ...

  4. kettle介绍-参数变量

    ETL中为什么使用参数变量 实现ETL的复用 D,Q,P环境不同,使用变量方便发布 有的条件需要外部传入 增量ETL 灵活性强 kettle中参数变量种类 Environment Variables ...

  5. 82.7K star!大气炫酷UI开源项目,超级火!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 shadcn/ui 是一款基于 Radix UI 和 Tailwind CSS 构建的现代化 ...

  6. Spring JdbcTemplate操作数据库

    Spring JdbcTemplate操作数据库 源码 代码测试 pom.xml <?xml version="1.0" encoding="UTF-8" ...

  7. 漏洞预警 | CraftCMS模板注入漏洞

    0x00 漏洞编号 CVE-2024-56145 0x01 危险等级 高危 0x02 漏洞概述 CraftCMS是一个灵活的.易于使用的内容管理系统. 0x03 漏洞详情 CVE-2024-56145 ...

  8. 【HUST】网络攻防实践|6_物联网设备固件安全实验|flag2~5速通指南

    写在最前:最近没空写报告,实验原理虽然已经摸清了但是没空写.flag2到4是一些大胆的想法的通关方式,flag5是正经通关的.之后写报告的时候会补发正经的实验原理,和flag2到4正常的通关方式. 记 ...

  9. 轮播图导航组件 | 纯血鸿蒙组件库AUI

    摘要: 轮播图导航(A_SwiperNav):实现沉浸式体验的App全屏轮播引导页效果.可设置图片数据(含文本.图片地址.路由.标题.子标题),可设置按钮颜色. 一.在页面当中调用轮播图导航组件 打开 ...

  10. HarmonyOS NEXT开发实战案例--抽奖转盘

    这是之前写过的一个项目,后来删掉了,现在适配到api12重新发布,友友们按需查阅. 本文主要通过抽奖转盘小项目讲解在鸿蒙开发中如何使用画布组件Canvas绘制图形和文字,以及转圈动画的实现.效果图如下 ...