java - 如何使用 Apache POI 获取 xlsx 文件中图片的位置

标签 java apache-poi xlsx

我可以获取图片文件,但我不知道如何获取图片的位置。 我在 POI 中找不到正确的方法。

    InputStream is= new FileInputStream("test.xlsx");  
    XSSFWorkbook workbook = new XSSFWorkbook(is);  

    List<PictureData> list = (List)workbook.getAllPictures();
    int i = 0;
    System.out.println(list.size());
    for(Iterator<PictureData> it = list.iterator(); it.hasNext(); ){
        PictureData pd = it.next();
        savePic(i, pd);
        i++;
    }

最佳答案

还有另一种方法可以从 XSSFSheet 获取位置信息。

        XSSFSheet sheet = workBook.getSheetAt(0);
        XSSFDrawing drawing = sheet.createDrawingPatriarch(); // I know it is ugly, actually you get the actual instance here
        for (XSSFShape shape : drawing.getShapes()) {
            if (shape instanceof XSSFPicture) {
                XSSFPicture picture = (XSSFPicture) shape;
                XSSFPictureData xssfPictureData = picture.getPictureData();
                ClientAnchor anchor = picture.getPreferredSize();
                int row1 = anchor.getRow1();
                int row2 = anchor.getRow2();
                int col1 = anchor.getCol1();
                int col2 = anchor.getCol2();
                System.out.println("Row1: " + row1 + " Row2: " + row2);
                System.out.println("Column1: " + col1 + " Column2: " + col2);
                // Saving the file
                String ext = xssfPictureData.suggestFileExtension();                
                byte[] data = xssfPictureData.getData();
                String filePath = "C:\\..\\Images\\" + xssfPictureData.getPackagePart().getPartName();
                try (FileOutputStream os = new FileOutputStream(filePath)) {
                    os.write(data);
                    os.flush();         
                }

            }
        }

关于java - 如何使用 Apache POI 获取 xlsx 文件中图片的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16131256/

相关文章:

JavaScript - 将 CSV 转换为 XLSX(最好不使用库)

java - JPA 与 JTA 事务 - 获取 JDBC 连接

java - 在 JXLS 和 Apache POI 模板中迭代 map

rubuntu xlsx 包

python - openpyxl 只读 use_iterators

java - "java.lang.NoSuchMethodError"读取xmlbean时出现异常

java - Libgdx(输入)按键似乎跳过了一些东西

java - 从 Java tomcat 执行 Perl 脚本返回 255 退出代码

java - 我怎样才能在Java中分割这个字符串?

java - 使用 Libre Office 更新 .xls 文件后,POI API 中的 org.apache.poi.POIXMLException : java. lang.reflect.InvocationTargetException