1. package com.smbea.demo.excel;
  2.  
  3. import java.awt.image.BufferedImage;
  4. import java.io.ByteArrayOutputStream;
  5. import java.io.File;
  6. import java.io.FileNotFoundException;
  7. import java.io.FileOutputStream;
  8. import java.io.IOException;
  9. import java.io.InputStream;
  10. import java.net.HttpURLConnection;
  11. import java.net.MalformedURLException;
  12. import java.net.URL;
  13. import java.net.URLConnection;
  14.  
  15. import javax.imageio.ImageIO;
  16.  
  17. import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
  18. import org.apache.poi.hssf.usermodel.HSSFPatriarch;
  19. import org.apache.poi.hssf.usermodel.HSSFSheet;
  20. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  21.  
  22. /**
  23. * 在 Excel 中设置图片
  24. * @author hapday
  25. * @date 2017年1月20日 @time上午9:48:57
  26. */
  27. public class ExcelImageTest {
  28. /**
  29. * 在 Excel 中设置图片
  30. * 图片来源于网络
  31. * 通过 HTTP 协议获取
  32. */
  33. public static void excelSetImageForHTTP() {
  34. URL url = null; // URL 地址
  35.  
  36. try {
  37. url = new URL("http://images2015.cnblogs.com/blog/897247/201610/897247-20161012133845281-1066342716.png");
  38. } catch (MalformedURLException e) {
  39. e.printStackTrace();
  40. }
  41.  
  42. InputStream inputStream = null; // 输入流
  43.  
  44. try {
  45. HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); // 打开 HTTP 连接
  46.  
  47. int responseCode = httpURLConnection.getResponseCode();
  48. System.out.println("responseCode = " + responseCode);
  49.  
  50. if(404 == responseCode) {
  51. System.out.println("文件未找到!");
  52.  
  53. return;
  54. }
  55.  
  56. if(200 != responseCode) {
  57. return ;
  58. }
  59.  
  60. inputStream = httpURLConnection.getInputStream(); // 获取 HTTP 连接中的输入流
  61. } catch (IOException e) {
  62. e.printStackTrace();
  63. }
  64.  
  65. ByteArrayOutputStream excelByteArrayOutputStream = new ByteArrayOutputStream(); // 创建字节数组输出流
  66.  
  67. try {
  68. BufferedImage bufferedImage = ImageIO.read(inputStream); // 将原图片读取到图片缓冲区中
  69. ImageIO.write(bufferedImage, "png", excelByteArrayOutputStream); // 从图片缓冲区中的数据写入到字节数组输出流中
  70. } catch (IOException e) {
  71. e.printStackTrace();
  72. }
  73.  
  74. HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); // 创建一个工作簿,对应一个 Excel 文件
  75. HSSFSheet hssfSheet = hssfWorkbook.createSheet("image test"); // 在工作簿中创建一个工作表
  76. HSSFPatriarch hssfPatriarch = hssfSheet.createDrawingPatriarch(); // 在工作表中创建一个画布
  77. // HSSFClientAnchor hssfClientAnchor = new HSSFClientAnchor(0, 0, 255, 255, (short) 1, 1, (short) 8, 10); // 在指定坐标创建锚点
  78. /**
  79. * 第一个参数:左外边距
  80. * 第二个参数:上外边距
  81. * 第三个参数:右外边距
  82. * 第四个参数:下外边距
  83. * 第五个参数:起始行索引
  84. * 第六个参数:起始列索引
  85. * 第七个参数:结束行索引
  86. * 第八个参数:结束列索引
  87. */
  88. HSSFClientAnchor hssfClientAnchor = new HSSFClientAnchor(0, 0, 0, 0, (short) 1, 2, (short) 2, 3); // 在指定坐标创建锚点
  89. hssfPatriarch.createPicture(hssfClientAnchor, hssfWorkbook.addPicture(excelByteArrayOutputStream.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG)); // 在画布上创建图片,指定具体的锚点、图片输出流、图片格式
  90. FileOutputStream excelFileOutputStream = null; // Excel 文件输出流,用于向外部输出 Excel 文件
  91. try {
  92. excelFileOutputStream = new FileOutputStream("D:/excelImageTest.xls"); // 创建本地文件输出流
  93. } catch (FileNotFoundException e) {
  94. e.printStackTrace();
  95. }
  96. try {
  97. hssfWorkbook.write(excelFileOutputStream); // 将输出流写入到工作簿中
  98. } catch (IOException e) {
  99. e.printStackTrace();
  100. }
  101.  
  102. System.out.println("****** Excel 嵌入图片成功 *******");
  103.  
  104. try {
  105. excelFileOutputStream.close(); // 关闭输出流
  106. hssfWorkbook.close(); // 关闭工作簿流
  107. } catch (IOException e) {
  108. e.printStackTrace();
  109. }
  110. }
  111.  
  112. /**
  113. * 在 Excel 中设置图片
  114. * 图片来源于网络
  115. * 通过 HTTP 协议获取
  116. */
  117. public static void excelSetImageForHTTP2() {
  118. FileOutputStream excelFileOutputStream = null; // Excel 文件输出流,用于向外部输出 Excel 文件
  119. BufferedImage bufferedImage = null; // 图片缓冲区,用于在内存中缓存图片,以提高程序性能
  120. URL url = null; // URL 地址
  121. InputStream inputStream = null; // 输入流
  122.  
  123. try {
  124. url = new URL("http://images2015.cnblogs.com/blog/897247/201610/897247-20161012133845281-1066342716.png");
  125. } catch (MalformedURLException e) {
  126. e.printStackTrace();
  127. }
  128.  
  129. try {
  130. URLConnection urlConnection = url.openConnection(); // 打开 FTP 连接
  131. inputStream = urlConnection.getInputStream(); // 获取 FTP 连接中的输入流
  132. } catch (IOException e) {
  133. e.printStackTrace();
  134. }
  135.  
  136. ByteArrayOutputStream excelByteArrayOutputStream = new ByteArrayOutputStream(); // 创建字节数组输出流
  137.  
  138. try {
  139. bufferedImage = ImageIO.read(inputStream); // 将原图片读取到图片缓冲区中
  140. ImageIO.write(bufferedImage, "png", excelByteArrayOutputStream); // 从图片缓冲区中的数据写入到字节数组输出流中
  141. } catch (IOException e) {
  142. e.printStackTrace();
  143. }
  144.  
  145. HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); // 创建一个工作簿,对应一个 Excel 文件
  146. HSSFSheet hssfSheet = hssfWorkbook.createSheet("image test"); // 在工作簿中创建一个工作表
  147. HSSFPatriarch hssfPatriarch = hssfSheet.createDrawingPatriarch(); // 在工作表中创建一个画布
  148. HSSFClientAnchor hssfClientAnchor = new HSSFClientAnchor(0, 0, 255, 255, (short) 1, 1, (short) 8, 10); // 在指定坐标创建锚点
  149. hssfPatriarch.createPicture(hssfClientAnchor, hssfWorkbook.addPicture(excelByteArrayOutputStream.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG)); // 在画布上创建图片,指定具体的锚点、图片输出流、图片格式
  150. try {
  151. excelFileOutputStream = new FileOutputStream("D:/excelImageTest.xls"); // 创建本地文件输出流
  152. } catch (FileNotFoundException e) {
  153. e.printStackTrace();
  154. }
  155. try {
  156. hssfWorkbook.write(excelFileOutputStream); // 将输出流写入到工作簿中
  157. } catch (IOException e) {
  158. e.printStackTrace();
  159. }
  160.  
  161. System.out.println("****** Excel 嵌入图片成功 *******");
  162.  
  163. try {
  164. excelFileOutputStream.close(); // 关闭输出流
  165. hssfWorkbook.close(); // 关闭工作簿流
  166. } catch (IOException e) {
  167. e.printStackTrace();
  168. }
  169. }
  170.  
  171. /**
  172. * 在 Excel 中设置图片
  173. * 图片来源于本地磁盘
  174. */
  175. public static void excelSetPictureForLocal() {
  176. FileOutputStream excelFileOutputStream = null; // Excel 文件输出流,用于向外部输出 Excel 文件
  177. BufferedImage bufferedImage = null; // 图片缓冲区,用于在内存中缓存图片,以提高程序性能
  178. ByteArrayOutputStream excelByteArrayOutputStream = null; // 字节数组输出流
  179.  
  180. excelByteArrayOutputStream = new ByteArrayOutputStream(); // 创建字节数组输出流
  181. File imageSourceFile = new File("D:/网络7层示意图.jpg");
  182.  
  183. try {
  184. bufferedImage = ImageIO.read(imageSourceFile); // 将原图片读取到图片缓冲区中
  185. ImageIO.write(bufferedImage, "png", excelByteArrayOutputStream); // 从图片缓冲区中的数据写入到字节数组输出流中
  186. } catch (IOException e) {
  187. e.printStackTrace();
  188. }
  189.  
  190. HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); // 创建一个工作簿,对应一个 Excel 文件
  191. HSSFSheet hssfSheet = hssfWorkbook.createSheet("image test"); // 在工作簿中创建一个工作表
  192. HSSFPatriarch hssfPatriarch = hssfSheet.createDrawingPatriarch(); // 在工作表中创建一个画布
  193. HSSFClientAnchor hssfClientAnchor = new HSSFClientAnchor(0, 0, 255, 255, (short) 1, 1, (short) 8, 10); // 在指定坐标创建锚点
  194. hssfPatriarch.createPicture(hssfClientAnchor, hssfWorkbook.addPicture(excelByteArrayOutputStream.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG)); // 在画布上创建图片,指定具体的锚点、图片输出流、图片格式
  195. try {
  196. excelFileOutputStream = new FileOutputStream("D:/Excel中设置图片.xls"); // 创建本地文件输出流
  197. } catch (FileNotFoundException e) {
  198. e.printStackTrace();
  199. }
  200. try {
  201. hssfWorkbook.write(excelFileOutputStream); // 将输出流写入到工作簿中
  202. } catch (IOException e) {
  203. e.printStackTrace();
  204. }
  205.  
  206. System.out.println("****** Excel 嵌入图片成功 *******");
  207.  
  208. try {
  209. excelFileOutputStream.close(); // 关闭输出流
  210. hssfWorkbook.close(); // 关闭工作簿流
  211. } catch (IOException e) {
  212. e.printStackTrace();
  213. }
  214. }
  215.  
  216. public static void main(String[] args) {
  217. // excelSetImageForHTTP();
  218. excelSetImageForHTTP2();
  219. // excelSetPictureForLocal();
  220. }
  221. }

  

在 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. CF796B Find The Bone

    Zane the wizard is going to perform a magic show shuffling the cups. There are n cups, numbered from ...

  2. NYOJ1238 最小换乘 (dijkstra)

    最少换乘 时间限制:2000 ms  |  内存限制:65535 KB 难度:3   描述 欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行.Dr. Kong决定利用暑假好好游览一番.. ...

  3. springboot整合fastdfs

    首先pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...

  4. 【Cracking the Code Interview(5th edition)】一、数组与字符串(C++)

    1.1 实现一个算法,确定一个字符串的所有字符是否全都不同.不允许使用额外的数据结构. 解答:这里假定字符集为ASCII码,可以与面试官沟通确认字符串使用的字符集.由于字符集是有限的,建立一个数组模拟 ...

  5. Oracle 11g服务OracleDBConsoleorcl启动失败(异常或报错)

    OracleDBConsoleorcl:Oracle数据库控制台服务,orcl是Oracle的实例标识,默认的实例为orcl.在运行Enterprise Manager(企业管理器OEM)的时候,需要 ...

  6. 将优狐智能插座接入 Domoticz

    前言 前几天在某淘宝优惠中看到一个 WiFi 智能插座卖 29 块包邮,心想要是里面是 ESP8266 模块说不定可以刷上固件玩玩,就买了俩回来,记下折腾过程. 拆解 WiFi 智能插座的淘宝介绍页 ...

  7. django 异常问题总结

    1.问题1 在继承的类中: 403错误: views 添加:from django.core.context_processors import csrf def TestUEditor(reques ...

  8. 80C51单片机介绍

    80C51单片机属于MCS-51系列单片机,由Intel公司开发,其结构是8048的延伸,改进了8048的缺点. 增加了如乘(MUL).除(DIV).减(SUBB).比较(CMP).16位数据指针.布 ...

  9. hdu6229 Wandering Robots 2017沈阳区域赛M题 思维加map

    题目传送门 题目大意: 给出一张n*n的图,机器人在一秒钟内任一格子上都可以有五种操作,上下左右或者停顿,(不能出边界,不能碰到障碍物).题目给出k个障碍物,但保证没有障碍物的地方是强联通的,问经过无 ...

  10. java Sprint boot 学习之一

    <properties> <project.build.sourceEncoding>UTF-</project.build.sourceEncoding> < ...