当前位置:   article > 正文

Java读取Excel表格中的图片_java读取excel中的图片

java读取excel中的图片

前言

excel的图片并不是直接嵌入单元格中的,但是在插入图片时可以设置图片格式,将图片放入单元格中,代码就可以根据行号与列号定位到响应的图片。

读取图片

不同版本的excel有不同的拓展名(.xls .xlsx),对应不同的方法。

所有的图片在excel中保存在一个集合中,以行列号为key,图片为value,将结果封装到map集合中,图片的格式为“HSSFPictureData”“XSSFPictureData”。

  1. /**
  2. * 获取图片和位置 (xls)
  3. * @param sheet
  4. * @return
  5. * @throws IOException
  6. */
  7. public static Map<String, HSSFPictureData> getPictures (HSSFSheet sheet) throws IOException {
  8. Map<String, HSSFPictureData> map = new HashMap<String, HSSFPictureData>();
  9. List<HSSFShape> list = sheet.getDrawingPatriarch().getChildren();
  10. for (HSSFShape shape : list) {
  11. if (shape instanceof HSSFPicture) {
  12. HSSFPicture picture = (HSSFPicture) shape;
  13. HSSFClientAnchor cAnchor = picture.getClientAnchor();
  14. HSSFPictureData pdata = picture.getPictureData();
  15. String key = cAnchor.getRow1() + "-" + cAnchor.getCol1(); // 行号-列号
  16. map.put(key, pdata);
  17. }
  18. }
  19. return map;
  20. }
  21. /**
  22. * 获取图片和位置 (xlsx)
  23. * @param sheet
  24. * @return
  25. * @throws IOException
  26. */
  27. public static Map<String, XSSFPictureData> getPictures (XSSFSheet sheet) throws IOException {
  28. Map<String, XSSFPictureData> map = new HashMap<String, XSSFPictureData>();
  29. List<POIXMLDocumentPart> list = sheet.getRelations();
  30. for (POIXMLDocumentPart part : list) {
  31. if (part instanceof XSSFDrawing) {
  32. XSSFDrawing drawing = (XSSFDrawing) part;
  33. List<XSSFShape> shapes = drawing.getShapes();
  34. for (XSSFShape shape : shapes) {
  35. XSSFPicture picture = (XSSFPicture) shape;
  36. XSSFClientAnchor anchor = picture.getPreferredSize();
  37. CTMarker marker = anchor.getFrom();
  38. String key = marker.getRow() + "-" + marker.getCol();
  39. map.put(key, picture.getPictureData());
  40. }
  41. }
  42. }
  43. return map;
  44. }

 从map拿到图片使用输出流将图片保存在本地

  1. PictureData picData = map.get(hang-1+":"+20);
  2. //String ext = picData.suggestFileExtension();//获取图片的后缀名
  3. byte[] data = picData.getData();
  4. String fileName = UUID.randomUUID().toString();
  5. //文件夹路径:temporarypath
  6. String temporarypath = FtpPropertiesLoader.get("temporarypath");
  7. FileOutputStream out = new FileOutputStream(temporarypath + fileName + ".jpg");
  8. out.write(data);
  9. out.close();

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/273113
推荐阅读
相关标签
  

闽ICP备14008679号