POI本地接口获取图片导出到EXCEL

1.先通过HttpServletRequest获取本地接口http:/ip:xxxx(端口号)

String url = request.getHeader("Origin");

2.再在接口后面加上获取图片的方法

String wholeurl = url+图片接口;

3.将图片插入到EXCEL里

 /*带图片的插入*/
   private static  Integer writeTablePicBodyOrFooterFromMapList(List<Map<String,Object>> list,Integer rowIndex,int maxcols,List<String> fieldList,HSSFSheet sheet,HSSFWorkbook workbook,TableType type) throws Exception{
        //正式的数据
        for (int i = 0; i < list.size(); i++) {
            HSSFRow row = sheet.createRow(rowIndex);
            Map<String,Object> vo = list.get(i); // 得到导出对象.
            for (int j = 0; j < maxcols; j++) {
                HSSFCell cell = row.createCell(j);
                if(type==TableType.FOOTER)  {cell.setCellStyle(getFooterCellStyler(workbook));}else {
                    cell.setCellStyle(getBoodyCellStyler(workbook));
                }
                // 取得类型,并根据对象类型设置值.
                if (vo.get(fieldList.get(j)) == null) {
                    cell.setCellValue("");// 如果数据是null,就填入空格.
                }else {
                    Class<?> fieldType=vo.get(fieldList.get(j)).getClass();
                    if(String.class == fieldType) {
                        if ((String)vo.get(fieldList.get(j))!=null&&((String)vo.get(fieldList.get(j))).indexOf("http://")!=-1){
                            row.setHeightInPoints(50);
                            sheet.setColumnWidth(j, 256*10+184);
                            HSSFPatriarch patriarch=sheet.createDrawingPatriarch();
                            setpic(patriarch,workbook,i+rowIndex,j,1,1,(String)vo.get(fieldList.get(j)));
                            cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                            cell.setCellValue(((String) vo.get(fieldList.get(j))).substring(47));
                        } else {
                            cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                            cell.setCellValue((String) vo.get(fieldList.get(j)));// 如果数据存在就填入,不存在填入空格.
                        }
                    } else if ((Integer.TYPE == fieldType) || (Integer.class == fieldType)) {
                        cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
                        Integer value=(Integer) vo.get(fieldList.get(j));
                        cell.setCellValue(value);
                    } else if ((Long.TYPE == fieldType) || (Long.class == fieldType)) {
                        cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
                        cell.setCellValue((Long)vo.get(fieldList.get(j)));
                    } else if ((Float.TYPE == fieldType) || (Float.class == fieldType)) {
                        cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
                        cell.setCellValue((Float)vo.get(fieldList.get(j)));
                    } else if (Double.TYPE == fieldType||Double.class == fieldType) {
                        cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
                        Double value=(Double) vo.get(fieldList.get(j));
                        cell.setCellValue(value);
                    } else if ((BigDecimal.class == fieldType)) {  //一般数据库传过来的map数字都是这种类型
                        Double value = ((BigDecimal) vo.get(fieldList.get(j))).doubleValue();
                        cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
                        cell.setCellValue(value);
                    } else if (Character.TYPE == fieldType) {

                    }
                }
            }
            rowIndex++;
        }
        return rowIndex;
    }
    private  static void setpic(HSSFPatriarch patriarch,HSSFWorkbook workbook,int rowNum,int colNum,int rowspan,int colspan,String picurl) throws Exception{
        // 先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
        ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
        URL url = new URL(picurl);
        HttpURLConnection httpUrl = (HttpURLConnection) url.openConnection();
        httpUrl.connect();
        //将图片读到BufferedImage
        BufferedImage bufferImg = ImageIO.read(httpUrl.getInputStream());
        if (bufferImg!=null)
        ImageIO.write(bufferImg, "jpg", byteArrayOut);
        httpUrl.disconnect();
        /**
         * 该构造函数有8个参数
         * 前四个参数是控制图片在单元格的位置,分别是图片距离单元格left,top,right,bottom的像素距离
         * 后四个参数,前两个表示图片左上角所在的cellNum和 rowNum,后两个参数对应的表示图片右下角所在的cellNum和 rowNum,
         * excel中的cellNum和rowNum的index都是从0开始的
         */
        //图片一导出到单元格B2中
        HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0,(short)colNum , rowNum, (short)(colNum+colspan), rowNum+rowspan);
        // 插入图片
        patriarch.createPicture(anchor, workbook.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值