使用POI实现导出图片功能及设置导出Url为超链接

1、Excel导出图片需求背景

    最近在做一个项目,是针对考试人员需要拍照,然后把拍照的照片导出到Excel之中,经过试验确实可以导出到Excel之中,但是实用性不强,如果一场考试50个人计算,一个人拍摄照片3张,平均一张照片2M,2*3*50就至少有300M的大小了,并且图片长宽过大在Excel也不太适合展示,并且就算导出后这个Excel文件过大;导致打开文件过慢。所以导出图片到Excel适合于一般的用户基本信息,如果个人一寸照片等等。针对此方案我们决定采用后续所说的导出图片的访问地址Url,并格式化可以直接点击链接访问图片。

  1.1 导出图片到Excel之中, 插入图片至坐标

相关方法参数说明

// 关于HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2)的参数,

有必要在这里说明一下:

// dx1:起始单元格的x偏移量,// dy1:起始单元格的y偏移量,

// dx2:终止单元格的x偏移量,// dy2:终止单元格的y偏移量,

// col1:起始单元格列序号,从0开始计算;// row1:起始单元格行序号,从0开始计算,

// col2:终止单元格列序号,从0开始计算;// row2:终止单元格行序号,从0开始计算,

ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();  
BufferedImage bufferImg = ImageIO.read(new File(strAppRootPath + "images/" + "bxlogo.png"));  
ImageIO.write(bufferImg, "png", byteArrayOut);  
  
HSSFPatriarch patriarch = (HSSFPatriarch) sheet.createDrawingPatriarch();  
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 150, 1000, 210, (short) 0, 0, (short) 1, 1);  
patriarch.createPicture(anchor, workbook.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG));

  1.2 导出图片到Excel之中, 插入图片至单元格,以及另一种图片载入方法

扫描二维码关注公众号,回复: 2849285 查看本文章
    // 插入 PNG 图片至 Excel
    String fileName = strAppRootPath + "images/" + "bxlogo.png";

    InputStream is = new FileInputStream(fileName);
    byte[] bytes = IOUtils.toByteArray(is);

    int pictureIdx = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);

    CreationHelper helper = workbook.getCreationHelper();
    Drawing drawing = sheet.createDrawingPatriarch();
    ClientAnchor anchor = helper.createClientAnchor();

    // 图片插入坐标
    anchor.setCol1(0);
    anchor.setRow1(1);
    // 插入图片
    Picture pict = drawing.createPicture(anchor, pictureIdx);
    pict.resize();

其中可以在网络上下载图片以实现方式可以参考此文章

获取网络中的图片资源 

2、Excel导出的Url为超链接目的

如前文所说,如果导出的图片过大,可以考虑使用其他方法导出连接的地址。但是需要设置Excel单元的连接方式

HSSFCell photoCell=rowIndex.createCell(7+j);
photoCell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
photoCell.setCellFormula("HYPERLINK(\"" +wholePhotoUrl+ "\")");
现在超链接单元格看起来和一般的单元格没有分别, 除非你把鼠标放上去才会变成手行光标。 
为了和一般的习惯相符, 还需要把字符颜色变成蓝色和加上下划线。 这就要用到 style了、

HSSFCellStyle linkStyle = workbook.createCellStyle();
HSSFFont cellFont= workbook.createFont();
cellFont.setUnderline((byte) 1);
cellFont.setColor(HSSFColor.BLUE.index);
linkStyle.setFont(cellFont);
//最后把style应用到cell上去就大功告成了。
cell.setCellStyle(linkStyle);

 参考文章:Apache POI 插入图片至 Excel 的两种方法   JAVA中读取网络中的图片资源导入到EXCEL中


猜你喜欢

转载自blog.csdn.net/jianxia801/article/details/80789400