1.Apache POI簡介
Apache POI是Apache軟件基金會的開放源碼函式庫,POI提供API給Java程式對Microsoft Office格式檔案讀和寫的功能。 .NET的開發人員則可以利用NPOI (POI for .NET) 來存取 POI 的功能。
2.POI結構
HSSF - 提供讀寫Microsoft Excel XLS格式檔案的功能。
XSSF - 提供讀寫Microsoft Excel OOXML XLSX格式檔案的功能。
HWPF - 提供讀寫Microsoft Word DOC格式檔案的功能。
HSLF - 提供讀寫Microsoft PowerPoint格式檔案的功能。
HDGF - 提供讀Microsoft Visio格式檔案的功能。
HPBF - 提供讀Microsoft Publisher格式檔案的功能。
HSMF - 提供讀Microsoft Outlook格式檔案的功能。
3.參考實例
import java.io.FileOutputStream;
import java.io.File;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.awt.image.BufferedImage;
import javax.imageio.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
public class exportPicToExcel {
public static void main(String[] args) {
FileOutputStream fileOut = null;
BufferedImage bufferImg = null;
BufferedImage bufferImg2 = null;
try {
bufferImg = ImageIO.read(new File("C:/ztest/pic.jpg"));
bufferImg2 = ImageIO.read(new File("C:/ztest/pic2.jpg"));
// 先把讀進來的圖片放到一個ByteArrayOutputStream中,以便產生ByteArray
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
ByteArrayOutputStream byteArrayOut2 = new ByteArrayOutputStream();
ImageIO.write(bufferImg, "jpg", byteArrayOut);
ImageIO.write(bufferImg2, "jpg", byteArrayOut2);
// 創建一個工作薄
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet1 = wb.createSheet("poi picT");
HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 50, 25,
(short) 3, 3, (short) 4, 4);
HSSFClientAnchor anchor2 = new HSSFClientAnchor(0, 0, 50, 25,
(short) 5, 5, (short) 6, 6);
anchor2.setAnchorType(2);
// 插入圖片
patriarch.createPicture(anchor, wb.addPicture(byteArrayOut
.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
patriarch.createPicture(anchor2, wb.addPicture(byteArrayOut2
.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
// 寫入excel文件
fileOut = new FileOutputStream("c:/ztest/test.xls");
wb.write(fileOut);
fileOut.close();
} catch (IOException io) {
io.printStackTrace();
System.out.println("io erorr : " + io.getMessage());
} finally {
if (fileOut != null) {
try {
fileOut.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
// poi-bin-3.10-FINAL-20140208.zip
// 關於POI的更多參考:
// http://www.cnblogs.com/xwdreamer/archive/2011/07/20/2296975.html
// http://langhua9527.iteye.com/blog/388005