如何在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
相关产品推荐
相关产品推荐

