首页 > 其他分享 >easyExcel判断合并单元格

easyExcel判断合并单元格

时间:2024-06-12 21:34:31浏览次数:16  
标签:return int easyExcel 单元格 合并 column row

开发中遇到需求:1、查询一组单元格是否是一个合并单元格 2、判断指定的单元格是否属于合并单元格区域

之前用了POI的原生方法,但是excel太大,频繁的循环导致时间花费太长,因此打算改用easyExcel看看时间会不会少点。上网看了一下,easyExcel没有直接判断合并的方法,需要自己写。

以下是我写的方法:

 1 public static class CellPosition {
 2         int row;
 3         int column;
 4 
 5         public CellPosition(int row, int column) {
 6             this.row = row;
 7             this.column = column;
 8         }
 9 
10         public int getRow() {
11             return row;
12         }
13 
14         public int getColumn() {
15             return column;
16         }
17     }
18 
19      /*
20      * @description:查询一组单元格是否是一个合并单元格
21      * @author: *
22      * @date: 2024/6/7 13:38
23      * @param: [cellPositions 要查询的一组单元格地址(必须两个及以上), mergedList 所有合并单元格]
24      * @return: boolean 是一个合并单元格返回true 否则返回false
25      **/
26 public boolean areCellsMergedIntoOne(List<CellPosition> cellPositions, List<CellExtra> mergedList){
27     boolean isMergerd = false;
28     CellExtra tmp = null;
29     for(CellPosition cellPosition:cellPositions){
30         if(tmp!=null){
31             if(!isInRange(tmp, cellPosition.getRow()-1, cellPosition.getColumn())){
32                 isMergerd = false;
33                 break;
34             }
35         }else{
36             for(CellExtra cellExtra:mergedList){
37                 isMergerd = isInRange(cellExtra, cellPosition.getRow()-1, cellPosition.getColumn());
38                 if(isMergerd){
39                     //查询到合并单元格,赋值给tmp,下次查询无需循环
40                     isMergerd=true;
41                     tmp = cellExtra;
42                     break;
43                 }
44             }
45             //第一轮寻找下来如果tmp为空,代表查询的单元格不是一个合并单元格,直接返回
46             if(tmp==null) {
47                 isMergerd = false;
48                 break;
49             }
50         }
51     }
52     if(isMergerd)
53         return true;
54     else
55         return false;
56 }
57 /**
58      * 判断指定的单元格是否属于合并单元格区域。
59      *
60      * @param cellExtras   所有合并单元格
61      * @param row     单元格所在的行索引
62      * @param column  单元格所在的列索引
63      * @return 如果单元格是合并单元格的一部分则返回true,否则返回false
64      */
65 public  boolean isMergedRegion(List<CellExtra> cellExtras,int row, int column) {
66     for (CellExtra extra:cellExtras) {
67         if (isInRange(extra,row-1,column)) {
68             return true;
69         }
70     }
71     return false;
72 }
73 /*
74      * @description:判断rowInd,colInd范围是否在当前的合并单元格范围之内,是返回true,否返回false
75      * @author: *
76      * @date: 2024/6/7 15:18
77      * @param: [extra 合并单元格的范围, rowInd 要查询单元格的行位置, colInd 要查询单元格的列位置]
78      * @return: boolean
79      **/
80 private   boolean isInRange(CellExtra extra,int rowInd, int colInd) {
81         return extra.getFirstRowIndex() <= rowInd && rowInd <= extra.getLastRowIndex() && extra.getFirstColumnIndex() <= colInd && colInd <= extra.getLastColumnIndex();
82     }

 

 

标签:return,int,easyExcel,单元格,合并,column,row
From: https://www.cnblogs.com/hong-yf/p/18244730

相关文章

  • EasyExcel动态设置行背景色
    自定义处理器`packagecom.ruoyi.web.part.service.impl;importcom.alibaba.excel.metadata.data.WriteCellData;importcom.alibaba.excel.util.BooleanUtils;importcom.alibaba.excel.write.handler.CellWriteHandler;importcom.alibaba.excel.write.handler.context.C......
  • 合并区间
    Problem:56.合并区间目录思路解题方法复杂度Code1这个写的有点不优美了丑Code2思路bite数组与排序两种思路解题方法描述你的解题方法复杂度时间复杂度:添加时间复杂度,示例:$O(n)$空间复杂度:添加空间复杂度,示例:$O(n)$Code1这个写的有点不优美了丑......
  • 【区间dp】石子合并
    原题传送门题目描述在一个圆形操场的四周摆放\(N\)堆石子,现要将石子有次序地合并成一堆,规定每次只能选相邻的\(2\)堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。试设计出一个算法,计算出将\(N\)堆石子合并成\(1\)堆的最小得分和最大得分。输入格式数据的......
  • Git:从配置到合并冲突
    目录        1.前言        2.Git的下载与初始化配置        3.Git中新建仓库        4.Git的工作区域和文件状态        5.Git中查看操作和提交记录        6.Git中添加和提交文件        7.Git中回退提交版......
  • Video Cut Crop Join for Mac(mac视频剪辑合并软件 )v3.9版
    VideoCutCropJoinforMac是一款适用于Mac用户的视频编辑软件。这款软件具有强大的功能,可以帮助用户对视频进行精准的剪切、裁剪,并将其压缩为各种小尺寸和格式,非常适合在网站上分享。VideoCutCropJoinforMac(mac视频剪辑合并软件)软件地址VideoCutCropJoinforM......
  • 从零手写实现 nginx-11-文件处理逻辑与 range 范围查询合并
    前言大家好,我是老马。很高兴遇到你。我们为java开发者实现了java版本的nginxhttps://github.com/houbb/nginx4j如果你想知道servlet如何处理的,可以参考我的另一个项目:手写从零实现简易版tomcatminicat手写nginx系列如果你对nginx原理感兴趣,可以阅读:从零......
  • 生产计划范围的扩展 - 工单的拆分与合并
    背景在过往与不少合作伙伴们,就生产计划项目方案的讨论中,经常提及这样的一种情况:“我们在编制生产计划时,有些数量较大的订单,需要拆分成多个子订单,这样才能利用多个资源并行加工,以缩短生产周期,提高资源利用率”-我们称为【工单拆分】或“一些较零碎、且工艺相同或相近的订......
  • 使用 iTextSharp 在 .NET Core 中进行 PDF 管理之合并 PDF
    介绍在当今的数字时代,以编程方式管理PDF文档是许多应用程序的常见要求。无论是生成报告和发票还是合并多个PDF文件,拥有合适的工具都可以显著简化开发流程。在本文中,我们将探讨如何利用iTextSharp(一种用于处理C#中PDF的流行库)在.NETCore应用程序中无缝合并PDF......
  • 蓝桥等考Python组别十六级07(区间合并)
    蓝桥等考Python组别十六级007第一部分:选择题1、PythonL16(15分)a和b是两个集合,a|b表示a和b的(  )。交集并集子集差集正确答案:B2、PythonL16(15分)运行下面程序,输出的结果是(  )。s=set([5,1,5,5,1,2])print(len(s))3456正确答案:A3、PythonL16(20......
  • 21. 合并两个有序链表
    packagemainimport"fmt"typeListNodestruct{ Valint Next*ListNode}//创建链表funccreateList(nums[]int)*ListNode{ head:=&ListNode{} tail:=head fori:=0;i<len(nums);i++{ node:=&ListNode{Val:nums[i]} t......