首页 > 代码库 > 在 Excel 中设置图片
在 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 连接
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); // 在指定坐标创建锚点
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 中设置图片
* 图片来源于网络
* 通过 FTP 协议获取
*/
public static void excelSetImageForFTP() {
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();
// excelSetImageForFTP();
// excelSetPictureForLocal();
}
}
在 Excel 中设置图片
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。