3
votes

I am creating an Excel file with some statistics, also including line charts. I had succeed in creating charts and filling them with data. But I am not satisfied with default colors of the charts' series.

So how I can change the color of a chart serie? I can't find any documentation about it, so please help. I also heard, that problem could be connected with workbook's default colors, so maybe you can guide me how to change them?

I'm using Apache POI 3.10.

2

2 Answers

2
votes

It works for me. Groovy, PieChart, random colors.

def ctChart = chart.getCTChart()
def ctPieChart = ctChart.getPlotArea().addNewPieChart()
def ctPieSer = ctPieChart.addNewSer()

byte[] b = new byte[3];

(0 .. rows).each {
  random.nextBytes(b)
  def x = ctPieSer.addNewDPt()
  x.addNewIdx().setVal(it)
  x.addNewBubble3D().setVal(false)
  x.addNewSpPr().addNewSolidFill().addNewSrgbClr().setVal(b)
}
0
votes

Of note is that with line charts, there are several different places where colour options exist. The colour of the line, the fill colour of the markers, and the outline colour of the marker. All can be set independently of each other. In this example I just set them to the same thing, but if you want them to be different just supply different rgb byte arrays when setting them.

CTChart ctChart = chart.getCTChart();
CTPlotArea plotArea = ctChart.getPlotArea();
CTLineChart lineChart = plotArea.addNewLineChart();

lineChart.addNewVaryColors().setVal(false);

CTLineSer lineSeries = lineChart.addNewSer();
lineSeries.addNewSmooth().setVal(false);

// some rgb color code. in this example it is a light greenish color
byte[] color = new byte[] {(byte) 195, (byte) 224, (byte) 176};

CTShapeProperties lineProp = lineSeries.addNewSpPr();

//Set the colour of the line connecting points
CTSRgbColor fill = lineProp.addNewLn().addNewSolidFill().addNewSrgbClr();
fill.setVal(color);

CTShapeProperties markerProp = lineSeries.addNewMarker().addNewSpPr();

// Set the fill colour of the marker
markerProp.addNewLn().addNewSolidFill().setSrgbClr(fill);

//Set the outline colour of the marker
markerProp.addNewSolidFill().setSrgbClr(fill);