读取图片仅测试xlsx版,如果xls版不读,就把那个转出xlsx
具体代码,此处的源码都是基于hutool源码修改
`public static Map<String, List
Assert.notNull(workbook, "Workbook must be not null !");
if (sheetIndex < 0) {
sheetIndex = 0;
}
if (workbook instanceof HSSFWorkbook) {
return getPicMapXls((HSSFWorkbook) workbook, sheetIndex);
} else if (workbook instanceof XSSFWorkbook) {
return getPicMapXlsx((XSSFWorkbook) workbook, sheetIndex);
} else {
throw new IllegalArgumentException(StrUtil.format("Workbook type [{}] is not supported!", workbook.getClass()));
}
}`
`private static Map<String, List<PictureData>> getPicMapXls(HSSFWorkbook workbook, int sheetIndex) {
final List<HSSFPictureData> pictures = workbook.getAllPictures();
final Map<String, List<PictureData>> sheetIndexPicListMap = new HashMap<>();
if (CollectionUtil.isNotEmpty(pictures)) {
final HSSFSheet sheet = workbook.getSheetAt(sheetIndex);
HSSFClientAnchor anchor;
int pictureIndex;
for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) {
if (shape instanceof HSSFPicture) {
pictureIndex = ((HSSFPicture) shape).getPictureIndex() - 1;
anchor = (HSSFClientAnchor) shape.getAnchor();
String key = StrUtil.format("{}_{}", anchor.getRow1(), anchor.getCol1());
List<PictureData> list = sheetIndexPicListMap.getOrDefault(key, new ArrayList<>());
list.add(pictures.get(pictureIndex));
sheetIndexPicListMap.put(key,list);
}
}
}
return sheetIndexPicListMap;
}`
`private static Map<String, List
final Map<String, List<PictureData>> sheetIndexPicListMap = new HashMap<>();
final XSSFSheet sheet = workbook.getSheetAt(sheetIndex);
XSSFDrawing drawing;
for (POIXMLDocumentPart dr : sheet.getRelations()) {
if (dr instanceof XSSFDrawing) {
drawing = (XSSFDrawing) dr;
final List<XSSFShape> shapes = drawing.getShapes();
XSSFPicture pic;
CTMarker ctMarker;
for (XSSFShape shape : shapes) {
if(shape instanceof XSSFPicture){
pic = (XSSFPicture) shape;
ctMarker = pic.getPreferredSize().getFrom();
String key = StrUtil.format("{}_{}", ctMarker.getRow(), ctMarker.getCol());
List<PictureData> list = sheetIndexPicListMap.getOrDefault(key, new ArrayList<>());
list.add(pic.getPictureData());
sheetIndexPicListMap.put(key,list);
}
// 其他类似于图表等忽略,see: https://gitee.com/dromara/hutool/issues/I38857
}
}
}
return sheetIndexPicListMap;
}
// -------------------------------------------------------------------------------------------------------------- Private method end
`