Spire.XLS is a professional Excel API that enables developers to create, manage, manipulate, convert and print Excel worksheets. Get free and professional technical support for Spire.XLS for .NET, Java, Android, C++, Python.

Tue Feb 19, 2019 12:20 pm

With a bar chart I have a series with max. 5 values. Each value corresponds to one data point. Each value has its own color. Even if only two values are output, each value must correspond to its own color.

Example:
[0] Value1 = Red, [1] Value2 = Yellow, [2] Value3 = Green, [3] Value4 = Blue, [4] Value5 = Black

Example2
[0] Value2=Yellow, [1] Value5=Black

How can I create a data point for each value? The constructor of class ChartDataPoint is internal.

Thank you
Andre

lbm1305
 
Posts: 3
Joined: Tue Feb 19, 2019 11:55 am

Wed Feb 20, 2019 7:41 am

Hello,

Thanks for your post.
Please refer to the following sample code to set the different colors for each data point, if there is any question, please share us with your input Excel file to help further investigate it. You could send it via email(support@e-iceblue.com).
Code: Select all
Workbook workbook = new Workbook();
workbook.LoadFromFile(@"sample.xlsx");
Worksheet sheet = workbook.Worksheets[0];
ChartSerie sers = sheet.Charts[0].Series[0];
int datapoints=  sers.Values.Count;
for (int i = 0; i < datapoints; i++)
{
    switch (i.ToString())
    {
        case "0":
            sers.DataPoints[i].DataFormat.Fill.ForeColor = Color.Red;
            break;
        case "1":
            sers.DataPoints[i].DataFormat.Fill.ForeColor = Color.Yellow;
            break;
        case "2":
            sers.DataPoints[i].DataFormat.Fill.ForeColor = Color.Green;
            break;
        case "3":
            sers.DataPoints[i].DataFormat.Fill.ForeColor = Color.Blue;
            break;
        case "4":
            sers.DataPoints[i].DataFormat.Fill.ForeColor = Color.Black;
            break;
    }
}
workbook.SaveToFile("result.xlsx");

Sincerely,
Lisa
E-iceblue support team
User avatar

Lisa.Li
 
Posts: 1261
Joined: Wed Apr 25, 2018 3:20 am

Fri Feb 22, 2019 8:49 am

Hello,

Greetings from E-iceblue.
Did my code help you? Thanks in advance for your feedback and time.

Sincerely,
Lisa
E-iceblue support team
User avatar

Lisa.Li
 
Posts: 1261
Joined: Wed Apr 25, 2018 3:20 am

Mon Feb 25, 2019 8:13 am

Hello Lisa,

Sorry for the late answer.

I don't append the data of a series via data table, but pass the values directly.
Thus the property "Values" of the series object is NULL.

Unfortunately your example doesn't work like this.

This is what I do

Sample1
Code: Select all
var barChart1 = workbook.Worksheets[0].Charts[0]; // barchart
var serie1 = barChart1.Series.Add();
serie1.EnteredDirectlyValues = new object[] { 100, 200, 300 }; // red, yellow, green
serie1.EnteredDirectlyCategoryLabels = new object[] { "Label1", "Label2", "Label3" };

or
Sample2
Code: Select all
var barChart1 = workbook.Worksheets[0].Charts[0]; // barchart
var serie1 = barChart1.Series.Add();
serie1.EnteredDirectlyValues = new object[] { 100, 300 }; // red, green
serie1.EnteredDirectlyCategoryLabels = new object[] { "Label1", "Label3" };


Nice to have:
Code: Select all
serie1.EnterDirectlyColors = new object[] { Color.Red, Color.Yellow, Color.Green }
serie1.EnterDirectlyColors = new object[] { Color.Red, Color.Green } // For sample 2

// better

serieXYZ.Values.Add(
        new SeriesValue { Value = 100, CategoryLabel = "Label1", FillColor = Color.Red  })
serieXYZ.Values.Add(
        new SeriesValue { Value = 300, CategoryLabel = "Label3", FillColor = Color.Green  })


Thank you
Andre

lbm1305
 
Posts: 3
Joined: Tue Feb 19, 2019 11:55 am

Mon Feb 25, 2019 9:09 am

Hello,

Thanks for your feedback.
Based on your situation, please use the following sample code to achieve your demand. If there is any question, welcome to write back.
Code: Select all
 Workbook wb = new Workbook();
 //Get the first worksheet
 Worksheet sheet = wb.Worksheets[0];
 //Add a chart to the worksheet
 Chart chart = sheet.Charts.Add();
 //Add a serie for the chart
 var serie = chart.Series.Add();
 //Add datas directly
 serie.EnteredDirectlyValues = new object[] { 100, 200, 300 };
 serie.EnteredDirectlyCategoryLabels = new object[] { "Label1", "Label2", "Label3" };
 
            for (int i = 0; i < serie.EnteredDirectlyValues.Length; i++)
            {

                if ((int)serie.EnteredDirectlyValues[i] == 100)
                {
                    serie.DataPoints[i].DataFormat.Fill.FillType = ShapeFillType.SolidColor;
                    serie.DataPoints[i].DataFormat.Fill.ForeColor = Color.Red;
                }
                if ((int)serie.EnteredDirectlyValues[i] == 200)
                {
                    serie.DataPoints[i].DataFormat.Fill.FillType = ShapeFillType.SolidColor;
                    serie.DataPoints[i].DataFormat.Fill.ForeColor = Color.Yellow;
                }
                if ((int)serie.EnteredDirectlyValues[i] == 300)
                {
                    serie.DataPoints[i].DataFormat.Fill.FillType = ShapeFillType.SolidColor;
                    serie.DataPoints[i].DataFormat.Fill.ForeColor = Color.Green;
                }

            }
 wb.SaveToFile("result.xlsx", ExcelVersion.Version2013);

Sincerely,
Lisa
E-iceblue support team
User avatar

Lisa.Li
 
Posts: 1261
Joined: Wed Apr 25, 2018 3:20 am

Mon Feb 25, 2019 10:44 am

Hello Lisa,

Thanks for the answer.
It's a bit awkward, but that's how it works.

Thank you
Andre

lbm1305
 
Posts: 3
Joined: Tue Feb 19, 2019 11:55 am

Tue Feb 26, 2019 1:38 am

Hello Andre,

Thanks for your quick response.
If you need further assistance, please contact us without any hesitation. Wish you all the best!

Sincerely,
Lisa
E-iceblue support team
User avatar

Lisa.Li
 
Posts: 1261
Joined: Wed Apr 25, 2018 3:20 am

Return to Spire.XLS