做Web开发免不了要与Excel打交道。今天老大给我一个任务-导出Excel。开始想的还是蛮简单的,无非就是查找,构建Excel,response下载即可。但是有一点不同,就是要加入图片,就是这个加入图片搞了好久。同时网络上确实没有发现比较好的资料,所以写这篇博文记录之,供自己和博友们查询,参考。

在POI中有HSSFPatriarch对象,该对象为画图的顶级管理器,它的createPicture(anchor, pictureIndex)方法就能够在Excel插入一张图片。所以要在Excel中插入图片,三步就可以搞定。一、获取HSSFPatriarch对象,二、new HSSFClientAnchor对象,三、调用createPicture方法即可。实现倒是非常容易实现,如果想把它做好还是有点儿难度的。这里我们先插入一张图片:

public class ExcelImageTest {

public static void main(String[] args) {

FileOutputStream fileOut = null;

BufferedImage bufferImg = null;

//先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray

try {

ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();

bufferImg = ImageIO.read(new File("F:/图片/照片/无名氏/小昭11.jpg"));

ImageIO.write(bufferImg, "jpg", byteArrayOut);

HSSFWorkbook wb = new HSSFWorkbook();

HSSFSheet sheet1 = wb.createSheet("test picture");

//画图的顶级管理器,一个sheet只能获取一个(一定要注意这点)

HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();

//anchor主要用于设置图片的属性

HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 255, 255,(short) 1, 1, (short) 5, 8);

anchor.setAnchorType(3);

//插入图片

patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));

fileOut = new FileOutputStream("D:/测试Excel.xls");

// 写入excel文件

wb.write(fileOut);

System.out.println("----Excle文件已生成------");

} catch (Exception e) {

e.printStackTrace();

}finally{

if(fileOut != null){

try {

fileOut.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

如下为执行后的结果:

至于为什么会是这样的结果,主要是因为HSSFClientAnchor(0, 0, 255, 255,(short) 1, 1, (short) 5, 8)这个构造函数造成的,下面我就来解释这个构造函数:HSSFClientAnchor(int dx1,int dy1,int dx2,int dy2,short col1,int row1,short col2, int row2);各个参数的含义如下:

dx1:the x coordinate within the first cell。

dy1:the y coordinate within the first cell。

dx2:the x coordinate within the second cell。

dy2:the y coordinate within the second cell。

col1:the column (0 based) of the first cell。

row1:the row (0 based) of the first cell。

col2:the column (0 based) of the second cell。

row2:the row (0 based) of the second cell。

这里dx1、dy1定义了该图片在开始cell的起始位置,dx2、dy2定义了在终cell的结束位置。col1、row1定义了开始cell、col2、row2定义了结束cell。

下面是有两个不同的构造函数所创建的,从这幅图中我们可以清晰看到上面八个参数的含义和不同之处。

上面是插入一张图片,那么实现插入多张图片呢?其实很简单,构造多个不同的HSSFClientAnchor对象,控制好那八个参数,如下:

HSSFClientAnchor anchor1 = new HSSFClientAnchor(0, 0, 1023,100,(short) 1, 1, (short)5, 8);

HSSFClientAnchor anchor2= new HSSFClientAnchor(0, 0, 1023,100,(short) 1, 9, (short)5, 16);//插入图片

patriarch.createPicture(anchor1, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));

patriarch.createPicture(anchor2, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));

其余代码一样,得到如下结果:

下篇我将提供一个Excel生成的通用模板,支持自定样式、标题、写入图片等!!

java中excel导入图片_java POI实现向Excel中插入图片相关推荐

  1. 用Java编程一个界面图片_Java可视化图像界面编程如何插入图片

    Java可视化图像界面编程如何插入图片 Java可视化图形界面编程如何加入图片 ImageIcon image=new ImageIcon("图片存储路径"); JLabel la ...

  2. java poi excel 导入数据库_java POI 处理excel表格数据并导入数据库示例

    java操作Excel最常用的开源组件有poi与jxl.jxl是韩国人开发的,发行较早,但是更新的很慢,目前似乎还不支持excel2007. poi是apache下的一个子项目,poi应该是处理ms的 ...

  3. excel 导入导出使用poi自定义注解

    excel导入导出使用poi自定义注解 最近在做一个数据导入导出的模块 在网上找了一些例子 在这里整理一下 这里就不再贴原作者的地址  (以下代码来自网上非原创 稍作简单修改)  首先引入pom.xm ...

  4. R语言 从excel导入数据,由于内容有excel的换行符导致列数不一致的问题

    R语言 从excel导入数据,由于内容有excel的换行符导致列数不一致的问题 问题描述 解决办法 1. 在excel中先通过trim和clean函数进行预处理 2. 读入数据 简单的方法是,将清理后 ...

  5. 在html中怎么插入动态图片,如何在gif中插入图片 动态图片某1帧插入图片并控制显示时间|动态图片中插入图片...

    大家还记得我以前的一个教程嘛?就是如何在视频中插入图片并控制其显示时间,有印象的话就太棒了,没印象的或就点击上边的文字自己做一下功课吧!! 今天的教程内容和上边所讲到的教程有点相似,都是插入图片,但是 ...

  6. java 导出批量图片_Java Poi 导出excel(含图片及多个sheet)

    因为之前做的导出都是导出数据的基本信息不含图片的那种,一直也没做过导出图片的excel,正好这两天做这个需求就做了一个,好 废话不多说,直接上图 ,因为我这边是根据模板导出数据 先看下模板 然后上代码 ...

  7. java excel row遍历空_Java poi读取,写入Excel,处理row和cell可能为空的情况

    首先需要导入包 import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.NP ...

  8. java读取excel某个单元格的值_java poi怎么获取excel单元格的内容

    展开全部 package edu.sjtu.erplab.poi; import java.io.InputStream&ch=ww.xqy.chain" target=" ...

  9. java poi 读取 word图片_Java Poi 根据文字内容 插入 word 图片-Go语言中文社区

    需求描述 如下图,我需要在word里根据一个图片的名字,将名字替换成该图片(公章) 思路: 用POI遍历每一个表格里的每一行的每一个单元格,如果遇到我自己定义的"&章",则 ...

最新文章

  1. linux 中如何将文件粘贴到usr下的lib内,学会在Linux下GCC生成和使用静态库和动态库...
  2. Codeforces Round #420 E
  3. ACM试题 - ASCII码排序 - Java中字符与对应ASCII码的转换
  4. BZOJ1016:[JSOI2008]最小生成树计数——题解
  5. 统计学习导论_统计机器学习之扫盲导论篇
  6. neo4j 连接超时_Neo4j:遍历查询超时
  7. Coursera自动驾驶课程第14讲:Linear and Nonlinear Kalman Filters
  8. Linux Socket C语言网络编程:Select Socket
  9. 微信上传图文素材接口报41005错误解决方法
  10. mobaxterm为什么无法连接_为什么 TCP 建立连接需要三次握手
  11. 英语听力计算机教室,每日英语听力电脑版|每日英语听力 v9.2.0 PC客户端
  12. 浅谈HTML页面基本结构
  13. 【DDRNet】DDRNet项目使用单GPU、自己的数据集训练、得到测试图像
  14. Pycharm专业版最新版下载安装(社区版和专业版并存)
  15. JavaScript中6种继承方式总结
  16. 腾讯反360秘密会议
  17. 拾起童年的回忆 - 手把手教你制作飞机大战小游戏
  18. MUI增加BeeCloud支付集成示例
  19. debian常用命令整理
  20. 股票的最新和历史股息收益率查询(3)

热门文章

  1. 从零到部署:用 Vue 和 Express 实现迷你全栈电商应用(四)
  2. Windows远程桌面连接每次都提示输入密码的问题
  3. 5、secureCRT连接虚拟机服务器时不弹出输入安全外壳密码框
  4. 学习笔记21—期约与异步函数
  5. SQL several 数据库基础知识
  6. 2022-08-16 DQL数据查询语言
  7. shell中一些特殊命令|: 管道命令。;;在前一个命令结束时,而忽略其返回值,继续执行下一個命令。
  8. 物联网竞赛套装配置简介
  9. 在linux下配置网桥透明模式防火墙
  10. 再php用if语句实现成绩,php中if语句怎么编写学生成绩等级