java web中导出excel数据是常见的功能,最近遇到一个需求是在excel中插入图片。处理excel及其他微软办公系列软件常用的就是apache poi,它也是支持图片插入的。插入图片最主要的用到HSSFClientAnchor,HSSFClientAnchor的文档介绍如下:

public HSSFClientAnchor(int dx1,

int dy1,

int dx2,

int dy2,

short col1,

int row1,

short col2,

int row2)

Creates a new client anchor and sets the top-left and bottom-right coordinates of the anchor. Note: Microsoft Excel seems to sometimes disallow higher y1 than y2 or higher x1 than x2, you might need to reverse them and draw shapes vertically or horizontally flipped!

Parameters:

dx1 - the x coordinate within the first cell.//定义了图片在第一个cell内的偏移x坐标,既左上角所在cell的偏移x坐标,一般可设0dy1 - the y coordinate within the first cell.//定义了图片在第一个cell的偏移y坐标,既左上角所在cell的偏移y坐标,一般可设0dx2 - the x coordinate within the second cell.//定义了图片在第二个cell的偏移x坐标,既右下角所在cell的偏移x坐标,一般可设0dy2 - the y coordinate within the second cell.//定义了图片在第二个cell的偏移y坐标,既右下角所在cell的偏移y坐标,一般可设0col1 - the column (0 based) of the first cell.//第一个cell所在列,既图片左上角所在列row1 - the row (0 based) of the first cell.//图片左上角所在行col2 - the column (0 based) of the second cell.//图片右下角所在列row2 - the row (0 based) of the second cell.//图片右下角所在行

具体demo 如下:

[java] view plain copy

  1. import java.awt.image.BufferedImage;
  2. import java.io.ByteArrayOutputStream;
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import javax.imageio.ImageIO;
  6. import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
  7. import org.apache.poi.hssf.usermodel.HSSFPatriarch;
  8. import org.apache.poi.hssf.usermodel.HSSFSheet;
  9. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  10. public class ExcelExport {
  11. public static void main(String[] args) {
  12. FileOutputStream fileOut = null;
  13. BufferedImage bufferImg = null;
  14. try {
  15. ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
  16. //加载图片
  17. bufferImg = ImageIO.read(new File("e:/1.jpg"));
  18. ImageIO.write(bufferImg, "jpg", byteArrayOut);
  19. HSSFWorkbook wb = new HSSFWorkbook();
  20. HSSFSheet sheet1 = wb.createSheet("sheet1");
  21. HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();
  22. /**
  23. dx1 - the x coordinate within the first cell.//定义了图片在第一个cell内的偏移x坐标,既左上角所在cell的偏移x坐标,一般可设0
  24. dy1 - the y coordinate within the first cell.//定义了图片在第一个cell的偏移y坐标,既左上角所在cell的偏移y坐标,一般可设0
  25. dx2 - the x coordinate within the second cell.//定义了图片在第二个cell的偏移x坐标,既右下角所在cell的偏移x坐标,一般可设0
  26. dy2 - the y coordinate within the second cell.//定义了图片在第二个cell的偏移y坐标,既右下角所在cell的偏移y坐标,一般可设0
  27. col1 - the column (0 based) of the first cell.//第一个cell所在列,既图片左上角所在列
  28. row1 - the row (0 based) of the first cell.//图片左上角所在行
  29. col2 - the column (0 based) of the second cell.//图片右下角所在列
  30. row2 - the row (0 based) of the second cell.//图片右下角所在行
  31. */
  32. HSSFClientAnchor anchor = new HSSFClientAnchor(-100, 0, 0, 0,(short) 2, 2, (short) 5, 8);
  33. //插入图片
  34. patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
  35. fileOut = new FileOutputStream("e:/excel.xls");
  36. // 输出文件
  37. wb.write(fileOut);
  38. } catch (Exception e) {
  39. e.printStackTrace();
  40. }
  41. }
  42. }

关于dx1的设置的说明,dx2,dy1等都是类似的

关于一个excel设置设置多张图片的demo

[java] view plain copy

  1. package com.poi;
  2. import java.awt.image.BufferedImage;
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.File;
  5. import java.io.FileOutputStream;
  6. import javax.imageio.ImageIO;
  7. import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
  8. import org.apache.poi.hssf.usermodel.HSSFPatriarch;
  9. import org.apache.poi.hssf.usermodel.HSSFSheet;
  10. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  11. public class ExcelExport {
  12. public static void main(String[] args) {
  13. FileOutputStream fileOut = null;
  14. BufferedImage bufferImg = null;
  15. try {
  16. ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
  17. //加载图片
  18. bufferImg = ImageIO.read(new File("e:/1.jpg"));
  19. ImageIO.write(bufferImg, "jpg", byteArrayOut);
  20. HSSFWorkbook wb = new HSSFWorkbook();
  21. HSSFSheet sheet1 = wb.createSheet("sheet1");
  22. HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();
  23. HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0,(short) 2, 2, (short) 5, 8);
  24. //插入图片 1
  25. patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
  26. //图片2
  27. anchor = new HSSFClientAnchor(200, 0, 0, 0,(short) 2, 9, (short) 5, 15);
  28. patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
  29. fileOut = new FileOutputStream("e:/excel.xls");
  30. // 输出文件
  31. wb.write(fileOut);
  32. } catch (Exception e) {
  33. e.printStackTrace();
  34. }
  35. }
  36. }

总体来说使用poi还是很方便的。

java poi 在excel中插入图片相关推荐

  1. Java Poi 向excel中插入图片

    博客 package com.unicom.yangjiabin.utils;import java.awt.image.BufferedImage; import java.io.ByteArray ...

  2. Java POI XSSFWorkbook Excel中插入图片

    对Excel指定单元格插入图片 一.不懂就@我,不怕麻烦嘿嘿嘿 二.参考方法(希望能有帮助) 一.不懂就@我,不怕麻烦嘿嘿嘿 引入Pom <dependency><groupId&g ...

  3. poi 向Excel中插入图片

    使用poi向excel中插入图片 直接上代码,我这里的图片是项目中的一个logo图片,所以是直接springboot读取本地文件的方式 主要解释一下定位图片位置的八个参数int dx1, int dy ...

  4. java POI在excel中插入等比例缩放的图片

    这个缩放的比例不是很准确,但还凑合能用,目前本人找不到其它方法,就先用这个. 先看一个关键的API方法:void org.apache.poi.ss.usermodel.Picture.resize( ...

  5. java 读取excel 图片_利用Java+POI 读写Excel文档向Excel中插入图片

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

  6. java中excel导入图片_java POI实现向Excel中插入图片

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

  7. excel poi 加背景图_java 在Excel中插入图片 POI实现

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

  8. 使用POI向Excel中插入多張图片

    2019独角兽企业重金招聘Python工程师标准>>> POI3.0以上版本才支持向Excel中插入图片 http://apache.freelamp.com/jakarta/poi ...

  9. [转载] 使用openpyxl模块向Excel中插入图片

    参考链接: Python | 使用openpyxl模块在Excel工作表中绘制图表 2 使用openpyxl模块向Excel中插入图片 示例Python实现结果展示 示例 向一个Excel表格中A1位 ...

最新文章

  1. PyODPS 学习 实现查询数据 并更新数据
  2. 2021年春季学期-信号与系统-第四次作业参考答案-MATLAB实验1
  3. 重复数据删除将成标配功能
  4. 分布式入门,怎样用PyTorch实现多GPU分布式训练
  5. c# 基于layui的通用后台管理系统_基于spring boot和vuejs的通用后台管理系统脚手架 guns-lite...
  6. sql中datetime日期类型字段比较(mysqloracle)
  7. Python自动化测试框架有哪些?
  8. macOSX中使用python matplotlib模块的问题解决
  9. php 盾灵新闻系统,代码审计 | 记一次盾灵系统审计从后台到Getshell
  10. Tools (StExBar vs Cmder)which can switch to command line window on context menu in windows OS
  11. 【转载】SQL Server 2005关于数据类型最大值(3)
  12. Java 垃圾收集策略、垃圾分代回收算法、垃圾回收运作流程
  13. 北斗导航 | RAIM算法流程图
  14. eclipse做html登录界面代码,在eclipse中怎麽编写一个登陆界面的代码,如新浪邮箱的登陆的? 爱问知识人...
  15. 财务想转行?SAP咨询顾问了解一下
  16. vivos5字体怎么变大_vivos5手机参数
  17. 计算机键盘汉字,统一码计算机汉字键盘输入法
  18. 综合能源管理电力市场改革的主要问题及分析_能谱网
  19. [转]【C/C++】STL详解
  20. FPGA:开发环境Vivado的使用

热门文章

  1. 电磁波在地球物理勘探中的应用
  2. 千耘导航QY210Pro|常见故障及解决方案
  3. 通过css设置鼠标的形状
  4. SysFader: iexplore.exe 应用程序错误的最终解决方案
  5. 《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》论文翻译--中英对照
  6. 2021职业健康体检项目有哪些?
  7. 格行sp790-v13的随身WiFi板子怎么切卡上网同样也是高通410
  8. 从Excel中提取数据
  9. 一阶 sigma_delta DAC
  10. struts多模块开发