excel 获取图片 包含 2003 和2007两个版本
import org.apache.poi.POIXMLDocumentPart;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
public void test(MultipartFile file) throws Exception {
Workbook workbook = null;
Sheet sheetAt = null;
Row row = null;
String sheetName = "";
InputStream inputStream = file.getInputStream();//(MultipartFile file)类型 自己控制
BufferedInputStream buffInputStream = new BufferedInputStream(inputStream);
if (POIFSFileSystem.hasPOIFSHeader(buffInputStream)) {//读取2003格式的excel 图片
workbook = new HSSFWorkbook(file.getInputStream()); // 创建workbook对象,读取整个文档
HSSFSheet sheet = null;
sheetName = sheetAt.getSheetName();//sheet名称
sheet = (HSSFSheet) workbook.getSheetAt(1); //获取第2个Sheet表
List<HSSFShape> list = sheet.getDrawingPatriarch().getChildren();
for (HSSFShape shape : list) {
if (shape instanceof HSSFPicture) {
HSSFPicture picture = (HSSFPicture) shape;
HSSFClientAnchor cAnchor = (HSSFClientAnchor) picture.getAnchor();
PictureData pictureData = picture.getPictureData();
int rowNum = cAnchor.getRow1();//获取行
int colNum = cAnchor.getCol1();//获取列
PictureData pic = pictureData;
String ext = pic.suggestFileExtension(); // 获取图片格式 jpg、png等等
byte[] data = pic.getData();
InputStream input = new ByteArrayInputStream(data);//获取图片输入流
//后续操作。。。。
}
}
} else {//读取2007格式的excel 图片
workbook = new XSSFWorkbook(ImportExcelUtil.multipartFileToFile(file));
XSSFSheet sheet = null;
sheetName = sheetAt.getSheetName();//sheet名称
sheet = (XSSFSheet) workbook.getSheetAt(1); //获取第2个Sheet表
List<POIXMLDocumentPart> relations = sheet.getRelations();//读取图片
for (POIXMLDocumentPart part : relations) {
if (part instanceof XSSFDrawing) {
XSSFDrawing drawing = (XSSFDrawing) part;
List<XSSFShape> shapes = drawing.getShapes();
for (XSSFShape shape : shapes) {
XSSFPicture picture = (XSSFPicture) shape;
XSSFClientAnchor anchor = picture.getPreferredSize();
CTMarker marker = anchor.getFrom();
int rowNum = marker.getRow();//获取行
int colNum = marker.getCol();//获取列
XSSFPictureData pictureData = picture.getPictureData();
PictureData pic = pictureData;
String ext = pic.suggestFileExtension(); // 获取图片格式 jpg、png等等
byte[] data = pic.getData();
InputStream input = new ByteArrayInputStream(data);//获取图片输入流
//后续操作。。。。
}
}
}
}
}
相关maven依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.15</version>
</dependency>