我使用NPOI从Excel中检索数据到文本文件中。基于Excel表格,我应该以这种方式显示数据。
Excel工作表中13/3/19的单元格跨两行合并,我不知道如何检索May的合并单元格值并显示它。有人有什么想法吗?
13/3/19
May
mklgxw1f1#
在Excel中,如果一个单元格与其他单元格合并,则合并区域中的第一个单元格是具有实际值的单元格。区域中的其他单元格为空。合并的区域保留在工作表对象中,因为它们可以跨多个行和列。要获取该值,您需要:1.通过查看单元格本身的IsMergedCell属性来检查当前单元格是否合并。1.如果该单元格已合并,请在工作表上的合并区域中循环查找包含该单元格的区域。1.找到包含区域后,从该区域获取第一个单元格。1.从该单元格中获取值。下面是我写的一个帮助方法,它应该可以做到这一点:
IsMergedCell
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 }
1条答案
按热度按时间mklgxw1f1#
在Excel中,如果一个单元格与其他单元格合并,则合并区域中的第一个单元格是具有实际值的单元格。区域中的其他单元格为空。合并的区域保留在工作表对象中,因为它们可以跨多个行和列。
要获取该值,您需要:
1.通过查看单元格本身的
IsMergedCell
属性来检查当前单元格是否合并。1.如果该单元格已合并,请在工作表上的合并区域中循环查找包含该单元格的区域。
1.找到包含区域后,从该区域获取第一个单元格。
1.从该单元格中获取值。
下面是我写的一个帮助方法,它应该可以做到这一点:
然后,当你在单元格中循环时,你可以为每个单元格调用这个方法。如果单元格被合并,它将返回具有该合并区域的值的单元格,否则它将返回原始单元格。所以你不用再去想它了。