ClosedXML数据透视表ReportFilter多个值

时间:2017-09-07 11:12:33

标签: c# excel pivot-table closedxml

我正在处理一段代码以在Excel中生成数据透视表。

这是代码:

using (XL.XLWorkbook workbook = new XL.XLWorkbook(sourceFile))
        {
            var outSheet = workbook.Worksheets.Add("output table");
            outSheet.Cell(1, 1).InsertTable(dt, "out table", true);

            var datarange = outSheet.RangeUsed();

            var pivotSheet = workbook.Worksheets.Add("PivotTable");
            var pivotTable = pivotSheet.PivotTables.AddNew("Pivot Table", pivotSheet.Cell(3, 1), datarange);

            pivotTable.ReportFilters.Add("Filter1");
            pivotTable.ReportFilters.Add("Filter2");
            pivotTable.RowLabels.Add("RLabel");
            pivotTable.ColumnLabels.Add("CLabel");
            pivotTable.Values.Add("Value").SummaryFormula = XL.XLPivotSummary.Sum;

            workbook.SaveAs(@"C:\Temp\Test.xlsx");
        }

我如何过滤“Filter1”中的值?

例如,仅选择“未知”和“Gcom”的值。

在Excel中,数据透视过滤器如下所示:

Excel Pivot Table Report Filter

我已检查了所有的ClosedXML文档,但未提及ReportFilters功能。

Source code wiki example

请注意,此功能是否可用?

非常感谢任何建议/帮助。

1 个答案:

答案 0 :(得分:0)

不确定何时添加该功能,但我已将其添加到您的代码中:

using (XL.XLWorkbook workbook = new XL.XLWorkbook(sourceFile))
    {
        var outSheet = workbook.Worksheets.Add("output table");
        outSheet.Cell(1, 1).InsertTable(dt, "out table", true);

        var datarange = outSheet.RangeUsed();

        var pivotSheet = workbook.Worksheets.Add("PivotTable");
        var pivotTable = pivotSheet.PivotTables.AddNew("Pivot Table", pivotSheet.Cell(3, 1), datarange);

        // I was not sure how to retrieve the filter after adding, but found Add() returns it for you.
        var filter1 = pivotTable.ReportFilters.Add("Filter1");

        // Now add your filter selection.
        filter1.AddSelectedValue("Unknown");
        filter1.AddSelectedValue("GCom");

        pivotTable.ReportFilters.Add("Filter2");
        pivotTable.RowLabels.Add("RLabel");
        pivotTable.ColumnLabels.Add("CLabel");
        pivotTable.Values.Add("Value").SummaryFormula = XL.XLPivotSummary.Sum;

        workbook.SaveAs(@"C:\Temp\Test.xlsx");
    }