2017-09-26 104 views
0

Delphi西雅图,Excel 2013.我有一个Delphi应用程序,它可以修改现有的Excel文件。如果工作表没有启用行1过滤功能(即每列中的过滤器下拉框),那么我想打开它。我知道如何打开它。问题在于'打开'确实是一个切换,所以我需要确定它是否已经打开,而我似乎无法做到这一点。代码的适用部分是:Delphi - 确定Excel是否启用了过滤器

var 
aws: ExcelWorksheet; 
begin 
... 
aws := oExcel.ActiveSheet as ExcelWorksheet; 
if aws.FilterMode[LOCALE_USER_DEFAULT] = False then 
    aws.Cells.Item[1, 1].Rows.EntireRow.AutoFilter; 

问题是我的IF语句总是返回FALSE,即使第1行启用了FILTER。我曾尝试使用msoFalse而不是False,但后来发现“不兼容类型”错误。请注意,我不想执行任何过滤,我只想显示下拉菜单以使用户更容易。我认为我的问题是,我正在检查是否实际执行了FILTER,而不是“我是否显示过滤器下拉列表”,但我不知道如何检查...

回答

3

Documentation for the FilterMode property说这个:

为了确定过滤当前是否启用(即,过滤器下拉箭头是否显示在工作表上),则使用AutoFilterMode属性。

...

此属性是如果工作表中包含一个过滤列表,其中有隐藏的行。

所以用AutoFilterMode代替。

+0

这就是它......完全错过了它。谢谢! – user1009073