EPPlus - сводная таблица, как отображать значения в% к общему итогу - PullRequest
1 голос
/ 03 марта 2020

При создании сводной таблицы с использованием библиотеки EPPlus мы можем добавлять поля строк с помощью функции PivotTable.RowFields.Add(...), аналогично поля данных можно добавлять с помощью функции PivotTable.DataFields.Add(...).

Проблема заключается в том, что я хочу показать значения поля данных в процентах (%) от общей суммы (см. Изображение ниже, настройка используется в реальной сводной таблице Excel). Поле данных дает только DataFieldFunctions.Sum, Count, Average et c. Но нет настройки, позволяющей отображать значение поля в% к общему итогу.

1 Ответ

0 голосов
/ 06 марта 2020

EPPlus не поддерживает функцию «Показать значение как» для полей сводных данных, но на этой странице описан хороший прием, позволяющий изменить данные XML за сводной таблицей.

Основная идея заключается в том, что вы устанавливаете функцию поля данных на сумму, а его формат отображения в процентах с помощью EPPlus, а остальные - с помощью Open XML.

Если pivotTable - это ваш Pivot, а dataField это поле данных, с которым вы работаете, чем пример кода на упомянутой странице дает следующее решение:

var xdoc = pivotTable.PivotTableXml;
var nsm = new XmlNamespaceManager(xdoc.NameTable);

var schemaMain = xdoc.DocumentElement.NamespaceURI;
if (nsm.HasNamespace("x") == false)
    nsm.AddNamespace("x", schemaMain);

var dataFieldNode = xdoc.SelectSingleNode(
    "/x:pivotTableDefinition/x:dataFields/x:dataField[@name='" + dataField.Name + "']",
    nsm
);

dataFieldNode.AppendAttribute("showDataAs", "percentOfTotal");
...