我使用EPPlus在excel中创建一个数据透视表,但我希望在一个我的DataFields中显示数据占总数的百分比,我该怎么做?
public static void createTableMotivo(Worksheet ws, ExcelRangeBase range)
{
const string FORMATCURRENCY = "#,###;[Red](#,###)";
ExcelWorksheet worksheet = ws.EPPlusSheet;
//The pivot table
ExcelPivotTable pivotTable = worksheet.PivotTables.Add(worksheet.Cells["B12"], range, "pivot_table1");
//The label row field
pivotTable.RowFields.Add(pivotTable.Fields["FIELD1"]);
pivotTable.DataOnRows = false;
pivotTable.ShowCalcMember = true;
//The data fields
ExcelPivotTableDataField fieldSum = pivotTable.DataFields.Add(pivotTable.Fields["FIELD2"]);
fieldSum.Name = "Quantidade de Faturas";
fieldSum.Function = DataFieldFunctions.Sum;
fieldSum.Format = FORMATCURRENCY;
ExcelPivotTableDataField fieldPercent = pivotTable.DataFields.Add(pivotTable.Fields["FIELD2"]);
fieldPercent.Name = "%";
fieldPercent.Function = DataFieldFunctions.None;
fieldPercent.Format = "0.00%";
pivotTable.PageFields.Add(pivotTable.Fields["FIELD3"]);
pivotTable.PageFields.Add(pivotTable.Fields["FIELD4"]);
}
答案 0 :(得分:0)
我正在尝试做类似的事情。我能让它工作的唯一方法是操作Excel文件的xml。
这本身很有趣 - 我不记得在哪里我看到你可以将.xlsx重命名为.zip然后只查看该zip中的所有xml文件。
就我而言,我首先在实际Excel文件的数据透视表上将“显示值为”设置为“总计百分比”。然后在将文件扩展名从.xlsx更改为.zip并解压缩之后,有一个pivotTable3.xml文件包含:
<dataFields count="2">
<dataField name="Number of Orders" fld="10" subtotal="count"/>
<dataField name="Percent of Total" fld="10" subtotal="count" showDataAs="percentOfTotal" numFmtId="10"/>
</dataFields>
目标是在名称为showDataAs="percentOfTotal"
的{{1}}元素中获取dataField
。
我尝试使用xpath表达式来获取"Percent of Total"
元素,但它返回dataField
:
null
所以我不得不退回到xml:
pivotTable.PivotTableXml.SelectSingleNode("//dataField[name='Percent of Total']")