java中Excel导出echart图片

8 篇文章 0 订阅
2 篇文章 0 订阅

java中Excel导出echart图片

1、在生成echart的前端代码生成图片代码后Echart.setOption(captestRcapEchartOption, true);后面加上以下代码

//capImagesBase64是一个全局变量,因为后续传参也需要用到
capImagesBase64=capTestRcapEchart.getDataURL({
            pixelRatio: 2,
            backgroundColor: '#fff'
        });

2、给echart的组件series设置属性animation: false(一定要设置,不然不能生成数据线)
3、把echart的base码通过ajax传到后端,ajax的data设置为

data:{
        'imagesBase64':imagesBase64,
         'curImagesBase64':curImagesBase64,
         'capImagesBase64':capImagesBase64,},

4、以下是springboot的后端代码片段,在方法里要记到throws Exception

 XSSFWorkbook wb = new XSSFWorkbook();
        //创建sheet页
        Sheet sheet = wb.createSheet("xkc报告");
        //这个是创建excel的表格,因为图片前可能有其他的信息,具体看业务
        Row myRow0 = sheet.createRow((short)0);
        Cell bCel00 = myRow0.createCell(0);
        bCel00.setCellValue("xkc:");
        Cell bCel01 = myRow0.createCell(1);
        bCel01.setCellValue("xkc");
        //创建绘图(画布),一个sheet只能创建一个画布,但一个画布中可以添加多张图片
        Drawing patriarch = sheet.createDrawingPatriarch();
        //要进行非空处理,不然会报错
        if(!request.getParameter("imagesBase64" ).equals("")&&request.getParameter("imagesBase64" )!=null){
        //base码解码
            String dataChartCostStr = (URLDecoder.decode(request.getParameter("imagesBase64" ).substring(22),"UTF-8")).replaceAll(" ", "+");
            createPictureInExcel(dataChartCostStr, patriarch, wb, (short) 0, 8, (short) 10, 25);
        }
        if(request.getParameter("curImagesBase64" )!=null&& !request.getParameter("curImagesBase64" ).equals("")){
            String curDataChartCostStr = (URLDecoder.decode(request.getParameter("curImagesBase64" ).substring(22),"UTF-8")).replaceAll(" ", "+");
            createPictureInExcel(curDataChartCostStr, patriarch, wb, (short) 0, 25, (short) 10, 42);
        }
        if(request.getParameter("capImagesBase64" )!=null&& !request.getParameter("capImagesBase64" ).equals("")){
            String capDataChartCostStr = (URLDecoder.decode(request.getParameter("capImagesBase64" ).substring(22),"UTF-8")).replaceAll(" ", "+");
            createPictureInExcel(capDataChartCostStr, patriarch, wb, (short) 0, 42, (short) 10, 59);
        }
		//这里的filename是我传过来的,具体处理是fileName 
        String fileName = System.getProperty("webapp.root") + "slb"
                + File.separator + "report" + File.separator + "results"
                + File.separator + filename;

     
        File file = new File(fileName);
		//这段代码是设置给前端下载文件使用的,这个自己定义
        response.setHeader("Content-disposition", "attachment;filename=" + HtmlUtils.htmlUnescape(fileName));
        response.setContentType("application/msexcel;charset=UTF-8");
        response.setCharacterEncoding("UTF-8");


        if (file.isFile()) {
            file.delete();
        }
        // 规定的路径下,生成excel表格
        FileOutputStream output = null;
        try {
            output = new FileOutputStream(fileName);
            wb.write(output);
            output.flush();
            output.close();

        }catch (FileNotFoundException e) {

            e.printStackTrace();
        } catch (IOException e) {

            try {
                if (wb != null) {
                    wb.close();
                }
                if (output != null) {
                    output.close();
                }
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }

5、定义具体画布的方法:

 public void createPictureInExcel(String dataChart,Drawing patriarch,XSSFWorkbook wb,
                                     short col1, int row1,short col2, int row2) throws Exception{
        //用于将BASE64编码格式转为byte数组
        BASE64Decoder base64Decoder = new BASE64Decoder();
        ByteArrayOutputStream dataChartoutStream = new ByteArrayOutputStream();
        //将dataChartStringin作为输入流,读取图片存入image中
        ByteArrayInputStream dataChartin = new ByteArrayInputStream( base64Decoder.decodeBuffer(dataChart));
        BufferedImage dataChartbufferImg = ImageIO.read(dataChartin);
        //图片写入EXCEL
        ImageIO.write(dataChartbufferImg, "png", dataChartoutStream);
        /*
         * 指定绘图区域位置及大小
         * XSSFClientAnchor(int dx1, int dy1, int dx2, int dy2, short col1, int row1, short col2, int row2)
         * 参数说明:
         * dx1 dy1 起始单元格中的x,y坐标.
         * dx2 dy2 结束单元格中的x,y坐标.
         * col1,row1 指定起始的单元格,下标从0开始.
         * col2,row2 指定结束的单元格 ,下标从0开始.
         */
        XSSFClientAnchor anchorCostStr = new XSSFClientAnchor(0, 0, 0, 0, col1, row1, col2, row2);
        //画图
        patriarch.createPicture(anchorCostStr, wb.addPicture(dataChartoutStream.toByteArray(), XSSFWorkbook.PICTURE_TYPE_PNG));
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值