EPPlus如何在EXCEL中更改PIE图表的颜色 [英] EPPlus how to change colors of PIE Chart in EXCEL

查看:161
本文介绍了EPPlus如何在EXCEL中更改PIE图表的颜色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用EPPlus以编程方式更改Excel饼图的默认颜色。

How to change the default colors of Excel Pie Chart using EPPlus programatically.

以下是我的代码

var pieChart = worksheet.Drawings.AddChart("piechart", eChartType.Pie3D) as ExcelPieChart;
            //Set top left corner to row 1 column 2
            pieChart.SetPosition(18, 0, 0, 0);
            pieChart.SetSize(350, 300);
            pieChart.Series.Add(ExcelRange.GetAddress(12, 2, 15, 2),ExcelRange.GetAddress(12, 1, 15, 1) );
            pieChart.Legend.Position = eLegendPosition.Bottom;
            pieChart.Legend.Border.Fill.Color = Color.Green;
            pieChart.Legend.Border.LineStyle = eLineStyle.Solid;              
            pieChart.Legend.Border.Fill.Style = eFillStyle.SolidFill;
            pieChart.Title.Text = "Current Status";               
            pieChart.DataLabel.ShowCategory = false;
            pieChart.DataLabel.ShowPercent = true;

我想将默认颜色更改为一些明亮的颜色。

I want to change the default colors to the some bright colors.

建议并对此加以说明。

推荐答案

受Ernie的回答启发,这是一种扩展方法用于设置折线图系列的颜色和粗细,以及用于设置饼图数据点的颜色的未测试版本:

Inspired by Ernie's answer, here is an extension method that works for setting the color and thickness of a line chart series, and a non tested version for setting the color of a pie chart data point:

public static void SetSeriesStyle(this ExcelLineChart chart, ExcelChartSerie series, Color color, decimal? thickness = null) {
    if (thickness < 0) throw new ArgumentOutOfRangeException("thickness");
    var i = 0;
    var found = false;
    foreach (var s in chart.Series) {
        if (s == series) {
            found = true;
            break;
        }
        ++i;
    }
    if (!found) throw new InvalidOperationException("series not found.");
    //Get the nodes
    var nsm = chart.WorkSheet.Drawings.NameSpaceManager;
    var nschart = nsm.LookupNamespace("c");
    var nsa = nsm.LookupNamespace("a");
    var node = chart.ChartXml.SelectSingleNode(@"c:chartSpace/c:chart/c:plotArea/c:lineChart/c:ser[c:idx[@val='" + i.ToString(CultureInfo.InvariantCulture) + "']]", nsm);
    var doc = chart.ChartXml;

    //Add the solid fill node
    var spPr = doc.CreateElement("c:spPr", nschart);
    var ln = spPr.AppendChild(doc.CreateElement("a:ln", nsa));
    if (thickness.HasValue) {
        var w = ln.Attributes.Append(doc.CreateAttribute("w"));
        w.Value = Math.Round(thickness.Value * 12700).ToString(CultureInfo.InvariantCulture);
        var cap = ln.Attributes.Append(doc.CreateAttribute("cap"));
        cap.Value = "rnd";
    }
    var solidFill = ln.AppendChild(doc.CreateElement("a:solidFill", nsa));
    var srgbClr = solidFill.AppendChild(doc.CreateElement("a:srgbClr", nsa));
    var valattrib = srgbClr.Attributes.Append(doc.CreateAttribute("val"));

    //Set the color
    valattrib.Value = color.ToHex().Substring(1);
    node.AppendChild(spPr);
}

public static void SetDataPointStyle(this ExcelPieChart chart, int dataPointIndex, Color color) {
    //Get the nodes
    var nsm = chart.WorkSheet.Drawings.NameSpaceManager;
    var nschart = nsm.LookupNamespace("c");
    var nsa = nsm.LookupNamespace("a");
    var node = chart.ChartXml.SelectSingleNode("c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser", nsm);
    var doc = chart.ChartXml;
    //Add the node
    //Create the data point node
    var dPt = doc.CreateElement("c:dPt", nschart);

    var idx = dPt.AppendChild(doc.CreateElement("c:idx", nschart));
    var valattrib = idx.Attributes.Append(doc.CreateAttribute("val"));
    valattrib.Value = dataPointIndex.ToString(CultureInfo.InvariantCulture);
    node.AppendChild(dPt);

    //Add the solid fill node
    var spPr = doc.CreateElement("c:spPr", nschart);
    var solidFill = spPr.AppendChild(doc.CreateElement("a:solidFill", nsa));
    var srgbClr = solidFill.AppendChild(doc.CreateElement("a:srgbClr", nsa));
    valattrib = srgbClr.Attributes.Append(doc.CreateAttribute("val"));

    //Set the color
    valattrib.Value = color.ToHex().Substring(1);
    dPt.AppendChild(spPr);
}

public static String ToHex(this Color c) {
    return "#" + c.R.ToString("X2") + c.G.ToString("X2") + c.B.ToString("X2");
}

用法:

lineChart.SetSeriesStyle(s, color: Color.FromArgb(0, 0, 0), thickness: 6m);
pieChart.SetDataPointStyle(dataPointIndex: 0, color: Color.FromArgb(0, 0, 0));

这篇关于EPPlus如何在EXCEL中更改PIE图表的颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆