Excel使用POI导出一个度量,一个维度和一个图例的代码

请教一下,这种柱状图,Y轴是销售量,X轴是销售日期,而下面分类是每个地区。

img

这样柱状图,用POI,我参考你之前的,不过只能一个分类,现在多了一个维度(销售日期),就不知道怎么下手了

https://blog.csdn.net/u014644574/article/details/130787549

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/746410
  • 这篇博客你也可以参考下:POI导出Excel设置背景色踩坑,解决背景色全黑(无效)的问题及指定列添加背景色,自定义颜色
  • 以下回答来自chatgpt:

    我可以为您提供一些指导和代码示例来帮助您使用POI导出Excel柱状图。

    首先,您需要使用POI的绘图对象创建一个XSSFWorkbook实例。然后,您可以创建一个XSSFSheet实例并在其中创建一个XSSFDrawing图像元素。然后,使用绘图对象在图像元素中创建一个XSSFChart图表。

    代码示例如下:

    XSSFWorkbook workbook = new XSSFWorkbook();
    XSSFSheet sheet = workbook.createSheet();
    XSSFDrawing drawing = sheet.createDrawingPatriarch();
    XSSFChart chart = drawing.createChart(drawing.createAnchor(0, 0, 0, 0, 0, 5, 10, 15)));
    

    接下来,您需要提供数据系列和轴定义,然后将它们添加到图表中。对于您的情况,数据系列将表示每个地区的销售量,并且X轴将表示销售日期。以下是添加数据系列和轴定义的代码示例:

    // 创建图表数据
    XSSFChart chart = drawing.createChart(drawing.createAnchor(0, 0, 0, 0, 0, 5, 10, 15)));
    XDDFChartData data = chart.createData(ChartTypes.BAR, new XDDFBarChartData(), null);
    
    // 设置数据系列和轴定义
    XDDFCategoryAxis xAxis = data.setCategoryAxisData(xValues);
    XDDFValueAxis yAxis = chart.createValueAxis(AxisPosition.LEFT);
    yAxis.createAxisTitle().setText("销售量");
    
    // 添加数据系列到图表中
    for (int i = 0; i < yValues.length; i++) {
        String region = regions[i];
        double[] dataValues = yValues[i];
        XDDFNumericalDataSource<Double> ys1 = XDDFDataSourcesFactory.fromArray(dataValues);
        XDDFChartData.Series series1 = data.addSeries(xAxis, ys1);
        series1.setTitle(region, null);
    }
    
    // 设置图表样式
    chart.setTitleText("销售统计");
    chart.setTitleOverlay(false);
    

    最后,您需要将图表对象添加到Excel工作簿并将其写入输出流中。以下是完整代码示例:

    // 生成Excel和图表
    XSSFWorkbook workbook = new XSSFWorkbook();
    XSSFSheet sheet = workbook.createSheet();
    XSSFDrawing drawing = sheet.createDrawingPatriarch();
    XSSFChart chart = drawing.createChart(drawing.createAnchor(0, 0, 0, 0, 0, 5, 10, 15)));
    
    // 添加图表数据
    XDDFChartData data = chart.createData(ChartTypes.BAR, new XDDFBarChartData(), null);
    XDDFCategoryAxis xAxis = data.setCategoryAxisData(xValues);
    XDDFValueAxis yAxis = chart.createValueAxis(AxisPosition.LEFT);
    yAxis.createAxisTitle().setText("销售量");
    for (int i = 0; i < yValues.length; i++) {
        String region = regions[i];
        double[] dataValues = yValues[i];
        XDDFNumericalDataSource<Double> ys1 = XDDFDataSourcesFactory.fromArray(dataValues);
        XDDFChartData.Series series1 = data.addSeries(xAxis, ys1);
        series1.setTitle(region, null);
    }
    chart.plot(data);
    chart.setTitleText("销售统计");
    chart.setTitleOverlay(false);
    
    // 写入Excel文件到输出流
    OutputStream os = new FileOutputStream("sales.xlsx");
    workbook.write(os);
    workbook.close();
    os.close();
    

    注:上述示例使用的是POI 4.1.2版本的API,如果您使用的是其他版本的POI,可能需要做一些微调。

    希望这些代码示例能够帮助您解决问题。如果您还有任何疑问或困惑,请随时向我提出。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^