This article demonstrates how to create multi-level category chart in Excel using Spire.XLS for Java.
import com.spire.xls.*;
import com.spire.xls.charts.*;
public class CreateMultiLevelChart {
public static void main(String []args) throws Exception {
//create a workbook
Workbook workbook = new Workbook();
Worksheet sheet = workbook.getWorksheets().get(0);
//write data to cells
sheet.getCellRange("A1").setText( "Main Category");
sheet.getCellRange("A2").setText("Fruit");
sheet.getCellRange("A6").setText("Vegies");
sheet.getCellRange("B1").setText("Sub Category");
sheet.getCellRange("B2").setText( "Bananas");
sheet.getCellRange("B3").setText( "Oranges");
sheet.getCellRange("B4").setText( "Pears");
sheet.getCellRange("B5").setText("Grapes");
sheet.getCellRange("B6").setText( "Carrots");
sheet.getCellRange("B7").setText( "Potatoes");
sheet.getCellRange("B8").setText( "Celery");
sheet.getCellRange("B9").setText( "Onions");
sheet.getCellRange("C1").setText("Value");
sheet.getCellRange("C2").setValue("52");
sheet.getCellRange("C3").setValue( "65");
sheet.getCellRange("C4").setValue( "50");
sheet.getCellRange("C5").setValue( "45");
sheet.getCellRange("C6").setValue( "64");
sheet.getCellRange("C7").setValue( "62");
sheet.getCellRange("C8").setValue( "89");
sheet.getCellRange("C9").setValue( "57");
//vertically merge cells from A2 to A5, A6 to A9
sheet.getCellRange("A2:A5").merge();
sheet.getCellRange("A6:A9").merge();
sheet.autoFitColumn(1);
sheet.autoFitColumn(2);
//add a clustered bar chart to worksheet
Chart chart = sheet.getCharts().add(ExcelChartType.BarClustered);
chart.setChartTitle( "Value");
chart.getPlotArea().getFill().setFillType( ShapeFillType.NoFill);
chart.getLegend().delete();
chart.setLeftColumn(5);
chart.setTopRow(1);
chart.setRightColumn(14);
//set the data source of series data
chart.setDataRange(sheet.getCellRange("C2:C9"));
chart.setSeriesDataFromRange(false);
//set the data source of category labels
ChartSerie serie = chart.getSeries().get(0);
serie.setCategoryLabels( sheet.getCellRange("A2:B9"));
//show multi-level category labels
chart.getPrimaryCategoryAxis().setMultiLevelLable( true);
//save the document
workbook.saveToFile("output/createMultiLevelChart.xlsx", ExcelVersion.Version2013);
}
}
Output:

