zoukankan      html  css  js  c++  java
  • 使用Apache POI导出echarts图表到Excel表格

    转自:https://blog.csdn.net/weixin_44009447/article/details/105794496

    引言:在实际项目统计报表模块中,报表的内容不单单只有数据,用户为了更能直观的观察数据,往往还提出将数据图表导出到excel的需求,比如数据柱状图、饼状图以及折线图等等。这些数据图形可以用echarts来进行动态实现,那么我们如何将echarts构建的图表导出到excel文件中呢?

    本篇文章主要说明如何使用Apache POI导出echarts图表到Excel表格,详细导出数据步骤在我的另一篇博文中有:使用Apache POI导出数据到Excel表格,在这里就简单说明一下导出echarts图形的新添加的步骤以及代码,希望能对大家有所帮助。

    1.首先我们要了解到导出echarts图表大概是一个什么样子的流程:得到echarts图表的base64编码→将该图表的base64编码解码得到图片文件→将该图片文件写入流中→最后将该图片画在excel画布上

    注:(Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。)

    2.echarts图表构建好之后,得到该图表的echarts编码,并传入后台,如下图所示:

    3.控制器中去接收该数据,如下图所示:

    4.相对于之前导出数据,导出echarts图表只是多传入了一个imgBase64Info参数,所以在导出的工具中,我们也需要添加一块构建echarts图表的代码,添加的代码如下所示:

    添加的代码块:

     /*将echarts数据生成图表*/

            if(!StringUtils.isEmpty(imgUrl)) {

                // 1)截取获取到的base64编码,去掉前缀"data:image/png;base64," || "data:image/jpeg;base64,",只取base64编码

                String[] imgUrlArr = imgUrl.split("base64,");//拆分base64编码后部分

                // 2)重点:在传 base64编码 的时候,会把 base64编码 中的 "+" 号换成空格,所以需要先将base64中的空格转换回来,再进行保存操作!!!

                byte[] buffer = new BASE64Decoder().decodeBuffer(imgUrlArr[1].replaceAll(" ", "+"));

                //生成图片保存路径

                String picPath = "C:\Users\My\Desktop\echarts" + ".png";

                File file = new File(picPath);//图片文件

                try {

                    //生成图片

                    OutputStream out = new FileOutputStream(file);//图片输出流

                    out.write(buffer);

                    out.flush();//清空流

                    out.close();//关闭流

                    ByteArrayOutputStream outStream = new ByteArrayOutputStream(); // 将图片写入流中

                    BufferedImage bufferImg = ImageIO.read(new File(picPath));

                    ImageIO.write(bufferImg, "PNG", outStream);

                    // 利用HSSFPatriarch将图片写入EXCEL

                    HSSFPatriarch patriarch = sheet.createDrawingPatriarch();

                    //short 宽度:0-12列,从第0列开始,到第12列结束

                    //row1-row2:高度:8-31列,从第12行开始,到第35行结束

                    HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, (short) 0, 12, (short) 12, 35);

                    //画图

                    patriarch.createPicture(anchor, workbook.addPicture(outStream.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG));

                } catch (Exception ex) {

                    ex.printStackTrace();

                }

                if (file.exists()) {

                    file.delete();//删除图片

                }

            }

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    注意!!!

    如上代码所示:在前后台传递base64编码的时候,会把 base64编码 中的 “+” 号换成空格,所以需要先将base64中的空格转换回来,再进行保存操作!!!

    5.debug后控制台打印出该base64编码存在空格,会导致图片解编码失败,我就是因为这个问题搞了差不多一天,真的是血淋淋的教训!!!希望大家看了以后不要再重复犯这种错误!

    6.没有把“ ”替换成“+”号会出现以下报错:

    7.还有一个问题需要注意,因为base64编码过长,直接传入后台会出现以下请求头过长报错:

    8.这个时候我们就需要在application.yml添加一行代码,重新定义请求头的大小,如下图所示:

    9.执行完上述步骤后,我们就能把数据以及echarts数据图表都导出到excel表格中去了,页面效果图以及导出后的excel效果图如下所示:

    ————————————————

    版权声明:本文为CSDN博主「Keson Z」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

    原文链接:https://blog.csdn.net/weixin_44009447/article/details/105794496

    使用Apache POI导出echarts图表到Excel表格

  • 相关阅读:
    【转】Uiautomator Api浅析
    【转】UiAutomator简要介绍
    后台自动启动appium
    adb通过wifi连接Android设备
    Python字符串处理和输入输出
    OJ题目输出的生成
    Weka的使用和二次开发(朴素贝叶斯及其属性选择)
    PointNet++论文理解和代码分析
    VGG-16复现
    二维偏序-最长上升子序列的两种求解方式
  • 原文地址:https://www.cnblogs.com/sharpest/p/14951153.html
Copyright © 2011-2022 走看看