确定用户是否过滤了行

时间:2014-11-18 21:27:43

标签: excel delphi

我写了一个Excel插件。一切都运转良好,达到一定程度。假设我正在迭代所有行,做一些工作......用户可能启用了一个过滤器,以便当前行由于该过滤器而不可见。如何确定不应处理哪些数据,因为它们因过滤器而不可见?

2 个答案:

答案 0 :(得分:2)

找到答案。似乎没有row.filtered属性。有一个隐藏属性,但它是在范围而不是行。

解决方案:根据整行构建范围,然后选中隐藏属性。

function IsRowVisible(RowNum: Integer): Boolean;
var
  FilterRange: OleVariant;
  RangeText: String;
begin
  RangeText := 'A' + IntToStr(RowNum);
  // aws is my activesheet
  FilterRange := aws.Range[RangeText, RangeText].EntireRow;
  Result := not(FilterRange.EntireRow.Hidden);
end;

答案 1 :(得分:0)

上一个答案的决定对我没有用,所以我通过使用 aSheet.Rows [RowNum] .Hidden 属性找到了另一个更简单的解决方案:

function IsRowVisible(aSheet: OLEVariant; aRowNum: Integer): Boolean;
begin
  Result := not aSheet.Rows[aRowNum].Hidden;
end;

在此功能 aSheet - excel工作表和 aRowNum - 行号。相同的解决方案可用于列。