在java的学习中,总是遇到很多困难,但是只要你一直坚持下去,应该能够克服很多困难,并且积累的知识也会更多。
关于在EXCEL中插入图片的代码
首先创建一个Picture.java
package com.practice;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import org.apache.poi.hssf.usermodel.*;
public class Picture {
public static void main(String[] args)
{
//首先要初始化文件流
FileOutputStream fileOut=null;
BufferedImage bufferImg1=null;
BufferedImage bufferImg2=null;
try {
//先把读进来的图片放到一个ByteArrayOutputStream中,
//以便后来的byteArrayOut
ByteArrayOutputStream byteArrayOut1=new ByteArrayOutputStream();
ByteArrayOutputStream byteArrayOut2=new ByteArrayOutputStream();
//读取图片
bufferImg1=ImageIO.read(new File("D:/girl.jpg"));
bufferImg2=ImageIO.read(new File("D:/woman.jpg"));
//写入图片
ImageIO.write(bufferImg1, "jpg", byteArrayOut1);
ImageIO.write(bufferImg2, "jpg", byteArrayOut2);
//当读取图片后就开始建立工作簿,并将读入的图片放置与建立的工作簿中
HSSFWorkbook wb=new HSSFWorkbook();
//创建表单并将其命名
HSSFSheet sheet=wb.createSheet("插入图片的表单");
//创建顶级画图管理器HSSFPatriarch
//并且需要注意的一点是一个表单只能创建一个顶级画图管理器,否则后面创建的管理器中插入的图片
//会将前一个管理器中插入的图片完全覆盖
HSSFPatriarch patriarch=sheet.createDrawingPatriarch();
//建立插入图片的位置
HSSFClientAnchor anchor1=new HSSFClientAnchor(0,0,1023,255,(short)0,0,(short)3,5);
HSSFClientAnchor anchor2=new HSSFClientAnchor(0,0,1023,255,(short)4,8,(short)7,13);
//插入图片
patriarch.createPicture(anchor1, wb.addPicture(byteArrayOut1.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
patriarch.createPicture(anchor2, wb.addPicture(byteArrayOut2.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
//将文件输出
fileOut=new FileOutputStream("D:/picture.xls");
//将文件写出
wb.write(fileOut);
System.out.println("图片成功插入!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally
{
try {
fileOut.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
在插入图片的时候,特别要注意的一点是,在每一个sheet表中只能插入一个顶级画图管理器(patriarch),否则之前插入的图片将全部被清除。
运行后的效果图如下: