EPPlus 在 DataField 上排序数据透视表,而不仅仅是 RowField

Posted

技术标签:

【中文标题】EPPlus 在 DataField 上排序数据透视表,而不仅仅是 RowField【英文标题】:EPPlus Sort Pivot Table on DataField instead of just RowField 【发布时间】:2014-10-07 09:20:05 【问题描述】:

我使用 EPPlus 工具包 3.1 版在工作表中创建了 Excel 数据透视表。我能够在行字段上对结果表进行排序,但希望能够在数据字段上进行排序。例如,我从这里下载了 3.1 的源代码:

EEPlus 3.1 Source Code

其中有一个名为 CreatePivotTable() 的单元测试。它包含一个“数据”选项卡,如下所示:

var ws = _pck.Workbook.Worksheets.Add("Data");
ws.Cells["K1"].Value = "Item";
ws.Cells["L1"].Value = "Category";
ws.Cells["M1"].Value = "Stock";
ws.Cells["N1"].Value = "Price";
ws.Cells["O1"].Value = "Date for grouping";
...

然后测试添加 9 个数据透视表工作表。看第一个,代码是这样的:

var pt = wsPivot1.PivotTables.Add(wsPivot1.Cells["A1"], ws.Cells["K1:N11"], "Pivottable1");
pt.GrandTotalCaption = "Total amount";
pt.RowFields.Add(pt.Fields[1]);
pt.RowFields.Add(pt.Fields[0]);
pt.DataFields.Add(pt.Fields[3]);
pt.DataFields.Add(pt.Fields[2]);
pt.DataFields[0].Function = DataFieldFunctions.Product;
pt.DataOnRows = false;

按原样,没有排序。如果我对主数据透视字段集合的第一个字段应用排序,这也是它工作的两个行字段中的第二个:

pt.Fields[0].Sort = eSortType.Descending;

但是,如果我想对其中一个 DataField 进行排序(都指向“价格”:

pt.Fields[2].Sort = eSortType.Descending;
//or
pt.DataFields[0].Field.Sort = eSortType.Ascending;

排序不适用。如果我在 excel 中执行并手动添加它,它工作正常。另外,我在另一个项目中使用 NetOffice,它也可以。这还不是 EPPLus 可以做的吗?

【问题讨论】:

【参考方案1】:

我遇到了同样的问题并找到了解决方案。如果有人在搜索它,希望它会有所帮助:)

var rowField = pivotTable.RowFields.Add(pivotTable.Fields[rowFieldName]);
// or var rowField = pivotTable.Fields[rowFieldName]; if rowField is already added
var dataField = pivotTable.DataFields.Add(pivotTable.Fields[dataFieldName]);
rowField.SetAutoSort(dataField, eSortType.Ascending);
rowField.Items.Refresh();

参考:https://epplussoftware.com/en/Developers/SortingRangesAndTables

【讨论】:

以上是关于EPPlus 在 DataField 上排序数据透视表,而不仅仅是 RowField的主要内容,如果未能解决你的问题,请参考以下文章

将非属性绑定到数据网格列 DataField?

VB中,Datafield是啥意思?

Flex 3:如何在其 ItemRenderer 中获取 DataGridColumn 的 dataField?

使用EPPlus在Excel中的列上使用文本/值着色整个行单元格

C# NPOI导出Excel和EPPlus导出Excel比较

epplus 导出excel怎么设置excel表头