Echarts图导出到excel(excel导入图片)

2023-11-06

参照博文echart图导出到pdf,将前台传到后台的二十四位字节编码生成图片,然后将图片导出到excel中。

public  static  void exportEchartsImg(HttpServletResponse response,List<String> pngName,String fileName,String path,Map<String, Object> map,String staticServer){

        XSSFWorkbook book = new XSSFWorkbook();// 创建Excel文件
        XSSFSheet sheet = book.createSheet(fileName); // 创建一个工作薄
        BufferedImage bufferImg = null;
        try{
            XSSFDrawing patri = sheet.createDrawingPatriarch();//一个sheet只能一个
            int rowBegin = 2;//起始行
            int rowEnd = 20;//终止行
            int rowBefore = 0;//起始列
            int rowAfter = 3;//终止列
            for(int i=0;i<pngName.size();i++){
                ByteArrayOutputStream outputStream = new ByteArrayOutputStream();//一定要重新定义,不然输出始终是第一张
                bufferImg = ImageIO.read(new File(path+pngName.get(i)));
                ImageIO.write(bufferImg,"png",outputStream);
                XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0,(short) rowBefore, rowBegin, (short) rowAfter,  rowEnd);
                patri.createPicture(anchor, book.addPicture(outputStream.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG));
                rowBefore = rowBefore+3;
                rowAfter = rowAfter+3;
                //rowBegin = (i+1)*15+2;
               // rowEnd = rowBegin + 15;
            }
            CellStyle cellDataStyle = book.createCellStyle();
            org.apache.poi.ss.usermodel.Font fontData = book.createFont();
            fontData.setFontHeightInPoints((short) 10);
            fontData.setFontName("宋体");
            cellDataStyle.setFont(fontData);
            cellDataStyle.setBorderBottom((short) 1);
            cellDataStyle.setBorderLeft((short) 1);
            cellDataStyle.setBorderRight((short) 1);
            cellDataStyle.setBorderTop((short) 1);
            cellDataStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
            cellDataStyle.setFillForegroundColor(HSSFColor.WHITE.index);
            cellDataStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            // 创建一个DataFormat对象
            DataFormat format = book.createDataFormat();
            // 这样才能真正的控制单元格格式,@就是指文本型
            cellDataStyle.setDataFormat(format.getFormat("@"));
            //写数据内容
            String[] ymlx = getValue(map,"ymlx");
            Row lxRow = sheet.createRow(21);
            Cell cell = lxRow.createCell(0);
             cell.setCellValue("年度");
            cell.setCellStyle(cellDataStyle);
            for(int i=0;i<ymlx.length;i++){
                Cell cellLx = lxRow.createCell(i+1);
                cellLx.setCellValue(ymlx[i]);
                cellLx.setCellStyle(cellDataStyle);
            }
            String[] year = getValue(map,"year");
            String[] imgArr = {"blue.png","red.png","green.png"};
            for(int i=0;i<year.length;i++){
                Row dataRow = sheet.createRow(22+i);
                *//*ByteArrayOutputStream outputStream = new ByteArrayOutputStream();//一定要重新定义,不然输出始终是第一张
                bufferImg = ImageIO.read(new File(path+"/"+imgArr[i]));
                ImageIO.write(bufferImg,"png",outputStream);
                XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0,(short) 0, (short)(23+i), (short) 1,  (short) (23+i));
                patri.createPicture(anchor, book.addPicture(outputStream.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG));*//*
                String[] dataArr ={"0"};
                Cell cellYear = dataRow.createCell(0);
                cellYear.setCellValue(year[i]);
                cellYear.setCellStyle(cellDataStyle);
                if(i==0){
                    dataArr = getValue(map,"data1");
                }else if(i==1){
                    dataArr = getValue(map,"data2");
                }else if(i==2){
                    dataArr = getValue(map,"data3");
                }
                for(int j=0;j<dataArr.length;j++){
                    Cell cellData = dataRow.createCell(j+1);
                    cellData.setCellValue(dataArr[j]);
                    cellData.setCellStyle(cellDataStyle);
                }
            }
             OutputStream os = response.getOutputStream();// 取得输出流
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("content-disposition", "attachment; filename=" + new String(fileName.getBytes("GBK"), "ISO-8859-1") + ".xlsx");
            System.setProperty("org.apache.poi.util.POILogger", "org.apache.poi.util.POILogger");
             book.write(os);
             os.flush();
             os.close();
        }catch (IOException e){
            e.printStackTrace();
        }

    }	

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Echarts图导出到excel(excel导入图片) 的相关文章

随机推荐

  • QML设计登陆界面

    QML设计登陆界面 本文博客链接 http blog csdn net jdh99 作者 jdh 转载请注明 环境 主机 WIN7 开发环境 Qt5 2 说明 用QML设计一个应用的登陆界面 效果图 源代码 main qml javascr
  • python数据处理中的日期转换处理中的to_datetime()函数(一)

    python使用的是 jupyter notebook 话不多说 直接说说主要内容吧 一 函数简介 我们可以通过输入 import pandas as pd help pd to datetime 可以得到to datetime函数的相关作
  • 第三方登录之微信扫码登录

    文章目录 1 申请微信接入 2 项目环境搭建 3 后端Controller接口 4 HTML页面代码 5 测试结果 6 补充说明 小伙伴们有各种疑问可以去参考官方文档进行详细的学习下 微信开发文档 此次介绍的将是前后端不分离的微信扫码登录
  • 2022微信小程序填充昵称头像 open-type=“chooseAvatar“

    2021年7月份之后 微信开始加强对微信用户个人信息的安全防控 收回了相关服务端接口 微信后面也推出了前端填写昵称头像的方法 官方代码如下
  • gcc 与 g++ 的区别

    gcc 和 g GCC GNU Compiler Collection GUN 编译器集合 g 是 GCC 中的 GUN C Compiler C 编译器 在已编译好的 C 或者 C 代码的前提下 GCC 编译器已提供了调用接口 可以通过执
  • matlab循环每次循环都把结果输出来,怎么把循环的每一步结果都保存下来啊

    本帖最后由 芒点DK 于 2016 12 9 11 04 编辑 各位前辈请看我的代码 clear workspaces clear clc define variables rmin 0 rmax 8 N 9 dt 1 t 0 tmax 1
  • Flutter: 为字体增加渐变色描边

    文章目录 写在前面 内容 实现描边 实现渐变 一些调整 参考 写在前面 实现如下图的效果 这个数字的内部和外部都有渐变色 内容 实现描边 在网上搜索一轮 可以看到通过用 Stack 来让两个 Text叠加 并对上一个 Text设置外部描边
  • Java接口和多态

    Java接口 Java中的接口是一种定义了一组方法签名的抽象类型 它提供了一种方式来定义类之间的协议 即类应该实现哪些方法 在本教程中 我们将探讨Java中接口的使用和实现 步骤1 定义接口 我们首先需要定义一个接口 接口使用interfa
  • 27 KVM管理系统资源-管理虚拟CPU份额

    文章目录 27 KVM管理系统资源 管理虚拟CPU份额 27 1 概述 27 2 操作步骤 27 KVM管理系统资源 管理虚拟CPU份额 27 1 概述 虚拟化环境下 同一主机上的多个虚拟机竞争使用物理CPU 为了防止某些虚拟机占用过多的物
  • 什么是ARM TCM内存

    什么是ARM处理器上的TCM内存 它是一个驻留在处理器旁边的专用内存 还是一个配置为TCM 的RAM区域 如果它是专用内存 为什么我们可以配置它的位置和大小 TCM Tightly Coupled Memory是一个 或多个 小的专用内存区
  • iOS视频列表开发总结

    最近开发了一个较大的需求 即视频列表 特点是每个视频卡片高度不一致 包含不同的元素 若卡片长度超过一屏 还需要将底部的操作栏悬浮 可以上滑下滑自动切换到下一个播放 整体实现 UITableView作为容器 每一个Item都是一个视频 卡片高
  • webpack打包微信小程序

    webpack打包微信小程序目的 编写小程序代码时也可以引入 npm 上的插件 通过 webpack 打包后可以大大减小小程序代码的体积 项目目录 项目目录 plugin loadpath js src 把小程序的代码放到 src 文件夹内
  • 华为交换机常用的查询命令(自己学习时统计的)

    display 简写dis dis logbuffer 查询交换机日志 dis arp include 10 0 0 1 查询该网段已使用的ip dis arp include 0 0 1 查询该端口下的ip dis clock 查询时间
  • 【Spring】Spring 报错 AbstractMethodError hikari MicrometerMetricsTrackerFactory create

    1 概述 windows下运行一个Spring boot程序报错 如下 org springframework beans factory BeanCreationException Error creating bean with nam
  • vue从node服务器获取文件,用vue上传文件并接收它nodejs

    我想用vuejs上传一个文件到服务器 实际上我不想用表单来处理文件并上传它 我阻止自己提交和处理一些逻辑 所以在开始我想要做一些简单的只是检查它是否是一个PDF格式 如果一切正常 应该指向我的服务器端进行的NodeJS服务器用vue上传文件
  • 熟悉html css,编写HTML和CSS的前端开发中不一定熟悉JavaScript

    原标题 编写HTML和CSS的前端开发中不一定熟悉JavaScript 作为前端开发人员 HTML css Java是必备的知识技能 但是现实工作工作中并非所有的前端都知道Java 根据外国一个网站的匿名调查发现 有17 的开发人员不知道J
  • 2022年中国研究生数学建模竞赛E题-草原放牧策略研究

    一 背景介绍 草原作为世界上分布最广的重要的陆地植被类型之一 分布面积广泛 中国的草原面积为3 55亿公顷 是世界草原总面积的6 8 居世界第二 此外 草原在维护生物多样性 涵养水土 净化空气 固碳 调节水土流失和沙尘暴等方面具有重要的生态
  • react中封装websocket

    websocket js中 import e from express websocket的四个回调函数 onopen onmessage onerror onclose import websocket from Websocket im
  • [现代控制理论]11_现代控制理论串讲_完结_pdf获取

    DR CAN的现代控制理论的笔记就结束了 加上这篇一共11篇 现代控制理论 11 现代控制理论串讲 完结 pdf获取 现代控制理论 10 可观测性与分离原理 观测器与控制器 现代控制理论 9 状态观测器设计 龙伯格观测器 现代控制理论 8
  • Echarts图导出到excel(excel导入图片)

    参照博文echart图导出到pdf 将前台传到后台的二十四位字节编码生成图片 然后将图片导出到excel中 public static void exportEchartsImg HttpServletResponse response L