如何使用EPPlus创建数据透视表来过滤一列中的行以及一组列?

时间:2016-10-11 19:05:17

标签: excel pivot-table epplus epplus-4

要创建数据透视表,需要提供源数据以从中生成数据透视表。

我为此目的生成了一个“虚拟”表,其中包含原始数据,如:

enter image description here

我需要从该数据生成数据透视表,以便生成如下:

enter image description here

IOW,它需要在“描述”列上有一个过滤器,允许过滤行(仅显示“Peppers”或其他)和过滤器,在哪个月份列上显示(工作表最多可以有13个)月份列(9月15日,10月15日等))以便用户可以选择1月13日的那些“月份”列进行显示(从技术上讲,他们可以选择0,但重点是什么?)

如何做到这一点?我尝试了以下内容:

private void AddPivotTable()
{
    var dataRange 
rawDataWorksheet.Cells[rawDataWorksheet.Dimension.Address];
    dataRange.AutoFitColumns();
    var pivotTable 
usagePivotWorksheet.PivotTables.Add(usagePivotWorksheet.Cells["A6"]
dataRange, "ProdUsagePivot");
    pivotTable.MultipleFieldFilters = true;
    pivotTable.GridDropZones = false;
    pivotTable.Outline = false;
    pivotTable.OutlineData = false;
    pivotTable.ShowError = true;
    pivotTable.ErrorCaption = "[error]";
    pivotTable.ShowHeaders = true;
    pivotTable.UseAutoFormatting = true;
    pivotTable.ApplyWidthHeightFormats = true;
    pivotTable.ShowDrill = true;

    var descPageField = pivotTable.Fields["Description"];
    pivotTable.PageFields.Add(descPageField);
    descPageField.Sort
OfficeOpenXml.Table.PivotTable.eSortType.Ascending;

    var descRowField = pivotTable.Fields["Description"];
    pivotTable.RowFields.Add(descRowField);

    . . . add others later
} 

...但只获得“描述”的过滤器,其下方没有数据:

enter image description here

我还需要做些什么来获得所需的外观/功能?

1 个答案:

答案 0 :(得分:2)

试试这个:

照常创建整个PivotTable,在添加所有必填字段和计算后,将DataPivotFields移至RowFields

在VBA中会是这样的:

With PivotTable
    .DataPivotField.Orientation = xlRowField
    .Position = 2
End With

还需要应用此选项:PivotTable.MergeLabels = True以便为所有相应的总计合并Description单元格。

PD。将PivotTable替换为代码中的数据透视表对象