Мне интересно, есть ли способ вручную установить цвета записи легенды.Цвет легенды неправильный в диаграмме Excel, созданной с использованием EPPlus
Я изменил цвета серии на собственный цвет, но цвет легенды не обновляется. Смотрите изображение:
Мне интересно, есть ли способ вручную установить цвета записи легенды.Цвет легенды неправильный в диаграмме Excel, созданной с использованием EPPlus
Я изменил цвета серии на собственный цвет, но цвет легенды не обновляется. Смотрите изображение:
Вот улучшенная версия кода, что ОП связан в комментариях. Эта версия вы передаете в цвет вы хотите (вместо этого просто используя случайные из них), чтобы SetChartPointsColor
и он установит все цвета указывают на то же самое, а также создавать и запись для легенды:
public static void SetChartPointsColor(this ExcelChart chart, int serieNumber, Color color)
{
var chartXml = chart.ChartXml;
var nsa = chart.WorkSheet.Drawings.NameSpaceManager.LookupNamespace("a");
var nsuri = chartXml.DocumentElement.NamespaceURI;
var nsm = new XmlNamespaceManager(chartXml.NameTable);
nsm.AddNamespace("a", nsa);
nsm.AddNamespace("c", nsuri);
var serieNode = chart.ChartXml.SelectSingleNode(@"c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[c:idx[@val='" + serieNumber + "']]", nsm);
var serie = chart.Series[serieNumber];
var points = serie.Series.Length;
//Add reference to the color for the legend and data points
var srgbClr = chartXml.CreateNode(XmlNodeType.Element, "srgbClr", nsa);
var att = chartXml.CreateAttribute("val");
att.Value = $"{color.R:X2}{color.G:X2}{color.B:X2}";
srgbClr.Attributes.Append(att);
var solidFill = chartXml.CreateNode(XmlNodeType.Element, "solidFill", nsa);
solidFill.AppendChild(srgbClr);
var spPr = chartXml.CreateNode(XmlNodeType.Element, "spPr", nsuri);
spPr.AppendChild(solidFill);
serieNode.AppendChild(spPr);
}
использовать его как это:
using (var pck = new ExcelPackage(fileInfo))
{
var workbook = pck.Workbook;
var worksheet = workbook.Worksheets.Add("Sheet1");
worksheet.Cells.LoadFromDataTable(datatable, true);
var chart = worksheet.Drawings.AddChart("chart test", eChartType.ColumnStacked);
chart.Series.Add(worksheet.Cells["B2:B11"], worksheet.Cells["A2:A11"]);
chart.Series.Add(worksheet.Cells["C2:C11"], worksheet.Cells["A2:A11"]);
var rand = new Random();
var color = Color.FromArgb(rand.Next(256), rand.Next(256), rand.Next(256));
chart.SetChartPointsColor(0, color);
color = Color.FromArgb(rand.Next(256), rand.Next(256), rand.Next(256));
chart.SetChartPointsColor(1, color);
pck.Save();
}
дает это на выходе:
ОТВЕТА К КОММЕНТАРИЯМ
Для серии линии было бы немного по-другому:
public static void SetLineChartColor(this ExcelChart chart, int serieNumber, Color color)
{
var chartXml = chart.ChartXml;
var nsa = chart.WorkSheet.Drawings.NameSpaceManager.LookupNamespace("a");
var nsuri = chartXml.DocumentElement.NamespaceURI;
var nsm = new XmlNamespaceManager(chartXml.NameTable);
nsm.AddNamespace("a", nsa);
nsm.AddNamespace("c", nsuri);
var serieNode = chart.ChartXml.SelectSingleNode([email protected]"c:chartSpace/c:chart/c:plotArea/c:lineChart/c:ser[c:idx[@val='{serieNumber}']]", nsm);
var serie = chart.Series[serieNumber];
var points = serie.Series.Length;
//Add reference to the color for the legend
var srgbClr = chartXml.CreateNode(XmlNodeType.Element, "srgbClr", nsa);
var att = chartXml.CreateAttribute("val");
att.Value = $"{color.R:X2}{color.G:X2}{color.B:X2}";
srgbClr.Attributes.Append(att);
var solidFill = chartXml.CreateNode(XmlNodeType.Element, "solidFill", nsa);
solidFill.AppendChild(srgbClr);
var ln = chartXml.CreateNode(XmlNodeType.Element, "ln", nsa);
ln.AppendChild(solidFill);
var spPr = chartXml.CreateNode(XmlNodeType.Element, "spPr", nsuri);
spPr.AppendChild(ln);
serieNode.AppendChild(spPr);
}
Спасибо, это здорово! Последующий вопрос: как это работает для линейного графика? Я обновил xml, чтобы выбрать «c: barChart /», но он не изменит цвета по умолчанию. – user1854458
@ user1854458 Смотрите мои правки выше. – Ernie
Может хотите разместить код, который вы использовали. – Ernie
Я использую код этого сообщения, кажется, что автор не учитывал цвет легенды. http://stackoverflow.com/questions/34356874/epplus-columnstacked-chart-data-point-colors – user1854458