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的主要内容,如果未能解决你的问题,请参考以下文章
Flex 3:如何在其 ItemRenderer 中获取 DataGridColumn 的 dataField?
使用EPPlus在Excel中的列上使用文本/值着色整个行单元格