条形图是图表的一种,可以等宽但不同长度的水平矩形条的形式展示或汇总数据。在 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>15.10.5</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 天的临时许可证。
 



 
					



