困扰无数人的 POI 读取合并单元格内容难题,终于有解了

POI读取合并单元格内容

产品们想到的excel真是千奇百怪,这次又遇到一个读取包含合并单元格的excel文件,一开始直接读取,直接报空了,没办法,只能对于这些列进行判断是否为合并单元格

java 复制代码
private boolean isMergedRegion(Sheet sheet, int row, int column) {
    int sheetMergeCount = sheet.getNumMergedRegions();
    for (int i = 0; i < sheetMergeCount; i++) {
        CellRangeAddress range = sheet.getMergedRegion(i);
        int firstColumn = range.getFirstColumn();
        int lastColumn = range.getLastColumn();
        int firstRow = range.getFirstRow();
        int lastRow = range.getLastRow();
        if (row >= firstRow && row <= lastRow) {
            if (column >= firstColumn && column <= lastColumn) {
                return true;
            }
        }
    }
    return false;
}

如果是合并单元格的话,使用单独的方法来进行读取

java 复制代码
public String getMergedRegionValue(Sheet sheet, int row, int column) {
    int sheetMergeCount = sheet.getNumMergedRegions();
    for (int i = 0; i < sheetMergeCount; i++) {
        CellRangeAddress ca = sheet.getMergedRegion(i);
        int firstColumn = ca.getFirstColumn();
        int lastColumn = ca.getLastColumn();
        int firstRow = ca.getFirstRow();
        int lastRow = ca.getLastRow();
        if (row >= firstRow && row <= lastRow) {
            if (column >= firstColumn && column <= lastColumn) {
                Row fRow = sheet.getRow(firstRow);
                Cell fCell = fRow.getCell(firstColumn,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
                return fCell.toString();
            }
        }
    }

    return null;
}

参考文献

相关推荐
PBitW6 小时前
掘金活动助手!帮拉P
程序员·投资
加个鸡腿儿7 小时前
01实战案例:「新手向」如何将原始数据转换为前端可用选项?
前端·程序员
深度学习小白8 小时前
安装ModuleNotFoundError: No module named 'skimage'报错
程序员
京东云开发者8 小时前
【前瞻技术布局】京东零售广告创意:引入场域目标的创意图片生成
程序员
京东云开发者8 小时前
【达达秒送】AI运营视觉设计实战总结
程序员
程序员鱼皮10 小时前
历时 8 年,我冲上开源榜前 8 了!
程序员·开源·github
Phodal10 小时前
成为超级个体:AI 时代研发人员的编程技巧与最佳实践
人工智能·程序员·ai 编程
ssshooter11 小时前
超越 70%:最大化 AI 开发中不可或缺的 30%
人工智能·程序员·ai 编程