easyExcel判断合并单元格

开发中遇到需求: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     }

 

 

posted @ 2024-06-12 21:22  莫得感情的肝帝  阅读(22)  评论(0编辑  收藏  举报