1 package com.sun.office.excel;
2
3 import java.awt.image.BufferedImage;
4 import java.io.ByteArrayOutputStream;
5 import java.io.File;
6 import java.io.FileOutputStream;
7 import java.io.IOException;
8
9 import javax.imageio.ImageIO;
10
11 import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
12 import org.apache.poi.hssf.usermodel.HSSFPatriarch;
13 import org.apache.poi.hssf.usermodel.HSSFSheet;
14 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
15
16 public class ExcelImageDemo {
17
18 public static void main(String[] args) {
19 FileOutputStream fileOut = null;
20 BufferedImage bufferImg = null;
21 // 先把讀進來的圖片放到一個ByteArrayOutputStream中,以便產生ByteArray
22 try {
23 ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
24 bufferImg = ImageIO.read(new File("D:/ubuntn.jpg"));
25 ImageIO.write(bufferImg, "jpg", byteArrayOut);
26
27 HSSFWorkbook wb = new HSSFWorkbook();
28 HSSFSheet sheet1 = wb.createSheet("test picture");
29 // 畫圖的頂級管理器,一個sheet只能獲取一個(一定要注意這點)
30 HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();
31 for (int i = 0; i < 3; i++) {
32 // anchor主要用於設置圖片的屬性
33 HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1023, 250, (short) 1, 1+i*10, (short) 5, 8+i*10);
34 // 插入圖片
35 patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
36 }
37 HSSFSheet sheet2 = wb.createSheet("test picture2");
38 //第二個sheet頁
39 HSSFPatriarch patriarch2 = sheet2.createDrawingPatriarch();
40 for (int i = 0; i < 3; i++) {
41 // anchor主要用於設置圖片的屬性
42 HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1023, 250, (short) 1, 1+i*10, (short) 5, 8+i*10);
43 // 插入圖片
44 patriarch2.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
45 }
46 fileOut = new FileOutputStream("Excel.xls");
47 // 寫入excel文件
48 wb.write(fileOut);
49 System.out.println("----Excle文件已生成------");
50 } catch (Exception e) {
51 e.printStackTrace();
52 } finally {
53 if (fileOut != null) {
54 try {
55 fileOut.close();
56 } catch (IOException e) {
57 e.printStackTrace();
58 }
59 }
60 }
61 }
62 // 關於HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2)的參數,有必要在這里說明一下:
63 // dx1:起始單元格的x偏移量,
64 // dy1:起始單元格的y偏移量,
65 // dx2:終止單元格的x偏移量,
66 // dy2:終止單元格的y偏移量,
67 // col1:起始單元格列序號,從0開始計算;
68 // row1:起始單元格行序號,從0開始計算,
69 // col2:終止單元格列序號,從0開始計算;
70 // row2:終止單元格行序號,從0開始計算,
71 //添加多個圖片時:多個pic應該share同一個DrawingPatriarch在同一個sheet里面。
72 }