java中excel导入图片_java POI实现向Excel中插入图片
做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中插入图片相关推荐
- 用Java编程一个界面图片_Java可视化图像界面编程如何插入图片
Java可视化图像界面编程如何插入图片 Java可视化图形界面编程如何加入图片 ImageIcon image=new ImageIcon("图片存储路径"); JLabel la ...
- java poi excel 导入数据库_java POI 处理excel表格数据并导入数据库示例
java操作Excel最常用的开源组件有poi与jxl.jxl是韩国人开发的,发行较早,但是更新的很慢,目前似乎还不支持excel2007. poi是apache下的一个子项目,poi应该是处理ms的 ...
- excel 导入导出使用poi自定义注解
excel导入导出使用poi自定义注解 最近在做一个数据导入导出的模块 在网上找了一些例子 在这里整理一下 这里就不再贴原作者的地址 (以下代码来自网上非原创 稍作简单修改) 首先引入pom.xm ...
- R语言 从excel导入数据,由于内容有excel的换行符导致列数不一致的问题
R语言 从excel导入数据,由于内容有excel的换行符导致列数不一致的问题 问题描述 解决办法 1. 在excel中先通过trim和clean函数进行预处理 2. 读入数据 简单的方法是,将清理后 ...
- 在html中怎么插入动态图片,如何在gif中插入图片 动态图片某1帧插入图片并控制显示时间|动态图片中插入图片...
大家还记得我以前的一个教程嘛?就是如何在视频中插入图片并控制其显示时间,有印象的话就太棒了,没印象的或就点击上边的文字自己做一下功课吧!! 今天的教程内容和上边所讲到的教程有点相似,都是插入图片,但是 ...
- java 导出批量图片_Java Poi 导出excel(含图片及多个sheet)
因为之前做的导出都是导出数据的基本信息不含图片的那种,一直也没做过导出图片的excel,正好这两天做这个需求就做了一个,好 废话不多说,直接上图 ,因为我这边是根据模板导出数据 先看下模板 然后上代码 ...
- java excel row遍历空_Java poi读取,写入Excel,处理row和cell可能为空的情况
首先需要导入包 import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.NP ...
- java读取excel某个单元格的值_java poi怎么获取excel单元格的内容
展开全部 package edu.sjtu.erplab.poi; import java.io.InputStream&ch=ww.xqy.chain" target=" ...
- java poi 读取 word图片_Java Poi 根据文字内容 插入 word 图片-Go语言中文社区
需求描述 如下图,我需要在word里根据一个图片的名字,将名字替换成该图片(公章) 思路: 用POI遍历每一个表格里的每一行的每一个单元格,如果遇到我自己定义的"&章",则 ...
最新文章
- linux 中如何将文件粘贴到usr下的lib内,学会在Linux下GCC生成和使用静态库和动态库...
- Codeforces Round #420 E
- ACM试题 - ASCII码排序 - Java中字符与对应ASCII码的转换
- BZOJ1016:[JSOI2008]最小生成树计数——题解
- 统计学习导论_统计机器学习之扫盲导论篇
- neo4j 连接超时_Neo4j:遍历查询超时
- Coursera自动驾驶课程第14讲:Linear and Nonlinear Kalman Filters
- Linux Socket C语言网络编程:Select Socket
- 微信上传图文素材接口报41005错误解决方法
- mobaxterm为什么无法连接_为什么 TCP 建立连接需要三次握手
- 英语听力计算机教室,每日英语听力电脑版|每日英语听力 v9.2.0 PC客户端
- 浅谈HTML页面基本结构
- 【DDRNet】DDRNet项目使用单GPU、自己的数据集训练、得到测试图像
- Pycharm专业版最新版下载安装(社区版和专业版并存)
- JavaScript中6种继承方式总结
- 腾讯反360秘密会议
- 拾起童年的回忆 - 手把手教你制作飞机大战小游戏
- MUI增加BeeCloud支付集成示例
- debian常用命令整理
- 股票的最新和历史股息收益率查询(3)