Java 使用hutool和poi 判断excel表的一个格子是否是合并单元格

需要的jar包如下

在这里插入图片描述
在这里插入图片描述

代码如下

@Data
@AllArgsConstructor
public class CoordinateDto {
    /**
     * 行
     */
    private Integer row;

    /**
     * 列
     */
    private Integer column;
}

import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;

import java.io.File;
import java.util.*;

/**
 * @Author
 * @Date 2021/1/27 15:30
 */
public class Test {
    public static void main(String[] args) throws Exception{
        isMergedRegionsExecute();
    }

    private final static String PATH = 文件路径;
    
    /**
     * 判断是否是合并单元格
     */
    private static void isMergedRegionsExecute() throws Exception{
        //借助hutool工具进行读取
        ExcelReader reader = ExcelUtil.getReader(new File(PATH + 文件名));
        Sheet sheet = reader.getSheet();
        List<CoordinateDto> mergedRegions = getMergedRegions(sheet);
        List<List<Object>> read = reader.read();
        for (int i = 0; i < read.size(); i++) {
            for (int j = 0; j < read.get(i).size(); j++) {
                System.out.printf("坐标是(%d, %d), 是否是合并单元格: %s\n", i, j, isMergedRegions(mergedRegions, i, j));
            }
        }
    }
    
    /**
     * 是否是合并单元格
     */
    public static Boolean isMergedRegions(List<CoordinateDto> list, Integer row, Integer column) {
        return list.stream().anyMatch(coordinateDto -> coordinateDto.getRow().equals(row) && coordinateDto.getColumn().equals(column));
    }


    /**
     * 获得合并单元格的坐标集合
     *
     * @param sheet 工作表对象
     * @return 合并单元格的坐标集合
     */
    /**
     * 获得合并单元格的坐标集合
     *
     * @param sheet 工作表对象
     * @return 合并单元格的坐标集合
     */
    public static List<CoordinateDto> getMergedRegions(Sheet sheet) {
        List<CoordinateDto> list = new ArrayList<>();
        List<CellRangeAddress> mergedRegionList = sheet.getMergedRegions();
        mergedRegionList.forEach(mergedRegion -> {
            int firstRow = mergedRegion.getFirstRow();
            int lastRow = mergedRegion.getLastRow();
            int firstColumn = mergedRegion.getFirstColumn();
            int lastColumn = mergedRegion.getLastColumn();
            for (int i = firstRow; i <= lastRow; i++) {
                for (int j = firstColumn; j <= lastColumn; j++) {
                    CoordinateDto coordinateDto = new CoordinateDto(i, j);
                    list.add(coordinateDto);
                }
            }
        });
        return list;
    }
}

如果有什么不懂的或者对代码有疑问欢迎在下面提出,我看到会及时回复

如果有其他的关于Excel表的问题也可以提出,我有空会协助你解决(也许)

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
可以使用POI的API来实现判断头上下单元格是否相同,如果相同则进行合并。具体的步骤如下: 1. 获取Excel的工作簿对象(Workbook)和工作对象(Sheet)。 2. 获取头行对象(Row),一般头都是在第一行,可以通过Sheet的getRow方法获取。 3. 遍历头行的每个单元格(Cell),判断当前单元格上下两个单元格是否相同,如果相同则进行合并。 4. 合并单元格可以使用Sheet的addMergedRegion方法,需要传入四个参数,分别是起始行、结束行、起始列、结束列。 代码示例: ```java Workbook workbook = ...; // 获取工作簿对象 Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作对象 Row headerRow = sheet.getRow(0); // 获取头行对象 int lastCellNum = headerRow.getLastCellNum(); // 获取头行的单元格数量 for (int i = 0; i < lastCellNum; i++) { Cell currentCell = headerRow.getCell(i); // 获取当前单元格对象 Cell topCell = sheet.getRow(1).getCell(i); // 获取当前单元格上面的单元格对象 if (i < lastCellNum - 1) { Cell bottomCell = headerRow.getCell(i + 1); // 获取当前单元格下面的单元格对象 if (currentCell.toString().equals(topCell.toString()) && currentCell.toString().equals(bottomCell.toString())) { sheet.addMergedRegion(new CellRangeAddress(0, 1, i, i + 1)); // 合并单元格 } } } ``` 这里是一个简单的示例,具体的实现方式可以根据具体的需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值