导入的图片需放在单元格内
代码片段:
//获取工作簿
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
XSSFSheet sheet = workbook.getSheetAt(1);
XSSFDrawing patriarch = sheet.createDrawingPatriarch();
List<XSSFShape> shapes = patriarch.getShapes();
// 存储图片信息和坐标
Map<String, byte[]> picMap = new HashMap<>();
// 处理获取图片信息和坐标
if (shapes != null && !shapes.isEmpty()) {
// 过滤出图片的数据
shapes = shapes.stream().filter(Picture.class::isInstance).collect(Collectors.toList());
for (XSSFShape xssfShape : shapes) {
XSSFPicture xssfPicture = (XSSFPicture) xssfShape;
XSSFClientAnchor xssfClientAnchor = (XSSFClientAnchor) xssfPicture.getAnchor();
byte[] data = xssfPicture.getPictureData().getData();
//行和列的下标使用逗号分隔
String point = xssfClientAnchor.getRow1() + "," + xssfClientAnchor.getCol1();
// 如果存在这个坐标KEY表示相同单元格中的图片,直接集合添加该图片,不存在该坐标key直接创建添加
picMap.put(point, data);
}
}
//通过行和列的下标就能找到某个单元格内的图片数据
byte[] imgByte = picMap.get(1+","+1);