如何在 Epplus 饼图中显示带小数点的百分比?

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

在 EPPLUS 饼图中,默认情况下百分比会自动四舍五入,我如何以编程方式将它们显示为两位小数(10.75 而不是 11)?

我只提供数值(整数),百分比由组件自动计算。

在 EPPlus 中没有真正看到设置它的选项 - 必须在 Serie.DataLabel 对象上。

看起来必须通过 XML 完成。这是一个如何操作的示例(可能需要针对不同的图表类型进行调整):

[TestMethod]
public void PieChartDataLabelPercent()
{
    //
    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();

}

这在输出中给出了这个: