今天,
可以算是 学生期 最后一篇教程了。
代码功能是:将本地图片通过POI 写入到 Excel文件中。
今后,如果在项目中遇到关于poi的需求,会继续补充的。
实现效果如下
![](https://img.haomeiwen.com/i15976239/6265b1cf84f4ac1f.png)
/**
* 图片导入到Excel中
* 需要注意的是,必须要有commons-codec-1.10.jar这个占包
* 要不编译时,会通过。运行时会报异常
* ClassNotFoundException: org.apache.commons.codec.digest.DigestUtils
* @author Administrator
*
*/
public class ExcelImageDemo {
public static void main(String[] args) {
FileOutputStream fileOut = null; //输出流
//BufferedImage的主要作用就是将图片加载到内存中。在内存里有一个图像缓冲区,利用缓冲区可以很方便操作图片
//Raster与ColorModel,分别用于存储图像的像素数据和颜色数据。
BufferedImage bufferImg = null;
// 先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
try {
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
bufferImg = ImageIO.read(new File("D:/ubuntn.png"));
ImageIO.write(bufferImg, "png", byteArrayOut);
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet1 = wb.createSheet("test picture");
//画图的顶级管理器,一个sheet只能获取一个 !!!!!
HSSFPatriarch patriarch =sheet1.createDrawingPatriarch();
for (int i = 0; i < 3; i++) {
//anchor主要用户设置图片的属性
// 关于HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2)的参数,有必要在这里说明一下:
// dx1:起始单元格的x偏移量,
// dy1:起始单元格的y偏移量,
// dx2:终止单元格的x偏移量,
// dy2:终止单元格的y偏移量,
// col1:起始单元格列序号,从0开始计算;
// row1:起始单元格行序号,从0开始计算,
// col2:终止单元格列序号,从0开始计算;
// row2:终止单元格行序号,从0开始计算,
//添加多个图片时:多个pic应该share同一个DrawingPatriarch在同一个sheet里面。
HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,1023,250,(short)1,1+i*10,(short)5,8+i*10);
// 01 08 05 08
//结果:图片回压缩到一定的大小。 第一张图片的位置B2 B9--F2 F9 第二张图片的位置B12 B19--F12 F19 之后......
//插入图片
patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG));
fileOut = new FileOutputStream("ImgExcel.xls");
// 写入excel文件
wb.write(fileOut);
System.out.println("----Excle文件已生成------");
}
} catch (Exception e) {
// TODO: handle exception
}finally{
if (fileOut != null) {
try {
fileOut.close();
} catch (IOException e) {
// TODO: handle exception
}
}
}
}
}
网友评论