使用NPOI从Excel电子表格中删除合并单元格的值

wswtfjt7  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(162)

我使用NPOI从Excel中检索数据到文本文件中。基于Excel表格,我应该以这种方式显示数据。

Excel工作表中13/3/19的单元格跨两行合并,我不知道如何检索May的合并单元格值并显示它。有人有什么想法吗?

mklgxw1f

mklgxw1f1#

在Excel中,如果一个单元格与其他单元格合并,则合并区域中的第一个单元格是具有实际值的单元格。区域中的其他单元格为空。合并的区域保留在工作表对象中,因为它们可以跨多个行和列。
要获取该值,您需要:
1.通过查看单元格本身的IsMergedCell属性来检查当前单元格是否合并。
1.如果该单元格已合并,请在工作表上的合并区域中循环查找包含该单元格的区域。
1.找到包含区域后,从该区域获取第一个单元格。
1.从该单元格中获取值。
下面是我写的一个帮助方法,它应该可以做到这一点:

public static ICell GetFirstCellInMergedRegionContainingCell(ICell cell)
{
    if (cell != null && cell.IsMergedCell)
    {
        ISheet sheet = cell.Sheet;
        for (int i = 0; i < sheet.NumMergedRegions; i++)
        {
            CellRangeAddress region = sheet.GetMergedRegion(i);
            if (region.ContainsRow(cell.RowIndex) && 
                region.ContainsColumn(cell.ColumnIndex))
            {
                IRow row = sheet.GetRow(region.FirstRow);
                ICell firstCell = row?.GetCell(region.FirstColumn);
                return firstCell;
            }
        }
        return null;
    }
    return cell;
}

然后,当你在单元格中循环时,你可以为每个单元格调用这个方法。如果单元格被合并,它将返回具有该合并区域的值的单元格,否则它将返回原始单元格。所以你不用再去想它了。

cell = GetFirstCellInMergedRegionContainingCell(cell);
if (cell != null)
{
    // get the value
}

相关问题