Delphi Seattle,Excel 2013.我有一个Delphi应用程序,它修改了现有的Excel文件。如果工作表没有启用第1行过滤(也就是每列上的过滤器下拉框),那么我想打开它。我知道怎么打开它。问题是“打开它”实际上是一个切换,所以我需要确定它已经开启,我似乎无法做到。适用的代码部分是:
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,而不是“我是否显示过滤器下拉列表”,但我不知道如何检查......
答案 0 :(得分:3)
Documentation for the FilterMode
property说:
要确定当前是否启用了过滤(即,过滤器下拉箭头是否显示在工作表上),请使用AutoFilterMode属性。
...
如果工作表包含已隐藏行的已过滤列表,则此属性为 true 。
所以请改用AutoFilterMode
。