凡例の項目の色を手動で設定する方法があるかどうかは疑問です。EPPlusを使用して作成されたエクセルチャートで、伝説の色が正しくない
シリーズの色をカスタム色に変更しましたが、凡例の色は更新されません。画像を参照してください:
ここ凡例の項目の色を手動で設定する方法があるかどうかは疑問です。EPPlusを使用して作成されたエクセルチャートで、伝説の色が正しくない
シリーズの色をカスタム色に変更しましたが、凡例の色は更新されません。画像を参照してください:
ここはOPはコメントでにリンクされたコードの改良版です。あなたは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