You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C# EPPlus/OfficeOpenXML堆叠柱状图中添加百分比文本

堆叠柱状图添加组间百分比文本的EPPlus/OfficeOpenXML解决方案

我需要给堆叠柱状图的每组标签(比如PDD1)对应的两组柱子中间位置,展示该标签的百分比值(这个百分比不属于任何单根柱子,是组级别的统计值)。

已经在数据里添加了百分比记录,但没法实现两个关键需求:一是隐藏百分比相关的图例,二是把百分比显示在每个标签区域的顶部中间位置。之前试过相关方案,但发现OfficeOpenXml.Drawing.Chart里没有LoadEntries方法,仅有的Entries属性是只读的。

编辑1:图表数据与代码示例

以下是我的数据结构和C#实现代码:

dynamic DataList5 = new
{
    label = new List<string>() { "PDD1", "PDD2", "PDD3" },
    modeler = new { Category1 = new List<int>() { 1, 1, 1 }, Category2 = new List<int>() { 0, 0, 0 } },
    tester = new { Category1 = new List<int>() { 2, 2, 2 }, Category2 = new List<int>() { 2, 2, 2 } },
    percentage = new List<int>() { 150, 200, 10 }
};


if (DataList5.label.Count > 0)
{
    int j = 0;
    for (int i = 0; i < DataList5.label.Count * 2; i++)
    {
        if (i % 2 == 0)
        {
            ws2.Cells[i + 2, 2].Value = DataList5.label[j];
            ws2.Cells[i + 2, 3].Value = "Category 1";
            ws2.Cells[i + 2, 4].Value = DataList5.modeler.Category1[j];
            ws2.Cells[i + 2, 5].Value = DataList5.tester.Category1[j];
            ws2.Cells[i + 2, 6].Value = DataList5.percentage[j];
        }
        else
        {
            ws2.Cells[i + 2, 3].Value = "Category 2";
            ws2.Cells[i + 2, 4].Value = DataList5.modeler.Category2[j];
            ws2.Cells[i + 2, 5].Value = DataList5.tester.Category2[j];
            j++;
        }
    }
}
else
{
    ws2.Cells[2, 2].Value = "No Data Found";
}
var chart1 = ws1.Drawings.AddChart("chart1", eChartType.ColumnStacked);
chart1.SetPosition(1, 0, 0, 0);
chart1.SetSize(1800, 400);
chart1.Style = eChartStyle.Style12;

if (DataList5.label.Count > 0)
{
    var series1 = chart1.Series.Add(ws2.Cells["D2:D" + (DataList5.label.Count * 2 + 1)], ws2.Cells["B2:C" + (DataList5.label.Count * 2 + 1)]);
    var series2 = chart1.Series.Add(ws2.Cells["E2:E" + (DataList5.label.Count * 2 + 1)], ws2.Cells["B2:C" + (DataList5.label.Count * 2 + 1)]);
//percentage series
    //var series3 = chart1.Series.Add(ws2.Cells["F2:F" + (DataList5.label.Count * 2 + 1)], ws2.Cells["B2:C" + (DataList5.label.Count * 2 + 1)]);


    series1.Fill.Color = Color.FromArgb(255, 0, 112, 192);
    series2.Fill.Color = Color.FromArgb(255, 239, 125, 49);

//Show percentage for each PDD1 label
    ////chart1.Legend.LoadEntries(chart1.Legend.LegendEntries().Count).Delete();

    series1.Header = "Modeler";
    series2.Header = "Tester";
    //series3.Header = "Percentage";

}
else
{
    var series1 = chart1.Series.Add(ws2.Cells["B2:C" + (DataList1.label.Count + 1)], ws2.Cells["B2:C" + (DataList1.label.Count + 1)]);
}
chart1.Title.Text = "Stacked bar chart example";

当前图表已生成,但百分比的展示问题仍未解决。

编辑2:核心需求明确

我现在的核心需求是:通过添加文本框的方式,在每个标签对应的两组柱子中间位置展示百分比值。请问有没有基于C# EPPlus或OfficeOpenXML的可行解决方案?


内容的提问来源于stack exchange,提问作者rock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 08:09:58