【问题标题】:Get an image and its position from excel file using Apache POI使用 Apache POI 从 excel 文件中获取图像及其位置
【发布时间】:2018-09-04 23:40:06
【问题描述】:

是否可以使用 Apache POI 从 xls 电子表格中提取图像信息?

在我的一个项目中,我需要从 .xls 文件中读取一些图像。我可以一起阅读所有图像,但如何获取图像位置(如列和行数或坐标)?否则,我可以获得图像位置,但我不知道有关找到位置的特定图像的信息,例如图片名称或扩展名或其他信息。我如何也可以获得图像和位置?

这里是read all images...,这里是get images positions...

【问题讨论】:

标签: java excel apache-poi


【解决方案1】:

看看这里:

http://poi.apache.org/components/spreadsheet/quick-guide.html#Images

示例:

List lst = workbook.getAllPictures();

for (Iterator it = lst.iterator(); it.hasNext(); ) {

    PictureData pict = (PictureData)it.next();

    String ext = pict.suggestFileExtension();

    byte[] data = pict.getData();

    if (ext.equals("jpeg")) {

      FileOutputStream out = new FileOutputStream("pict.jpg");

      out.write(data);

      out.close();

    }
}

在此之后,您可以使用 ImageInfo 等扩展 Magick 的工具来查找各种配置。 Yo甚至可以将图像转换为不同的尺寸。

也看看这个类:

http://blog.jaimon.co.uk/simpleimageinfo/SimpleImageInfo.java.html

-- 希望对你有帮助

【讨论】:

    【解决方案2】:

    我希望这段代码会有所帮助)

        XSSFDrawing dp = workbook.getSheetAt(1).createDrawingPatriarch();
        List<XSSFShape> pics = dp.getShapes();
        XSSFPicture inpPic = (XSSFPicture)pics.get(0);
    
        XSSFClientAnchor clientAnchor = inpPic.getClientAnchor();
        inpPic.getShapeName(); // узнаю название картинки
        PictureData pict = inpPic.getPictureData();
        FileOutputStream out = new FileOutputStream("pict.jpg");
        byte[] data = pict.getData();
        out.write(data);
        out.close();
        System.out.println("col1: " + clientAnchor.getCol1() + ", col2: " + clientAnchor.getCol2() + ", row1: " + clientAnchor.getRow1() + ", row2: " + clientAnchor.getRow2());
        System.out.println("x1: " + clientAnchor.getDx1() + ", x2: " + clientAnchor.getDx2() +  ", y1: " + clientAnchor.getDy1() +  ", y2: " + clientAnchor.getDy2());
    

    【讨论】:

      【解决方案3】:

      如果你不想使用迭代器(因为有时它们很重)

      public List readDrawing(Workbook workbook) throws Exception {
          List list = workbook.getAllPictures();
      
          for (int i=0; i<list.size(); i++) {
              PictureData picture = (PictureData) list.get(i);
      
              String ext = picture.suggestFileExtension();
              byte[] data = picture.getData();
      
              FileOutputStream out = new FileOutputStream("imageName" + "." + ext);
              out.write(data);
              out.close();
          }
      
          return list;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-19
        • 1970-01-01
        • 2020-03-21
        • 2011-06-06
        • 1970-01-01
        相关资源
        最近更新 更多