需要的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;
}
}