Excel导出带有多个图表(柱状图、折线图、饼状图等)

说明

动态创建带有多个图表的Excel文件

效果图:
在这里插入图片描述

一、分析

第一种:创建图表模板,在Excel模板里设置好图表,然后通过更新模板数值,最终刷新图表;(也包含刷新图标各项数据)
第二种:动态创建带有数值与图表的Excel

说明:第一种,有一定的局限性,就是Excel里的数值与图表的格式需要固定,只是对数值进行替换。实际开发过程中,很少有固定的格式,所以重点讲解第二种;

二、全动态导出Excel带有多个图表–》实现步骤

第一步:根据传入的数据集,生成数据表的表头与数据行,并返回创建画布XSSFDrawing
第二步:在画布里创建空图表XSSFChart
第三步:设置图表XSSFChart,比如:创建柱状图
第四步:生成导出Excel文件

1.根据传入的数据集,生成数据表的表头与数据行

创建数据源,就是创建列头,数据行以及样式等;
一个sheet对应一个画布,所有返回一个画布;
代码如下:

private XSSFDrawing createXSSFDrawingBuildDataSource(ExcelMoreDataSourceInput input) {
   
        if (Objects.isNull(wb)) wb = new XSSFWorkbook();

        XSSFSheet sheet = wb.createSheet(input.getSheetName());
        // 创建数据源
        drawTable(sheet, input.getTitleArr(), input.getFldNameArr(), input.getDataList());
        // 创建一个画布
        return sheet.createDrawingPatriarch();
    }

2.在画布里创建空图表XSSFChart

在画布里创建空图表XSSFChart,设置第几行几列为图表(多个图表布局好即可)
代码如下:

    /**
     * 创建图表
     *
     * @param isPutOnRight 比如:当列数大于5时,把画布放在数组右边
     * @param chartNum     创建第几个图表
     */
    private XSSFChart createChart(XSSFDrawing drawing, int cols, int rows, boolean isPutOnRight, int chartNum) {
   
        int colNum = 25;
        ClientAnchor anchor;
        if (isPutOnRight) {
   
            anchor = drawing.createAnchor(0, 0, 0, 0, 1, rows + 2 + colNum * (chartNum - 1), cols + 15, rows + colNum * chartNums);
        } else {
   
            anchor = drawing.createAnchor(0, 0, 0, 0, cols + 1, 4 + colNum * (chartNum - 1), cols + 15, colNum * chartNums);
        }

        // 创建一个chart对象
        return drawing.createChart(anchor);
    }

3.设置图表XSSFChart

以制作柱状图为例:
1、确认哪些列作为图例项
2、设置横坐标,这里固定第一列为横坐标
3、设置数据区域范围
具体请看一下代码
代码如下:

    /**
     * 生成柱状图
     *
     * @param chart           图表
     * @param group           柱状图类型(堆积,多组)
     * @param fldNameArrIndex 数据列下标(用于Excel标识数据源区域)
     * @param rows            数据行数
     * @param sheetName       sheet的名称
     */
    private void drawBarChartMap(XSSFChart chart, STBarGrouping.Enum group, int[] fldNameArrIndex, int rows, String sheetName) {
   
        CTChart ctChart = chart.getCTChart();
        CTPlotArea ctPlotArea = ctChart.getPlotArea();
        // 创建柱状图模型
        CTBarChart ctBarChart = ctPlotArea.addNewBarChart();
        CTBoolean ctBoolean = ctBarChart.addNewVaryColors();
        ctBarChart.getVaryColors().setVal(true);
        // 设置图类型
        ctBarChart.addNewGrouping().setVal(group);
        ctBoolean.setVal(true
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值