在 Excel 中设置图片
package com.smbea.demo.excel; import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection; import javax.imageio.ImageIO; import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; /**
* 在 Excel 中设置图片
* @author hapday
* @date 2017年1月20日 @time上午9:48:57
*/
public class ExcelImageTest {
/**
* 在 Excel 中设置图片
* 图片来源于网络
* 通过 HTTP 协议获取
*/
public static void excelSetImageForHTTP() {
URL url = null; // URL 地址 try {
url = new URL("http://images2015.cnblogs.com/blog/897247/201610/897247-20161012133845281-1066342716.png");
} catch (MalformedURLException e) {
e.printStackTrace();
} InputStream inputStream = null; // 输入流 try {
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); // 打开 HTTP 连接 int responseCode = httpURLConnection.getResponseCode();
System.out.println("responseCode = " + responseCode); if(404 == responseCode) {
System.out.println("文件未找到!"); return;
} if(200 != responseCode) {
return ;
} inputStream = httpURLConnection.getInputStream(); // 获取 HTTP 连接中的输入流
} catch (IOException e) {
e.printStackTrace();
} ByteArrayOutputStream excelByteArrayOutputStream = new ByteArrayOutputStream(); // 创建字节数组输出流 try {
BufferedImage bufferedImage = ImageIO.read(inputStream); // 将原图片读取到图片缓冲区中
ImageIO.write(bufferedImage, "png", excelByteArrayOutputStream); // 从图片缓冲区中的数据写入到字节数组输出流中
} catch (IOException e) {
e.printStackTrace();
} HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); // 创建一个工作簿,对应一个 Excel 文件
HSSFSheet hssfSheet = hssfWorkbook.createSheet("image test"); // 在工作簿中创建一个工作表
HSSFPatriarch hssfPatriarch = hssfSheet.createDrawingPatriarch(); // 在工作表中创建一个画布
// HSSFClientAnchor hssfClientAnchor = new HSSFClientAnchor(0, 0, 255, 255, (short) 1, 1, (short) 8, 10); // 在指定坐标创建锚点
/**
* 第一个参数:左外边距
* 第二个参数:上外边距
* 第三个参数:右外边距
* 第四个参数:下外边距
* 第五个参数:起始行索引
* 第六个参数:起始列索引
* 第七个参数:结束行索引
* 第八个参数:结束列索引
*/
HSSFClientAnchor hssfClientAnchor = new HSSFClientAnchor(0, 0, 0, 0, (short) 1, 2, (short) 2, 3); // 在指定坐标创建锚点
hssfPatriarch.createPicture(hssfClientAnchor, hssfWorkbook.addPicture(excelByteArrayOutputStream.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG)); // 在画布上创建图片,指定具体的锚点、图片输出流、图片格式
FileOutputStream excelFileOutputStream = null; // Excel 文件输出流,用于向外部输出 Excel 文件
try {
excelFileOutputStream = new FileOutputStream("D:/excelImageTest.xls"); // 创建本地文件输出流
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
hssfWorkbook.write(excelFileOutputStream); // 将输出流写入到工作簿中
} catch (IOException e) {
e.printStackTrace();
} System.out.println("****** Excel 嵌入图片成功 *******"); try {
excelFileOutputStream.close(); // 关闭输出流
hssfWorkbook.close(); // 关闭工作簿流
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 在 Excel 中设置图片
* 图片来源于网络
* 通过 HTTP 协议获取
*/
public static void excelSetImageForHTTP2() {
FileOutputStream excelFileOutputStream = null; // Excel 文件输出流,用于向外部输出 Excel 文件
BufferedImage bufferedImage = null; // 图片缓冲区,用于在内存中缓存图片,以提高程序性能
URL url = null; // URL 地址
InputStream inputStream = null; // 输入流 try {
url = new URL("http://images2015.cnblogs.com/blog/897247/201610/897247-20161012133845281-1066342716.png");
} catch (MalformedURLException e) {
e.printStackTrace();
} try {
URLConnection urlConnection = url.openConnection(); // 打开 FTP 连接
inputStream = urlConnection.getInputStream(); // 获取 FTP 连接中的输入流
} catch (IOException e) {
e.printStackTrace();
} ByteArrayOutputStream excelByteArrayOutputStream = new ByteArrayOutputStream(); // 创建字节数组输出流 try {
bufferedImage = ImageIO.read(inputStream); // 将原图片读取到图片缓冲区中
ImageIO.write(bufferedImage, "png", excelByteArrayOutputStream); // 从图片缓冲区中的数据写入到字节数组输出流中
} catch (IOException e) {
e.printStackTrace();
} HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); // 创建一个工作簿,对应一个 Excel 文件
HSSFSheet hssfSheet = hssfWorkbook.createSheet("image test"); // 在工作簿中创建一个工作表
HSSFPatriarch hssfPatriarch = hssfSheet.createDrawingPatriarch(); // 在工作表中创建一个画布
HSSFClientAnchor hssfClientAnchor = new HSSFClientAnchor(0, 0, 255, 255, (short) 1, 1, (short) 8, 10); // 在指定坐标创建锚点
hssfPatriarch.createPicture(hssfClientAnchor, hssfWorkbook.addPicture(excelByteArrayOutputStream.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG)); // 在画布上创建图片,指定具体的锚点、图片输出流、图片格式
try {
excelFileOutputStream = new FileOutputStream("D:/excelImageTest.xls"); // 创建本地文件输出流
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
hssfWorkbook.write(excelFileOutputStream); // 将输出流写入到工作簿中
} catch (IOException e) {
e.printStackTrace();
} System.out.println("****** Excel 嵌入图片成功 *******"); try {
excelFileOutputStream.close(); // 关闭输出流
hssfWorkbook.close(); // 关闭工作簿流
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 在 Excel 中设置图片
* 图片来源于本地磁盘
*/
public static void excelSetPictureForLocal() {
FileOutputStream excelFileOutputStream = null; // Excel 文件输出流,用于向外部输出 Excel 文件
BufferedImage bufferedImage = null; // 图片缓冲区,用于在内存中缓存图片,以提高程序性能
ByteArrayOutputStream excelByteArrayOutputStream = null; // 字节数组输出流 excelByteArrayOutputStream = new ByteArrayOutputStream(); // 创建字节数组输出流
File imageSourceFile = new File("D:/网络7层示意图.jpg"); try {
bufferedImage = ImageIO.read(imageSourceFile); // 将原图片读取到图片缓冲区中
ImageIO.write(bufferedImage, "png", excelByteArrayOutputStream); // 从图片缓冲区中的数据写入到字节数组输出流中
} catch (IOException e) {
e.printStackTrace();
} HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); // 创建一个工作簿,对应一个 Excel 文件
HSSFSheet hssfSheet = hssfWorkbook.createSheet("image test"); // 在工作簿中创建一个工作表
HSSFPatriarch hssfPatriarch = hssfSheet.createDrawingPatriarch(); // 在工作表中创建一个画布
HSSFClientAnchor hssfClientAnchor = new HSSFClientAnchor(0, 0, 255, 255, (short) 1, 1, (short) 8, 10); // 在指定坐标创建锚点
hssfPatriarch.createPicture(hssfClientAnchor, hssfWorkbook.addPicture(excelByteArrayOutputStream.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG)); // 在画布上创建图片,指定具体的锚点、图片输出流、图片格式
try {
excelFileOutputStream = new FileOutputStream("D:/Excel中设置图片.xls"); // 创建本地文件输出流
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
hssfWorkbook.write(excelFileOutputStream); // 将输出流写入到工作簿中
} catch (IOException e) {
e.printStackTrace();
} System.out.println("****** Excel 嵌入图片成功 *******"); try {
excelFileOutputStream.close(); // 关闭输出流
hssfWorkbook.close(); // 关闭工作簿流
} catch (IOException e) {
e.printStackTrace();
}
} public static void main(String[] args) {
// excelSetImageForHTTP();
excelSetImageForHTTP2();
// excelSetPictureForLocal();
}
}
在 Excel 中设置图片的更多相关文章
- java POI实现向Excel中插入图片
做Web开发免不了要与Excel打交道.今天老大给我一个任务-导出Excel.开始想的还是蛮简单的,无非就是查找,构建Excel,response下载即可.但是有一点不同,就是要加入图片, ...
- java 在Excel中插入图片 POI实现
一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97- ...
- Open Xml 读取Excel中的图片
在我的一个项目中,需要分析客户提供的Excel, 读出其中的图片信息(显示在Excel的第几行,第几列,以及图片本身). 网络上有许多使用Open Xml插入图片到Word,Excel的文章, 但 ...
- c# 应用NPOI 获取Excel中的图片,保存至本地的算法
要求:读取excel中的图片,保存到指定路径 思路: 利用NPOI中 GetAllPictures()方法获取图片信息 步骤: 1.新建一个Windows窗体应用程序 2.桌面新建一个excel,贴 ...
- Python读取excel中的图片
作为Java程序员,Java自然是最主要的编程语言.但是Java适合完成大型项目,对于平时工作中小的工作任务,需要快速完成,易于修改和调试,使用Java显得很繁琐,需要进行类的设计,打成jar包,出现 ...
- 在css中设置图片的背景图,怎么设置图片纵向拉伸
css中设置背景图拉伸填充,在css2.1之前这个背景的长宽值是不能被修改的. 实际的结果是只能重复显示,可以使用repeat,repeat-x,repeat-y,no-repeat这些属性来控制背景 ...
- JAVA抠取Excel中的图片
EXCEL中扔了一堆的图片,老大让对应到数据库中的数据上.思路先把图片抠出存成单个图片.然后上传到服务器,取下路径更新到数据库中. 注释掉的部分为有多个Excel时使用. package com.** ...
- Android 在onActivityResult()中设置图片setImageResource(resId) 或者改变view属性,不成功的解决办法
如果试验过的朋友就会发现,在onActivityResult()中设置这些属性,好像都不工作,虽然我死磕一番还是不知道具体原因,我直接默认它可能就是不能在里面设置,所以就只能在其他地方设置,幸好发现A ...
- Excel中把图片合并进图表的方法介绍
方法一: 使用“图案”对话框 双击某个数据系列,选择“图案”标签,单击“填充效果”按钮,在“填充效果”对话框中选择“图片”标签,单击“选择图片”按钮,选择一个要使用的图形文件即可. 方法二: 使用剪贴 ...
随机推荐
- github 的使用步骤
1. github是一个git项目托管网站 注册地址:https://github.com/signup/free 2. 安装git程序,执行下面操作 $ cd ~/.ssh //检查计算机ssh密钥 ...
- C++基础学习10:继承
继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似. 继承可以理解为一个类从另一个类获取方法(函数)和属性(成员变量)的过程.如果类B继承于类A,那么B就 ...
- Could not instantiate bean class [org.springframework.data.mongodb.core.MongoTemplate]
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'repositoryDa ...
- 【Leetcode】Largest Rectangle in Histogram
Given n non-negative integers representing the histogram's bar height where the width of each bar is ...
- P5221 Product(莫比乌斯反演)
CYJian的新春虐题赛- 比赛详情 [题目链接] https://www.luogu.org/problemnew/show/P5221 求 \(\prod_{i=1}^{N}\prod_{j=1} ...
- day17 isinstance type issubclass 反射
1. issubclass,type,isinstance 1.issubclass 判断xxx是否yyy的子类 例: class Foo: pass class Bar(Foo): pass cla ...
- linux中firewall与iptables防火墙服务
火墙firewall-cmd --state 查看火墙的状态firewall-cmd --get-active-zones 目前所处的域firewall-cmd --get-default-zone ...
- Go语言基础之20--web编程框架之Gin框架
一.Gin框架介绍 1.1 简介 A. 基于httprouter开发的web框架. http://github.com/julienschmidt/httprouter B. 提供Martini风格的 ...
- Go语言基础之6--值类型和引用类型
一. 引用类型 引用类型理解为(C语言):指针 Golang中只有三种引用类型:slice(切片).map(字典).channel(管道): 实例1-1 package main import &qu ...
- APPcrawler基础原理解析及使用
一.背景 一年前,我们一直在用monkey进行Android 的稳定性测试 ,主要目的就是为了测试app 是否会产生Crash,是否会有ANR,页面错误等问题,在monkey测试过程中,实现了脱离Ca ...