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 中设置图片的更多相关文章

  1. java POI实现向Excel中插入图片

          做Web开发免不了要与Excel打交道.今天老大给我一个任务-导出Excel.开始想的还是蛮简单的,无非就是查找,构建Excel,response下载即可.但是有一点不同,就是要加入图片, ...

  2. java 在Excel中插入图片 POI实现

    一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97- ...

  3. Open Xml 读取Excel中的图片

      在我的一个项目中,需要分析客户提供的Excel, 读出其中的图片信息(显示在Excel的第几行,第几列,以及图片本身). 网络上有许多使用Open Xml插入图片到Word,Excel的文章, 但 ...

  4. c# 应用NPOI 获取Excel中的图片,保存至本地的算法

    要求:读取excel中的图片,保存到指定路径 思路:  利用NPOI中 GetAllPictures()方法获取图片信息 步骤: 1.新建一个Windows窗体应用程序 2.桌面新建一个excel,贴 ...

  5. Python读取excel中的图片

    作为Java程序员,Java自然是最主要的编程语言.但是Java适合完成大型项目,对于平时工作中小的工作任务,需要快速完成,易于修改和调试,使用Java显得很繁琐,需要进行类的设计,打成jar包,出现 ...

  6. 在css中设置图片的背景图,怎么设置图片纵向拉伸

    css中设置背景图拉伸填充,在css2.1之前这个背景的长宽值是不能被修改的. 实际的结果是只能重复显示,可以使用repeat,repeat-x,repeat-y,no-repeat这些属性来控制背景 ...

  7. JAVA抠取Excel中的图片

    EXCEL中扔了一堆的图片,老大让对应到数据库中的数据上.思路先把图片抠出存成单个图片.然后上传到服务器,取下路径更新到数据库中. 注释掉的部分为有多个Excel时使用. package com.** ...

  8. Android 在onActivityResult()中设置图片setImageResource(resId) 或者改变view属性,不成功的解决办法

    如果试验过的朋友就会发现,在onActivityResult()中设置这些属性,好像都不工作,虽然我死磕一番还是不知道具体原因,我直接默认它可能就是不能在里面设置,所以就只能在其他地方设置,幸好发现A ...

  9. Excel中把图片合并进图表的方法介绍

    方法一: 使用“图案”对话框 双击某个数据系列,选择“图案”标签,单击“填充效果”按钮,在“填充效果”对话框中选择“图片”标签,单击“选择图片”按钮,选择一个要使用的图形文件即可. 方法二: 使用剪贴 ...

随机推荐

  1. ubuntu部署django详细教程

    教程使用的软件版本:Ubuntu 18.04.1 LTS,django2.0,Python 3.6.5.nginx-1.13.7.uWSGI (2.0.17.1),Ubuntu是纯净的,全新的.下面我 ...

  2. delay JS延迟执行

    window.onscroll = function () {    throttle(trrigerAdd,window);};function trrigerAdd(){    var $dHei ...

  3. [51nod1237] 最大公约数之和 V3(杜教筛)

    题面 传送门 题解 我好像做过这题-- \[ \begin{align} ans &=\sum_{i=1}^n\sum_{j=1}^n\gcd(i,j)\\ &=\sum_{d=1}^ ...

  4. 新姿势!Redis中调用Lua脚本以实现原子性操作

    背景:有一服务提供者Leader,有多个消息订阅者Workers.Leader是一个排队程序,维护了一个用户队列,当某个资源空闲下来并被分配至队列中的用户时,Leader会向订阅者推送消息(消息带有唯 ...

  5. luogu4151 最大XOR和路径

    然后呢这道题其实很简单 我们先考虑一种简单的情况,从1直接走到n(不管怎么走的,反正就是走) 然后就能找到一个路径了 这个走的过程用各种zmj算法都能过 然后呢我们发现如果直接走基本不会得到最优解,考 ...

  6. VS2010 简单ATL COM开发

    http://blog.csdn.net/wangwenjing90/article/details/8771934#reply http://blog.csdn.net/wangwenjing90/ ...

  7. P1029 最大公约数和最小公倍数问题(思维题)

    题目描述 输入22个正整数x_0,y_0(2 \le x_0<100000,2 \le y_0<=1000000)x0​,y0​(2≤x0​<100000,2≤y0​<=100 ...

  8. Python入门字符编码

    计算机基础知识 一.应用程序任何操作硬件的请求都需要向操作系统发起系统调用,然后由操作系统去操作硬件 二.文本编辑器存取文件的原理 1.打开编辑器就打开了启动了一个进程,是在内存中的,所以,用编辑器编 ...

  9. 1.Ioc&DI和Spring

    1.面向对象回顾和案例 面向对象程序设计:1 2 3 4 案例分析: 需求分析: 报表功能:     报表服务类,检索数据,并生成图标     报表生成器类,生成不同格式的报表文件,例如PDF格式.H ...

  10. java实现压缩文件下载

    转载:https://www.cnblogs.com/zeng1994/p/7862288.html