//poi讀取Excel中的圖片
public class ReadExcelPicture{
public ReadExcelPicture(){
}
public Map readPicture(String excelPath)throws InvalidFormatException, IOException {
FileInputStream fis = new FileInputStream(excelPath);
HSSFWorkbook workbook = (HSSFWorkbook) WorkbookFactory.create(fis);
List<HSSFPictureData> pictures = workbook.getAllPictures();
//假設讀取的Excel工作薄中的第一張表
HSSFSheet sheet = workbook.getSheet("0");
Map<Integer,HSSFPictureData> map = new HashMap<Integer,HSSFPictureData>();
for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) {
HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor();
int rowIndex = anchor.getRow1();
if (shape instanceof HSSFPicture) {
int rowmark = rowIndex;
picture = (HSSFPicture) shape;
int pictureIndex = picture.getPictureIndex() - 1;
pictureData = pictures.get(pictureIndex);
map.put(rowmark, pictureData);
}
}
return map;
}
public static void main(String args[]){
String excelPath = "D:\\Excel\\test.xls";
String savePicturePath = "D:\\images\\";
ReadExcelPicture readExcelPicture = new ReadExcelPicture();
Map<Integer,HSSFPictureData> map = readExcelPicture.readPicture(excelPath);
//傳入一個你需要的Excel圖片行索引,必須確保該Excel行索引中有圖片,
//而且是在已經讀取的Excel行索引范圍內,我傳入的是1
HSSFPictureData pictureData = map.get(1);
//獲取包含圖片格式的文件字符串
String ext = pictureData.suggestFileExtension();
//代表圖片信息的字節數據
byte[] data = pictureData.getData();
//根據圖片格式將圖片寫出到磁盤
if (ext.equals("jpeg")) {
FileOutputStream out = new FileOutputStream(savePicturePath+"a.jpg");
out.write(data);
out.close();
}
if (ext.equals("png")) {
FileOutputStream out = new FileOutputStream(savePicturePath+"a.png");
out.write(data);
out.close();
}
}
}