我们使用 Excel 进行报告。作为其中一份报告的一部分,用户请求将工作表的UsedRange 子集设置为可过滤区域。也就是说,如果我在 Excel 中手动执行此操作,我会选择范围、数据菜单 > 排序和筛选 > 筛选。这将使用顶行作为标题,并向用户提供订购/排序的可用性。
我之前已经在 Excel 的开发人员模式下使用 VBA 完成了此操作,因此:
' filter on
If Not ActiveSheet.AutoFilterMode Then
ActiveSheet.UsedRange.AutoFilter
End If
我想使用 Excel Interop 在 C# 中做完全相同的事情,但是这段代码:
// make the data into a filtered area
if ((oAllDiffs.Count > 0) && (!_ws.AutoFilterMode))
_ws.Range["B8", $"T{8 + oAllDiffs.Count}"].AutoFilter();
产生错误:
{"_Range 类的 AutoFilter 方法失败"}
这不是最有用的错误消息。如何指定范围以启用排序/过滤?为了澄清,我不想实际应用排序/过滤器,只需使用可过滤/可排序的列标题设置该区域。
您需要将所有参数传递给 AutoFilter() 方法,即使文档声明您可以将它们全部省略。
if ((oAllDiffs.Count > 0) && (!_ws.AutoFilterMode))
{
Range range = _ws.Range["B8", $"T{8 + oAllDiffs.Count}"];
range.AutoFilter(1,
System.Reflection.Missing.Value,
XlAutoFilterOperator.xlAnd,
System.Reflection.Missing.Value,
true);
}