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

参照博文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();
        }

    }	

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值