如何使用 EPPlus 创建数据透视表以筛选一列中的行以及一组列?
How can I create a PivotTable using EPPlus to filter on the rows in one column and also a set of columns?
要创建数据透视表Table,需要提供生成数据透视表的源数据Table。
我为此生成了一个 "dummy" sheet,其中包含原始数据,例如:
我需要从该数据生成一个 Pivot Table,以便它像这样生成:
IOW,它需要在 "Description" 列上有一个过滤器,允许过滤行(只显示 "Peppers" 或其他)和一个过滤器,用于显示月份列( sheet 最多可以有 13 个月的列(9 月 15 日、10 月 15 日等)),这样用户可以选择 "month year" 列中的 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
}
...但只获取 "Description" 的过滤器,下面没有数据:
我还需要做什么才能得到想要的 appearance/functionality?
试试这个:
照常创建整个 PivotTable
,并在添加所有必填字段和计算后,将 DataPivotFields
移动为 RowFields
。
在VBA中会是这样的:
With PivotTable
.DataPivotField.Orientation = xlRowField
.Position = 2
End With
还需要应用:PivotTable.MergeLabels = True
合并 Description
单元格以获得所有相应的总计。
PD。用代码中的数据透视表对象替换数据透视表
要创建数据透视表Table,需要提供生成数据透视表的源数据Table。
我为此生成了一个 "dummy" sheet,其中包含原始数据,例如:
我需要从该数据生成一个 Pivot Table,以便它像这样生成:
IOW,它需要在 "Description" 列上有一个过滤器,允许过滤行(只显示 "Peppers" 或其他)和一个过滤器,用于显示月份列( sheet 最多可以有 13 个月的列(9 月 15 日、10 月 15 日等)),这样用户可以选择 "month year" 列中的 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
}
...但只获取 "Description" 的过滤器,下面没有数据:
我还需要做什么才能得到想要的 appearance/functionality?
试试这个:
照常创建整个 PivotTable
,并在添加所有必填字段和计算后,将 DataPivotFields
移动为 RowFields
。
在VBA中会是这样的:
With PivotTable
.DataPivotField.Orientation = xlRowField
.Position = 2
End With
还需要应用:PivotTable.MergeLabels = True
合并 Description
单元格以获得所有相应的总计。
PD。用代码中的数据透视表对象替换数据透视表