在 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中把图片合并进图表的方法介绍
方法一: 使用“图案”对话框 双击某个数据系列,选择“图案”标签,单击“填充效果”按钮,在“填充效果”对话框中选择“图片”标签,单击“选择图片”按钮,选择一个要使用的图形文件即可. 方法二: 使用剪贴 ...
随机推荐
- CF796B Find The Bone
Zane the wizard is going to perform a magic show shuffling the cups. There are n cups, numbered from ...
- NYOJ1238 最小换乘 (dijkstra)
最少换乘 时间限制:2000 ms | 内存限制:65535 KB 难度:3 描述 欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行.Dr. Kong决定利用暑假好好游览一番.. ...
- springboot整合fastdfs
首先pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...
- 【Cracking the Code Interview(5th edition)】一、数组与字符串(C++)
1.1 实现一个算法,确定一个字符串的所有字符是否全都不同.不允许使用额外的数据结构. 解答:这里假定字符集为ASCII码,可以与面试官沟通确认字符串使用的字符集.由于字符集是有限的,建立一个数组模拟 ...
- Oracle 11g服务OracleDBConsoleorcl启动失败(异常或报错)
OracleDBConsoleorcl:Oracle数据库控制台服务,orcl是Oracle的实例标识,默认的实例为orcl.在运行Enterprise Manager(企业管理器OEM)的时候,需要 ...
- 将优狐智能插座接入 Domoticz
前言 前几天在某淘宝优惠中看到一个 WiFi 智能插座卖 29 块包邮,心想要是里面是 ESP8266 模块说不定可以刷上固件玩玩,就买了俩回来,记下折腾过程. 拆解 WiFi 智能插座的淘宝介绍页 ...
- django 异常问题总结
1.问题1 在继承的类中: 403错误: views 添加:from django.core.context_processors import csrf def TestUEditor(reques ...
- 80C51单片机介绍
80C51单片机属于MCS-51系列单片机,由Intel公司开发,其结构是8048的延伸,改进了8048的缺点. 增加了如乘(MUL).除(DIV).减(SUBB).比较(CMP).16位数据指针.布 ...
- hdu6229 Wandering Robots 2017沈阳区域赛M题 思维加map
题目传送门 题目大意: 给出一张n*n的图,机器人在一秒钟内任一格子上都可以有五种操作,上下左右或者停顿,(不能出边界,不能碰到障碍物).题目给出k个障碍物,但保证没有障碍物的地方是强联通的,问经过无 ...
- java Sprint boot 学习之一
<properties> <project.build.sourceEncoding>UTF-</project.build.sourceEncoding> < ...