2

要创建数据透视表,需要提供用于生成数据透视表的源数据。

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

在此处输入图像描述

我需要从该数据生成一个数据透视表,以便像这样生成它:

在此处输入图像描述

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
} 

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

在此处输入图像描述

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

4

1 回答 1

2

试试这个:

像往常一样创建整个PivotTable,并在添加所有必需的字段和计算后,移动DataPivotFieldsas RowFields

在 VBA 中会是这样的:

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

还需要应用这个:PivotTable.MergeLabels = TrueDescription所有相应的总数合并单元格。

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

于 2016-10-14T20:47:00.097 回答