工作越来越忙了,很久没来更新了,刚好今天抽个小空,整理下excel导出图片的总结,希望对你有用~
1、项目resources下创建文件夹file,将520.png图片放到文件夹下,代码如下:
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
// 读取图片
File file = ResourceUtils.getFile("classpath:file/520.png");
// 获取路径
String url = file.getAbsolutePath();
BufferedImage bufferImg = ImageIO.read(new File(url));
ImageIO.write(bufferImg, "png", byteArrayOut);
// 图片一导出到单元格A1中
HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,1023,255,(short) 0,0,(short) 0,0);
// 插入图片,注意这个问题PICTURE_TYPE_JPEG。如果导出的图片没有显示出来,改动这里
patriarch.createPicture(anchor, workbook.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
2、导出网络图片,例如:
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
URL url = new URL("https://t7.baidu.com/it/u=3281686603,2838365105&fm=193&f=GIF");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
InputStream inStream = conn.getInputStream();
byte[] byteData = readInputStream(inStream);
// 图片一导出到单元格A1中
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1023, 255,(short) 0, 0, (short) 0, 0);
//插入图片
patriarch.createPicture(anchor,workbook.addPicture(byteData, HSSFWorkbook.PICTURE_TYPE_JPEG));
3、公用方法
private static byte[] readInputStream(InputStream inStream) throws Exception{
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
//创建一个Buffer字符串
byte[] buffer = new byte[1024];
//每次读取的字符串长度,如果为-1,代表全部读取完毕
int len = 0;
//使用一个输入流从buffer里把数据读取出来
while( (len=inStream.read(buffer)) != -1 ){
//用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
outStream.write(buffer, 0, len);
}
//关闭输入流
inStream.close();
//把outStream里的数据写入内存
return outStream.toByteArray();
}
4、最后简单列出所引用的jar和HSSFClientAnchor介绍
jar如下:
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
HSSFClientAnchor说明
new HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2);
dx1、dy1:起始单元格中的x,y坐标
dx2、dy2-结束单元格中的x,y坐标
一个单元格:x(宽)-(0-1023),y(高)-(0-255)
col1、row1-起始的单元格,下标从0开始
col2、row2-结束的单元格 ,下标从0开始
列举一个例子如下:
// 图片一导出到单元格I2中
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1023, 255,(short) 0, 0, 0, 0);