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. study Rust-5【Slice】

    另一个没有所有权的数据类型是 slice.slice 允许你引用集合中一段连续的元素序列,而不用引用整个集合. [字符串Slice熟悉掌握的很勉强,通过动手来进步加深认识] 字符串slice let ...

  2. 7. RabbitMQ 消息队列——延时队列(Spring Boot + 安装message_exchange"延迟插件" 的详细配置说明)的详细讲解

    7. RabbitMQ 消息队列--延时队列(Spring Boot + 安装message_exchange"延迟插件" 的详细配置说明)的详细讲解 @ 目录 7. Rabbit ...

  3. DotNetGuide 突破了 8K + Star,努力打造C#/.NET/.NET Core全面的学习、工作、面试指南知识库!

    前言 转眼之间维护DotNetGuide(全面的C#/.NET/.NET Core学习.工作.面试指南知识库)已经持续超过了4年多的时间,Commit提交数也超过1400+,在前几天在 GitHub ...

  4. 手写数字识别实战教程:从零实现MNIST分类器(完整代码示例)

    引言:数字识别的魔法世界 在人工智能的奇妙宇宙中,手写数字识别堪称经典中的经典.这个看似简单的任务--让电脑像人一样"认数字",背后蕴含着模式识别的核心思想.本文将带领你亲手实现一 ...

  5. lua随写

    --local util={}--function util.Split(str, sep)-- local sep, fields = sep or ":", {}-- loca ...

  6. 一款让 Everything 更加如虎添翼的 .NET 开源辅助工具!

    前言 相信很多同学都应该用过 Everything 这个实用的 Windows 文件搜索神器吧,今天大姚给大家分享一款让 Everything 更加如虎添翼的 .NET 开源辅助工具:Everythi ...

  7. WPF静态资源StaticResource和动态资源DynamicResource有什么区别,x:Static又是什么意思?

    什么叫WPF的资源(Resource) 资源是保存在可执行文件中的一种不可执行数据.WPF中资源用ResourceDictionary类表示,这个类就是一个字典,字典的key和value都是objec ...

  8. HashMap 批量添加

    需要初始化一个常量HashMap,并希望在一行语句中完成.避免像这样的事情: hashMap.put("One", new Integer(1)); // adding value ...

  9. MySQL 的乐观锁和悲观锁是什么?

    MySQL 的乐观锁和悲观锁是什么? 在并发环境下,为了避免数据竞争和保证数据一致性,可以使用不同的锁策略.乐观锁和悲观锁是两种常见的并发控制机制,它们在锁定数据时的理念和实现方式上有显著区别. 1. ...

  10. .net core日志NLog的使用

    Nlog日志使用 视频:https://www.bilibili.com/video/BV1bv4y1a79X 参照:https://www.cnblogs.com/sheng-jie/p/17169 ...