之前的文章介绍了POI的基本操作,包括创建excel,写入数据并且设置格式。不过这还不够,我们有时候的需求是把图片导出到excel中,那么这一篇就简单讲解下怎么把图片保存到excel当中。
1、插入图片到excel中
package com.zdw.poi;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
/**
* 测试创建Workbook的excel,把图片导出到excel中
*/
public class TestCellStyle {
public static void main(String[] args) throws Exception {
//创建工作簿,excel2007版本的,如果是excel2003的话。创建的对象是:HSSFWorkbook
Workbook workbook = new SXSSFWorkbook();
//创建sheet
Sheet sheet = workbook.createSheet("picture sheet");
//创建文件输入流
FileInputStream inputStream = new FileInputStream("D:\\2345Downloads\\datupian.png");
//利用POI提供的工具类把文件流转化成二进制数据
byte[] bytes = IOUtils.toByteArray(inputStream);
//向POI内存中添加一张图片,返回图片在图片集合中的索引
int pictureIndex = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);//参数一:图片的二进制数据,参数二:图片类型
//从Workbook中得到绘制图片的工具类
CreationHelper helper = workbook.getCreationHelper();
//创建锚点,设置图片坐标
ClientAnchor clientAnchor = helper.createClientAnchor();
clientAnchor.setRow1(2);//设置起始行
clientAnchor.setCol1(3);//设置起始列
//从sheet对象中得到一个绘图对象
Drawing<?> drawingPatriarch = sheet.createDrawingPatriarch();
//绘制图片,锚点,图片在内存中的位置
Picture picture = drawingPatriarch.createPicture(clientAnchor, pictureIndex);
// 使用固定的长宽比例系数
double a = 10;//表示的是10列
double b = 15;//表示的是15行
picture.resize(a,b);//自适应渲染图片
//创建文件输出流
FileOutputStream out = new FileOutputStream("D:\\2345Downloads\\picture2.xlsx");
//调用工作簿的write创建excel
workbook.write(out);
out.close();
}
}
效果: