delphi – 确定如果Excel启用筛选器

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

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,即使第一行启用了FILTER。 我曾尝试使用msoFalse而不是False,但随后出现“不兼容的types”错误。 请注意,我不想执行任何过滤,我只是想显示下拉菜单,以使用户更容易。 我想我的问题是,我正在检查,看看是否实际上是一个filter,而不是“我是否显示filter下拉列表”,但我不知道如何检查…

FilterMode属性的文档说明了这一点:

要确定当前是否启用筛选(即筛选器下拉箭头是否显示在工作表上),请使用AutoFilterMode属性。

如果工作表包含有隐藏行的已过滤列表,则此属性为true

所以改用AutoFilterMode