ClosedXML 如何获取数据透视表区域及最后使用行号?
ClosedXML 获取数据透视表最后一行行号的实现方法
你之前尝试的两种方法存在以下问题:
mysheet.LastRowUsed().RowNumber()返回的是整个工作表的最后使用行,若透视表外还有其他填充内容,会导致返回结果偏大,无法精准对应透视表本身的范围mypivot.TargetCell.Address.RowNumber仅返回透视表放置的起始单元格行号,和实际占用的最后一行无关
ClosedXML 中对应 Office 对象模型 PivotTable.TableRange2 的属性为 IXLPivotTable.TableRange,该属性会返回包含页筛选区域、行标签、列标签、数据区域在内的整个透视表范围,直接读取该范围的最后一行行号即可,示例代码如下:
// 获取包含完整透视表区域的最后一行行号 int pivotLastRow = mypivot.TableRange.LastRow().RowNumber();
如果你不需要统计顶部的页筛选区域,仅需要获取数据主体区域(对应 Office 对象模型 PivotTable.TableRange1)的最后一行,可以使用DataBodyRange属性:
// 仅获取透视表数据主体部分的最后一行行号 int pivotDataLastRow = mypivot.DataBodyRange.LastRow().RowNumber();
建议增加空判断避免空引用异常,适配透视表无数据的场景:
int GetPivotLastRow(IXLPivotTable pivot) { if (pivot.TableRange != null) { return pivot.TableRange.LastRow().RowNumber(); } // 空透视表返回起始放置行号 return pivot.TargetCell.Address.RowNumber; }
内容的提问来源于stack exchange,提问作者Dario Perez
相关产品推荐
相关产品推荐

