How to display percentages with decimals in an Epplus Pie chart?

佐手、 提交于 2019-12-02 08:23:56

问题


In a EPPLUS Pie chart, the percentages are rounded automatically by default, how can I display them with 2 decimals programatically (10.75 instead of 11) ?

I only provide the values (integers) and the percentages are calculated automatically by the component.


回答1:


Dont really see an option in EPPlus to set it - would have to be on the Serie.DataLabel object.

Looks like it has to be done via XML. Here is an example of how to do it (might have to be tweaked for different chart types):

[TestMethod]
public void PieChartDataLabelPercent()
{
    //http://stackoverflow.com/questions/42393711/how-to-display-percentages-with-decimals-in-an-epplus-pie-chart
    var file = new FileInfo(@"c:\temp\PieChartDataLabelPercent.xlsx");
    if (file.Exists)
        file.Delete();

    var pck = new ExcelPackage(file);
    var workbook = pck.Workbook;
    var worksheet = workbook.Worksheets.Add("newsheet");

    var rand = new Random();
    var data = new List<KeyValuePair<string, int>>();
    for (var i = 0; i < 10; i++)
        data.Add(new KeyValuePair<string, int>($"Group {i}", rand.Next(10, 100)));

    //Fill the table
    var startCell = worksheet.Cells[1, 1];
    startCell.Offset(0, 0).Value = "Group Name";
    startCell.Offset(0, 1).Value = "Group Value";
    startCell.Offset(1, 0).LoadFromCollection(data);

    //Add the chart to the sheet
    var pieChart = worksheet.Drawings.AddChart("Chart1", eChartType.Pie);
    pieChart.SetPosition(data.Count + 1, 0, 0, 0);
    pieChart.SetSize(500, 400);
    pieChart.Title.Text = "Test Chart";

    //Set the data range
    var series = pieChart.Series.Add(worksheet.Cells[2, 2, data.Count + 1, 2], worksheet.Cells[2, 1, data.Count + 1, 1]);
    var pieSeries = (ExcelPieChartSerie)series;
    pieSeries.Explosion = 5;

    //Format the labels
    pieSeries.DataLabel.ShowValue = true;
    pieSeries.DataLabel.ShowPercent = true;
    pieSeries.DataLabel.ShowLeaderLines = true;
    pieSeries.DataLabel.Separator = ";  ";
    pieSeries.DataLabel.Position = eLabelPosition.BestFit;

    var xdoc = pieChart.ChartXml;
    var nsuri = xdoc.DocumentElement.NamespaceURI;
    var nsm = new XmlNamespaceManager(xdoc.NameTable);
    nsm.AddNamespace("c", nsuri);

    //Added the number format node via XML
    var numFmtNode = xdoc.CreateElement("c:numFmt", nsuri);

    var formatCodeAtt = xdoc.CreateAttribute("formatCode", nsuri);
    formatCodeAtt.Value = "0.00%";
    numFmtNode.Attributes.Append(formatCodeAtt);

    var sourceLinkedAtt = xdoc.CreateAttribute("sourceLinked", nsuri);
    sourceLinkedAtt.Value = "0";
    numFmtNode.Attributes.Append(sourceLinkedAtt);

    var dLblsNode = xdoc.SelectSingleNode("c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dLbls", nsm);
    dLblsNode.AppendChild(numFmtNode);


    //Format the legend
    pieChart.Legend.Add();
    pieChart.Legend.Position = eLegendPosition.Right;

    pck.Save();

}

Which gives this in the output:



来源:https://stackoverflow.com/questions/42393711/how-to-display-percentages-with-decimals-in-an-epplus-pie-chart

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!