条形图是图表的一种,可以等宽但不同长度的水平矩形条的形式展示或汇总数据。在 MS Excel 中,条形图可以用于对不同数据组的数据进行比较,帮助用户快速分析数据并得出结论。本文将介绍如何使用 Spire.XLS for Java 通过代码在 Excel 工作表中创建簇状条形图或堆积条形图。
安装 Spire.XLS for Java
首先,您需要在 Java 程序中添加 Spire.XLS for Java 文件作为依赖项。JAR 文件可以从此链接下载。如果您使用 Maven,则可以将以下代码添加到项目的 pom.xml 文件中,从而轻松地在应用程序中导入 JAR 文件。
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.xls</artifactId>
<version>14.8.2</version>
</dependency>
</dependencies>
在 Excel 工作表中创建簇状条形图
簇状条形图中,不同系列的数据并排显示在单独的条形中,可方便对各个类别的多项数据系列直接进行比较。
以下是在 Excel 工作表中创建簇状条形图的详细步骤:
- 创建一个 Workbook 类的对象。
- 用 Workbook.getWorksheets().get() 方法通过索引获取指定工作表。
- 在指定的单元格中添加数据并设置单元格样式。
- 用 Worksheet.getCharts().add(ExcelChartType.BarClustered) 方法在指定的工作表中创建一个 2D 簇状条形图。
- 用 Chart.setDataRange(CellRange dataRange) 方法设置簇状条形图的数据范围。
- 设置簇状条形图的位置和标题。
- 用 Chart.getPrimaryCategoryAxis() 方法获取簇状条形图的类别轴,然后使用 ChartCategoryAxis 类下的方法设置类别轴的展示文本和标题。
- 用 Chart.getPrimaryValueAxis() 方法获取簇状条形图的数据轴,然后使用 ChartValueAxis 类下的方法设置数据轴的标题、最小值和网格线。
- 循环遍历簇状条形图的各个数据类别,然后通过将 ChartSerie.getDataPoints().getDefaultDataPoint().getDataLabels().hasValue() 方法的值设置为 true 来显示每个数据类别的数据点标签。
- 用 Chart.getLegend().setPosition() 方法设置簇状条形图图例的位置。
- 用 Workbook.saveToFile() 方法保存结果文件。
- Java
import com.spire.xls.*;
import com.spire.xls.charts.ChartSerie;
import com.spire.xls.charts.ChartSeries;
import java.awt.*;
public class CreateClusterBarChart {
public static void main(String[] args) {
//创建一个Workbook类的对象
Workbook workbook = new Workbook();
//获取第一个工作表
Worksheet sheet = workbook.getWorksheets().get(0);
//向指定单元格插入数据
sheet.getCellRange("A1").setValue("国家");
sheet.getCellRange("A2").setValue("古巴");
sheet.getCellRange("A3").setValue("墨西哥");
sheet.getCellRange("A4").setValue("法国");
sheet.getCellRange("A5").setValue("德国");
sheet.getCellRange("B1").setValue("六月");
sheet.getCellRange("B2").setNumberValue(60000);
sheet.getCellRange("B3").setNumberValue(80000);
sheet.getCellRange("B4").setNumberValue(90000);
sheet.getCellRange("B5").setNumberValue(85000);
sheet.getCellRange("C1").setValue("八月");
sheet.getCellRange("C2").setNumberValue(30000);
sheet.getCellRange("C3").setNumberValue(20000);
sheet.getCellRange("C4").setNumberValue(60000);
sheet.getCellRange("C5").setNumberValue(35000);
//设置单元格样式
sheet.getCellRange("A1:C1").setRowHeight(15);
sheet.getCellRange("A1:C1").getCellStyle().setColor(Color.darkGray);
sheet.getCellRange("A1:C1").getCellStyle().getExcelFont().setColor(Color.white);
sheet.getCellRange("A1:C5").getCellStyle().setVerticalAlignment(VerticalAlignType.Center);
sheet.getCellRange("A1:C5").getCellStyle().setHorizontalAlignment(HorizontalAlignType.Center);
//设置数值格式
sheet.getCellRange("B2:C5").getCellStyle().setNumberFormat("\"¥\"#,##0");
//在此工作表中插入一个簇状条形图
Chart chart = sheet.getCharts().add(ExcelChartType.BarClustered);
//设置簇状条形图的数据范围
chart.setDataRange(sheet.getCellRange("A1:C5"));
chart.setSeriesDataFromRange(false);
//设置簇状条形图的位置
chart.setLeftColumn(1);
chart.setTopRow(6);
chart.setRightColumn(11);
chart.setBottomRow(29);
//设置簇状条形图标题及其格式
chart.setChartTitle("销售报告");
chart.getChartTitleArea().isBold(true);
chart.getChartTitleArea().setSize(12);
//设置类别轴标题及其格式
chart.getPrimaryCategoryAxis().setTitle("国家");
chart.getPrimaryCategoryAxis().getFont().isBold(true);
chart.getPrimaryCategoryAxis().getTitleArea().isBold(true);
chart.getPrimaryCategoryAxis().getTitleArea().setTextRotationAngle(90);
//设置数据轴标题及其格式
chart.getPrimaryValueAxis().setTitle("销售额(元)");
chart.getPrimaryValueAxis().hasMajorGridLines(false);
chart.getPrimaryValueAxis().setMinValue(1000);
chart.getPrimaryValueAxis().getTitleArea().isBold(true);
//设置数据点标签
ChartSeries series = chart.getSeries();
for (int i = 0;i < series.size();i++)
{
ChartSerie cs = series.get(i);
cs.getFormat().getOptions().isVaryColor(true);
cs.getDataPoints().getDefaultDataPoint().getDataLabels().hasValue(true);
}
//设置簇状条形图图例的位置
chart.getLegend().setPosition(LegendPositionType.Top);
//保存结果文件
workbook.saveToFile("簇状条形图.xlsx", ExcelVersion.Version2016);
}
}
在 Excel 工作表中创建堆积条形图
堆积条形图中,不同系列的数据在同一个条形图中分别堆积起来。与簇状条形图相比,堆积条形图增加对每个类别中数据的部分与整体的比较,使数据对比更加清晰可见。
以下是在 Excel 工作表中创建堆积条形图的详细步骤:
- 创建一个 Workbook 类的对象。
- 用 Workbook.getWorksheets().get() 方法通过索引获取指定的工作表。
- 在指定的单元格中添加数据并设置单元格样式。
- 用 Worksheet.getCharts().add(ExcelChartType.BarStacked) 方法在指定的工作表中创建一个 2D 堆积条形图。
- 用 Chart.setDataRange(CellRange dataRange) 方法为堆积条形图设置数据范围。
- 设置堆积条形图的位置、标题、类别轴标题和数据轴标题。
- 循环遍历堆积条形图的各个数据类别,然后通过将ChartSerie.getDataPoints().getDefaultDataPoint().getDataLabels().hasValue() 方法的值设置为 true 来展示每个数据类别的数据点标签。
- 用 Chart.getLegend().setPosition() 方法设置堆积条形图图例的位置。
- 用 Workbook.saveToFile() 方法保存结果文件。
- Java
import com.spire.xls.*;
import com.spire.xls.charts.ChartSerie;
import com.spire.xls.charts.ChartSeries;
import java.awt.*;
public class CreateStackBarChart {
public static void main(String[] args) {
//创建一个Workbook类的对象
Workbook workbook = new Workbook();
//获取第一个工作表
Worksheet sheet = workbook.getWorksheets().get(0);
//向指定单元格插入数据
sheet.getCellRange("A1").setValue("国家");
sheet.getCellRange("A2").setValue("古巴");
sheet.getCellRange("A3").setValue("墨西哥");
sheet.getCellRange("A4").setValue("法国");
sheet.getCellRange("A5").setValue("德国");
sheet.getCellRange("B1").setValue("六月");
sheet.getCellRange("B2").setNumberValue(60000);
sheet.getCellRange("B3").setNumberValue(80000);
sheet.getCellRange("B4").setNumberValue(90000);
sheet.getCellRange("B5").setNumberValue(85000);
sheet.getCellRange("C1").setValue("八月");
sheet.getCellRange("C2").setNumberValue(30000);
sheet.getCellRange("C3").setNumberValue(20000);
sheet.getCellRange("C4").setNumberValue(60000);
sheet.getCellRange("C5").setNumberValue(35000);
//设置单元格样式
sheet.getCellRange("A1:C1").setRowHeight(15);
sheet.getCellRange("A1:C1").getCellStyle().setColor(Color.darkGray);
sheet.getCellRange("A1:C1").getCellStyle().getExcelFont().setColor(Color.white);
sheet.getCellRange("A1:C5").getCellStyle().setVerticalAlignment(VerticalAlignType.Center);
sheet.getCellRange("A1:C5").getCellStyle().setHorizontalAlignment(HorizontalAlignType.Center);
//设置数值格式
sheet.getCellRange("B2:C5").getCellStyle().setNumberFormat("\"¥\"#,##0");
//在此工作表中创建一个堆积条形图
Chart chart = sheet.getCharts().add(ExcelChartType.BarStacked);
//设置堆积条形图的数据范围
chart.setDataRange(sheet.getCellRange("A1:C5"));
chart.setSeriesDataFromRange(false);
//设置堆积条形图的位置
chart.setLeftColumn(1);
chart.setTopRow(6);
chart.setRightColumn(11);
chart.setBottomRow(29);
//设置堆积条形图标题及其格式
chart.setChartTitle("销售报告");
chart.getChartTitleArea().isBold(true);
chart.getChartTitleArea().setSize(12);
//设置类别轴标题及其格式
chart.getPrimaryCategoryAxis().setTitle("国家");
chart.getPrimaryCategoryAxis().getFont().isBold(true);
chart.getPrimaryCategoryAxis().getTitleArea().isBold(true);
chart.getPrimaryCategoryAxis().getTitleArea().setTextRotationAngle(90);
//设置数据轴标题及其格式
chart.getPrimaryValueAxis().setTitle("销售额(元)");
chart.getPrimaryValueAxis().hasMajorGridLines(false);
chart.getPrimaryValueAxis().setMinValue(1000);
chart.getPrimaryValueAxis().getTitleArea().isBold(true);
//显示数据点标签
ChartSeries series = chart.getSeries();
for (int i = 0;i < series.size();i++)
{
ChartSerie cs = series.get(i);
cs.getFormat().getOptions().isVaryColor(true);
cs.getDataPoints().getDefaultDataPoint().getDataLabels().hasValue(true);
}
//设置堆积条形图图例的位置
chart.getLegend().setPosition(LegendPositionType.Top);
//保存结果文件
workbook.saveToFile("堆积条形图.xlsx", ExcelVersion.Version2016);
}
}
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。