Java 如何生成 Excel 柱状图?

Java 如何生成 Excel 柱状图?

我想通过java代码在一个xlsx文件中生成柱状图,并且导出的时候要与Excel兼容。有什么建议吗?

阅读 1.5k
avatarAI BotBETA

在Java中生成Excel柱状图,你可以使用Apache POI库,这是一个非常强大的库,可以处理Microsoft Office的所有文件格式。

首先,你需要添加Apache POI库的依赖。如果你使用Maven,你可以在pom.xml文件中添加以下依赖:

<dependencies>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.0.0</version> <!-- 请检查是否有更新的版本 -->
    </dependency>
</dependencies>

然后,你可以使用以下代码创建一个柱状图:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.*;
import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.xssf.usermodel.charts.*;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

public class ExcelChartGenerator {
    public static void main(String[] args) throws IOException {
        XSSFWorkbook workbook = new XSSFWorkbook(); // 创建一个新的Excel工作簿
        XSSFSheet sheet = workbook.createSheet("Chart Data"); // 创建一个新的工作表
        final XSSFDrawing drawing = sheet.createDrawingPatriarch(); // 为工作表添加绘图区域
        final XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 3, 3, 10, 20); // 创建锚点以放置图表
        final XSSFChart chart = drawing.createChart(anchor); // 为工作表添加图表
        final XSSFChartLegend legend = chart.getOrCreateLegend(); // 为图表添加图例
        legend.setPosition(LegendPosition.BOTTOM); // 设置图例的位置为底部
        XSSFChartAxis bottomAxis = chart.getChartAxisFactory().createCategoryAxis(AxisPosition.BOTTOM); // 创建底部坐标轴
        XSSFValueAxis leftAxis = chart.getChartAxisFactory().createValueAxis(AxisPosition.LEFT); // 创建左侧坐标轴
        leftAxis.setCrosses(AxisCrosses.AUTO_ZERO); // 设置左侧坐标轴与底部坐标轴交叉于自动零点处
        chart.plot(createChartData(), bottomAxis, leftAxis); // 创建并绘制柱状图,使用左侧坐标轴和底部坐标轴
        FileOutputStream fileOut = new FileOutputStream("workbook.xlsx"); // 创建文件输出流以保存工作簿到文件
        workbook.write(fileOut); // 将工作簿写入文件输出流中
        fileOut.close(); // 关闭文件输出流
    }
    private static XSSFChartDataSource<String> createCategoryData() {
        List<String> categories = List.of("A", "B", "C", "D", "E"); // 创建类别数据列表
        return XSSFDataUtil.createCategoryDataSource(categories); // 返回类别数据源对象
    }
    private static XSSFChartDataSource<Number> createNumericData() {
        List<Double> values = List.of(10, 20, 30, 40, 50); // 创建数值数据列表
        return XSSFDataUtil.createValueDataSource(values); // 返回数值数据源对象
    }
    private static XSSFChartData createChartData() {
        XSSFChartData chartData = chartFactory.createBarChartData(); // 创建柱状图数据对象
1 个回答

可以通过GcExcel来实现柱状图,GcExcel支持各种Excel图表,具体可以参考:
图表类型 - GcExcel 中文文档Java版 | 服务端高性能表格组件 - 葡萄城
生成柱状图的代码如下:

public void CreateColumnChart() {
    // Create a new workbook
    Workbook workbook = new Workbook();

    IWorksheet worksheet = workbook.getWorksheets().get(0);
    IShape shape = worksheet.getShapes().addChart(ChartType.ColumnClustered, 250, 20, 360, 230);
    worksheet.getRange("A1:C6").setValue(new Object[][]{
            {103, 121, 109},
            {56, 94, 115},
            {116, 89, 99},
            {55, 93, 70},
            {114, 114, 83},
            {125, 138, 136}
    });

    shape.getChart().getSeriesCollection().add(worksheet.getRange("A1:C6"), RowCol.Columns);
    shape.getChart().getChartTitle().setText("Column Clustered Chart");

    // Save to an excel file
    workbook.save("output/ColumnClusteredChart.xlsx");
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题