c# Excel Interop 如何在不应用过滤器的情况下设置过滤区域

问题描述 投票:0回答:1

我们使用 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 方法失败"}

这不是最有用的错误消息。如何指定范围以启用排序/过滤?为了澄清,我不想实际应用排序/过滤器,只需使用可过滤/可排序的列标题设置该区域。

c# excel filter excel-interop
1个回答
0
投票

您需要将所有参数传递给 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);
}
© www.soinside.com 2019 - 2024. All rights reserved.