最近在开发中需要一个excel上传的功能,其中,excel就包含了数据和图片,经过查询与了解,代码实现如下,图片与数据需要单独获取。

始兴网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设等网站项目制作,到程序开发,运营维护。创新互联公司2013年开创至今到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司。
1.利用下面两个方法获取图片
/**
获取图片和位置 (xls)
- @param sheet
- @return
@throws IOException
*/
public Map getPictures1(HSSFSheet sheet) throws IOException {
Map map = new HashMap();
List list = sheet.getDrawingPatriarch().getChildren();
for (HSSFShape shape : list) {
if (shape instanceof HSSFPicture) {
HSSFPicture picture = (HSSFPicture) shape;
HSSFClientAnchor cAnchor = (HSSFClientAnchor) picture.getAnchor();
PictureData pdata = picture.getPictureData();
String key = cAnchor.getRow1() + "-" + cAnchor.getCol1(); // 行号-列号
map.put(key, pdata);
logger.info("图片类型" + picture.getPictureData().suggestFileExtension());
}
}
return map;
}
xls格式的获取图片,如果excel中不存在图片的话会报空指针异常,需判断excel中有无图片再调用此方法,List pictures = (List) wookbook.getAllPictures();通过判断list是否为空,判断excel中有无图片
/**
- 获取图片和位置 (xlsx)
- @param sheet
- @return
- @throws IOException
*/
public Map getPictures2(XSSFSheet sheet) throws IOException {
Map map = new HashMap();
List list = sheet.getRelations();
for (POIXMLDocumentPart part : list) {
if (part instanceof XSSFDrawing) {
XSSFDrawing drawing = (XSSFDrawing) part;
List shapes = drawing.getShapes();
for (XSSFShape shape : shapes) {
XSSFPicture picture = (XSSFPicture) shape;
XSSFClientAnchor anchor = picture.getPreferredSize();
CTMarker marker = anchor.getFrom();
String key = marker.getRow() + "-" + marker.getCol();
map.put(key, picture.getPictureData());
logger.info("图片类型" + picture.getPictureData().suggestFileExtension());
}
}
}
return map;
}
2,获取数据和图片返回
/**
* 获取excel数据 包括图片
*
* @param file
* @return
* @throws IOException
*/
public Map getDataFromExcel(MultipartFile file) throws IOException {
//文件名
String fileName = null;
//文件类型
String fileType = null;
//文件输入流
InputStream fis = null;
Workbook wookbook = null;
Sheet sheet = null;
Map result = null;
//图片map
List