查找哪些单元格应用了下拉过滤器 - Interop Excel
Find which cells have a dropdown filter applied - Interop Excel
我正在尝试检查工作表是否有任何过滤器(无论是否应用),如果有,我想找出哪些单元格或行具有过滤器功能。
我试过:
var filter = ((dynamic) range.AutoFilter(rowStart, j);
还有这个看整张工作表有没有
var range = workbookWorksheet.UsedRange;
var sheet= application.ActiveWindow.ActiveSheet;
Range filteredRange = range.SpecialCells(XlCellType.xlCellTypeVisible, XlSpecialCellsValue.xlTextValues);
var sdsds = filteredRange.AutoFilter();
尝试在没有 Plus 或 Interop 以外的其他库的情况下执行此操作。不确定这是否可行,但我们将不胜感激。
您可以使用 AutoFilter 属性 检查 Worksheet
中是否有过滤器。
为了获取地址,您需要遍历过滤器。
使用过滤器的 On 属性 检查是否为 on/off.
// check if there are filters in the worksheet.
if (workbookWorksheet.AutoFilter == null ||
workbookWorksheet.AutoFilter.Filters.Count == 0)
{
// no filters
return;
}
// go over the filters and get the addresses
for (var i = 1; i < ws.AutoFilter.Filters.Count; i++)
{
var filter = ws.AutoFilter.Filters[i];
Console.WriteLine(filter.On); // print/check if the filter is on.
Range range = ws.AutoFilter.Range[1, i];
Console.WriteLine(range.Address); // address of the filter cell
}
更新:
不确定这是最有效的方法,但它可以完成工作。
此函数将范围作为参数并检查它是否具有过滤器,如果过滤器打开,则 returns 为真。
注意:如果您更喜欢使用绝对地址,请将参数更改为字符串地址。
private bool HasFilterOn(Range range)
{
// check if there are filters in the worksheet.
if (workbookWorksheet.AutoFilter == null ||
workbookWorksheet.AutoFilter.Filters.Count == 0)
{
// no filters
return false;
}
// go over the filters and get the addresses
for (var i = 1; i < workbookWorksheet.AutoFilter.Filters.Count; i++)
{
var filter = workbookWorksheet.AutoFilter.Filters[i];
if (workbookWorksheet.AutoFilter.Range[1, i].Address == range.Address)
return filter.On;
}
return false;
}
我正在尝试检查工作表是否有任何过滤器(无论是否应用),如果有,我想找出哪些单元格或行具有过滤器功能。
我试过:
var filter = ((dynamic) range.AutoFilter(rowStart, j);
还有这个看整张工作表有没有
var range = workbookWorksheet.UsedRange;
var sheet= application.ActiveWindow.ActiveSheet;
Range filteredRange = range.SpecialCells(XlCellType.xlCellTypeVisible, XlSpecialCellsValue.xlTextValues);
var sdsds = filteredRange.AutoFilter();
尝试在没有 Plus 或 Interop 以外的其他库的情况下执行此操作。不确定这是否可行,但我们将不胜感激。
您可以使用 AutoFilter 属性 检查 Worksheet
中是否有过滤器。
为了获取地址,您需要遍历过滤器。 使用过滤器的 On 属性 检查是否为 on/off.
// check if there are filters in the worksheet.
if (workbookWorksheet.AutoFilter == null ||
workbookWorksheet.AutoFilter.Filters.Count == 0)
{
// no filters
return;
}
// go over the filters and get the addresses
for (var i = 1; i < ws.AutoFilter.Filters.Count; i++)
{
var filter = ws.AutoFilter.Filters[i];
Console.WriteLine(filter.On); // print/check if the filter is on.
Range range = ws.AutoFilter.Range[1, i];
Console.WriteLine(range.Address); // address of the filter cell
}
更新: 不确定这是最有效的方法,但它可以完成工作。 此函数将范围作为参数并检查它是否具有过滤器,如果过滤器打开,则 returns 为真。
注意:如果您更喜欢使用绝对地址,请将参数更改为字符串地址。
private bool HasFilterOn(Range range)
{
// check if there are filters in the worksheet.
if (workbookWorksheet.AutoFilter == null ||
workbookWorksheet.AutoFilter.Filters.Count == 0)
{
// no filters
return false;
}
// go over the filters and get the addresses
for (var i = 1; i < workbookWorksheet.AutoFilter.Filters.Count; i++)
{
var filter = workbookWorksheet.AutoFilter.Filters[i];
if (workbookWorksheet.AutoFilter.Range[1, i].Address == range.Address)
return filter.On;
}
return false;
}