POI依赖:
org.apache.poi poi-ooxml3.17
代码:
public static void main(String[] args) throws IOException {
String filename="C:\Users\Administrator\documents\WeChat Files\wxid_ui8d6cy4xhcc22\FileStorage\File\2021-12\产品单价变动汇总表.xlsx";
Map nameMap = readExcelData(filename, 0);
File file = ResourceUtils.getFile(filename);
InputStream inputStream = new FileInputStream(file);
XSSFWorkbook xssfWorkbook=new XSSFWorkbook(inputStream);
Map picMap=getPictures(xssfWorkbook.getSheetAt(0));
System.out.println("========条码行数:" + nameMap.size());
System.out.println("========图片行数:" + picMap.size());
writeImg(nameMap, picMap);
}
private static void writeImg(Map nameMap, Map picMap) {
nameMap.forEach((row, name) -> {
PictureData xssfPictureData= picMap.get(row);
if (null == xssfPictureData) {
System.out.println("第" + row + "行图片为空");
} else {
byte[] data =xssfPictureData.getData();
FileOutputStream out = null;
if (StringUtils.isBlank(name)) {
System.out.println("第" + row + "行条码为空");
} else {
try {
out = new FileOutputStream(new File("C:\Users\Administrator\Desktop\imgs2\" + name + ".png"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
out.write(data);
} catch (IOException e) {
e.printStackTrace();
}
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
}
public static Map getPictures(XSSFSheet xssfSheet) throws IOException {
Map map = new HashMap();
XSSFDrawing drawingPatriarch = xssfSheet.getDrawingPatriarch();
List list = xssfSheet.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();
Integer key = marker.getRow();
map.put(key, picture.getPictureData());
}
}
}
return map;
}
public static Map readExcelData(String filename, Integer sheet) throws IOException {
//用于存储Exce读取数据
HashMap hashMap=new HashMap();
//读取excel数据
File file = ResourceUtils.getFile(filename);
InputStream inputStream = new FileInputStream(file);
XSSFWorkbook xssfWorkbook=new XSSFWorkbook(inputStream);
//获取sheet表格,及读取单元格内容
XSSFSheet xssfSheet=xssfWorkbook.getSheetAt(sheet);
for (int i = 1; i <= xssfSheet.getLastRowNum(); i++) {
XSSFRow sheetRow = xssfSheet.getRow(i);
sheetRow.getCell(2).setCellType(CellType.STRING);
String imgName = xssfSheet.getRow(i).getCell(2).getStringCellValue();
hashMap.put(i, imgName);
}
return hashMap;
}
```



