今天来说下在Java当中使用poi将将图片Base64编码写入到Excel表格当中,以前我们都是在表格中写内容,但不防会有时让写出图片等功能,比如说做一些评价功能,上传图片那是必然的,接下来我就说下整体步骤


首先,第一步,导入pom包

<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.9</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>3.9</version>
</dependency>

第二步,省略一些其余代码,写上关键的,使用当前sheet创建一个画图顶级管理器,一个sheet只能获取一个

/*** @author wfeil211@foxmail.com* @version 2020-5-9 18:30:00*/
//画图的顶级管理器,一个sheet只能获取一个(一定要注意这点)
Drawing patriarch = sheet.createDrawingPatriarch();

第三步,将当前画入图片的位置表格调整,i为X轴位置,256为poi中固定像素值,不可修改

/*** @author wfeil211@foxmail.com* @version 2020-5-9 18:30:00*/
sheet.setColumnWidth(i, 30 * 256);
row.setHeight((short) (6 * 256));

第三步,开始画图

/*** @author wfeil211@foxmail.com* @version 2020-5-9 18:30:00*/
//anchor主要用于设置图片的属性
//  dx1  第1个单元格中x轴的偏移量
//  dy1  第1个单元格中y轴的偏移量
//  dx2  第2个单元格中x轴的偏移量
//  dy2  第2个单元格中y轴的偏移量
//  col1 第1个单元格的列号
//  row1 第1个单元格的行号
//  col2 第2个单元格的列号
//  row2 第2个单元格的行号
ClientAnchor anchor = new XSSFClientAnchor(0, 0, 255, 255,  i, rowNum+j+2,  i+1, rowNum+j+3);
anchor.setAnchorType(3);
//插入图片
BASE64Decoder decoder = new BASE64Decoder();
byte[] decoderBytes = new byte[0];
try {decoderBytes = decoder.decodeBuffer(base64Str);
} catch (IOException e) {e.printStackTrace();
}
patriarch.createPicture(anchor, wb.addPicture(decoderBytes, HSSFWorkbook.PICTURE_TYPE_JPEG));

至此完美写入成功,由于此方法必须先将图片转为byteArray数组形式,所以先将图片base64编码转为byteArray(即图中base64Str)

***注意:new XSSFClientAnchor(0,0,0,0,0,0,0,0) 中有8位数值,分别代表

1. dx1  第1个单元格中x轴的偏移量
2. dy1  第1个单元格中y轴的偏移量
3. dx2  第2个单元格中x轴的偏移量
4. dy2  第2个单元格中y轴的偏移量
5. col1 第1个单元格的列号
6. row1 第1个单元格的行号
7. col2 第2个单元格的列号
8. row2 第2个单元格的行号

其中前四位,为偏移量,暂且不用理会,根据自己需求而定,当然256为倍数,后四位代表Excel表格中XY轴坐标位置,计算好数值即可完美定位图片位置

导出图例

Java教程:Java使用POI将图片Base64编码写入到Excel表格当中相关推荐

  1. java多图片上传json_[Java教程]SpringMVC框架五:图片上传与JSON交互

    [Java教程]SpringMVC框架五:图片上传与JSON交互 0 2018-08-07 22:00:42 在正式图片上传之前,先处理一个细节问题: 每一次发布项目,Tomcat都会重新解压war包 ...

  2. java canvas 画图片_[Java教程][HTML5] Canvas绘制简单图片

    [Java教程][HTML5] Canvas绘制简单图片 0 2016-05-13 13:00:04 获取Image对象,new出来 定义Image对象的src属性,参数:图片路径 定义Image对象 ...

  3. Java教程:使用POI读取excel文档(根据BV1bJ411G7Aw整理)

    Java教程:使用POI读取excel文档(根据BV1bJ411G7Aw整理) 最近公司需要我做一个导出Excel表格的功能,为此来学习一下POI,在这里记录一下学习笔记.B站直接搜BV1bJ411G ...

  4. java抓取网页标题内容_[Java教程]java 网页页面抓取标题和正文

    [Java教程]java 网页页面抓取标题和正文 0 2014-07-10 09:01:30 import java.io.BufferedReader;import java.io.IOExcept ...

  5. java字符流实际上也是字节,[Java教程]Java字节流与字符流的区别

    [Java教程]Java字节流与字符流的区别 0 2017-05-22 12:00:42 字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身 ...

  6. java播放器使用教程_[Java教程]Java音乐播放器

    [Java教程]Java音乐播放器 0 2016-01-07 12:00:09 乐乐音乐目前是基于musique开发的一个java音乐播放器,之前开发了一个android版本的音乐播放器,现在把and ...

  7. java删减pdf内容合并_[Java教程]Java基础之PDF文件的合并

    [Java教程]Java基础之PDF文件的合并 0 2017-07-28 00:00:45 1.首先下载一个jar包:pdfbox-app-1.7.1.jar 2.代码如下:package com;i ...

  8. java语言金山打字_[Java教程]java实现 swing模仿金山打字 案例源码

    [Java教程]java实现 swing模仿金山打字 案例源码 0 2014-11-17 12:00:21 java实现 swing模仿金山打字 案例源码,更多Java技术就去Java教程网.http ...

  9. java rsa 生成公钥私钥_[Java教程]java RSA 生成公钥私钥

    [Java教程]java RSA 生成公钥私钥 0 2016-10-14 17:00:15 /** * 引进的包都是Java自带的jar包 * 秘钥相关包 * base64 编解码 * 这里只用到了编 ...

最新文章

  1. yii2 windows 安装
  2. Parse error. Expected a command name
  3. python随机生成中文字符串_用Python生成随机UTF-8字符串
  4. nyoj1228矩形判断
  5. tr的display属性出现td的colspan无效问题
  6. springboot+mybatis实现数据分页(三种方式)
  7. Windows7跑星际争霸问题解决——为了继续星际争霸的辉煌!
  8. 在c#中用mutex类实现线程的互斥_面试官经常问的synchronized实现原理和锁升级过程,你真的了解吗...
  9. php与eCharts结合,23.安装php和echarts进行结合展示图表
  10. 三角函数和复指数函数的转化_三角函数与复数
  11. 为什么2 *(i * i)比Java中的2 * i * i更快?
  12. JavaSE基础———StringBuffer StringBuilder Arrays和基本数据类型包装类
  13. 《数据库系统基础教程》概念
  14. Mac终端adb安卓刷机
  15. 互联网时代没有囊括进来的流量,在产业互联网时代全部都被囊括进来
  16. 【计算机系统】LC-3中断试验
  17. ✿2021NEWCTF6.1萌新赛✿MISC-all-WP
  18. yum install pcre pcre-devel 报错
  19. 使用计算机的好习惯教学设计,《我的好习惯》教学设计
  20. 大数据运维架构师培训(1):Zookeeper,Hadoop(HDFS,MR,Yarn)

热门文章

  1. 【R1CS to QAP】
  2. linux lvm删除分区,Linux LVM中的PV物理卷(硬盘或分区)删除方法
  3. vue tsx render函数 transition动画不生效
  4. 跨平台应用开发进阶(十一) :uni-app 实现IOS原生APP-云打包集成极光推送(JG-JPUSH)详细教程
  5. 你懂得“沉没成本”是什么吗?是可怕的赌徒思想,会毁了你的一生
  6. 【介绍+代码实现】使用GradualWarmupScheduler进行学习率预热
  7. 蚂蚁集团境外站点 Seata 实践与探索
  8. STM32单片机程序dll实现
  9. python-requests官网_Python-Requests1-批量登录获取uid
  10. MySQL 服务无法打开的解决方法