POI实现 Excel插入图片
使用jar包
代码如下
import cn.hutool.core.io.resource.ClassPathResource;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.ClientAnchor;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFDrawing;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
public class Test {
public static void main(String[] args) throws IOException {
OutputStream outputStream = new FileOutputStream("src/poi/插入图片/file/1.xlsx");
Workbook workbook = new SXSSFWorkbook();
insertPic(workbook);
workbook.write(outputStream);
workbook.close();
}
private static void insertPic(Workbook workbook){
try {
//获得画图的管理类
SXSSFSheet sheet = (SXSSFSheet) workbook.createSheet("sheet");
sheet.setDefaultRowHeight((short) 2000);
SXSSFDrawing sxssfDrawing = sheet.createDrawingPatriarch();
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
//anchor主要用于设置图片的属性
XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 255, 255, 0, 0, 1, 1);
anchor.setAnchorType(ClientAnchor.AnchorType.DONT_MOVE_DO_RESIZE);
ClassPathResource pathResource = new ClassPathResource("poi/插入图片/pic/1.png");
//将图片读到BufferedImage
BufferedImage bufferedImage = ImageIO.read(pathResource.getStream());
// 将图片写入流中
ImageIO.write(bufferedImage, "png", byteArrayOut);
sxssfDrawing.createPicture(anchor, workbook.addPicture(byteArrayOut
.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG));
}catch (Exception e){
e.printStackTrace();
}
}
}
关于XSSFClientAnchor参数
dx1 第一个单元格中的x坐标。
dy1 第一个单元格中的y坐标。
dx2 第二个单元格中的x坐标。
dy2 第二个单元格中的y坐标。
col1 第一个单元格的列(基于0)。
row1 第一个单元格的行(基于0)。
col2 第二个单元格的列(基于0)。
row2 第二个单元格的行(基于0)