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 }
順便提一下圖片base64形式怎么轉為圖片
1 String u = "Base64"; 2 // Base64解碼 3 byte[] b = new BASE64Decoder().decodeBuffer(u); 4 // 生成圖片 5 String imgName = "echartsPhoto"; 6 String filePath = ServletActionContext.getServletContext().getRealPath("/") + "echarts"; 7 String fileName = filePath +"/"+ imgName +".png"; 8 11 File file = new File(filePath); 12 if(!file.exists()){ 13 file.mkdir(); 14 } 15 OutputStream out = new FileOutputStream(new File(fileName)); 16 out.write(b);18 out.close();