带有PercentOfTotal的EPPlus DataField

时间:2018-01-04 18:45:12

标签: excel pivot-table epplus

我使用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"]);
}

1 个答案:

答案 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']")