Java POI单元格使用心得

本文介绍了一个用于处理Excel中合并单元格的Java类MergeRegion及其使用方法。通过该类可以获取单元格信息,并判断是否为合并单元格。此外,还提供了一个静态方法getCellValue,用于获取指定单元格的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1:

/**
 * Created by liuguangxin on 2018/5/16.
 * <p>
 * MergeRegion:表示excel中cell的信息,startRow与endRow表示当前cell的起始与结束行编号(base 1),
 * startCol与endCol同理表示列的起始与结束列编号(base 1)<p/>
 */
public class MergeRegion {

    @Override
    public String toString() {
        return "[ " +
                "merged=" + merged +
                ", startRow=" + startRow +
                ", endRow=" + endRow +
                ", startCol=" + startCol +
                ", endCol=" + endCol +
                "] ";
    }


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        MergeRegion result = (MergeRegion) o;

        if (merged != result.merged) return false;
        if (startRow != result.startRow) return false;
        if (endRow != result.endRow) return false;
        if (startCol != result.startCol) return false;
        return endCol == result.endCol;
    }

    @Override
    public int hashCode() {
        int result = (merged ? 1 : 0);
        result = 31 * result + startRow;
        result = 31 * result + endRow;
        result = 31 * result + startCol;
        result = 31 * result + endCol;
        return result;
    }

    public boolean merged;
    public int startRow;
    public int endRow;
    public int startCol;
    public int endCol;

    public MergeRegion(boolean merged, int startRow, int endRow
            , int startCol, int endCol) {
        this.merged = merged;
        this.startRow = startRow;
        this.endRow = endRow;
        this.startCol = startCol;
        this.endCol = endCol;
    }
}

  

获取单元格的之,包含是否是合并的情况:

 /**
     * @param sheet
     * @param rowIndex
     * @param columnIndex
     * @return 返回指定cell对应的值,否则返回null
     */
    public static String getCellValue(Sheet sheet, int rowIndex, int columnIndex) {

        MergeRegion region = isMergedRegion(sheet, rowIndex, columnIndex);
        if (region.merged) {
            //  |——————————————————————
            //  |     |       |       |
            //  |——————————————————————
            //  |     |       |       |
            //  |——————————————————————
            //  |     |       |       |
            //  |——————————————————————
            // 对于如上3*3的表格合并之后,只有获取相对3*3表格内 (0,0)的位置才会获取到数据,
            // 因此对于如果获取的是合并cell的值的话需要转换rowIndex,columnIndex为相对表格内的(0,0)处
            rowIndex = region.startRow - 1;
            columnIndex = region.startCol - 1;
        }
        Row row = sheet.getRow(rowIndex);
        Cell cell;
        if (Objects.nonNull(row) && (cell = row.getCell(columnIndex)) != null) {
            cell.setCellType(CellType.STRING);
            return deleteEnterChar(cell.getStringCellValue());
        }

        return null;
    }

  

 

转载于:https://www.cnblogs.com/leodaxin/p/9133337.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值