Java ApachePOI-从单页获取图片

Java ApachePOI-从单页获取图片,java,apache-poi,xlsx,Java,Apache Poi,Xlsx,我试图从一张工作表中加载图片,但是在这里只有一个示例如何从整个文档中加载图片(workbook.getAllPictures();)我认为没有像getAllPictures()这样简单的东西可以用于单独的工作表。一种解决方案是这样做(假设您使用的是XSSF): 一般的想法是,我们使用createDrawingPachur()从工作表中检索现有的电子表格ML图形 然后,我们可以使用getShapes()检索工作表中包含的每个形状 我认为没有像getAllPictures()这样简单的东西可以用于单

我试图从一张工作表中加载图片,但是在这里只有一个示例如何从整个文档中加载图片(
workbook.getAllPictures();

我认为没有像
getAllPictures()
这样简单的东西可以用于单独的工作表。一种解决方案是这样做(假设您使用的是XSSF):

一般的想法是,我们使用
createDrawingPachur()
从工作表中检索现有的电子表格ML图形


然后,我们可以使用
getShapes()
检索工作表中包含的每个形状

我认为没有像
getAllPictures()
这样简单的东西可以用于单独的工作表。一种解决方案是这样做(假设您使用的是XSSF):

一般的想法是,我们使用
createDrawingPachur()
从工作表中检索现有的电子表格ML图形


然后,我们可以使用
getShapes()
检索工作表中包含的每个形状

由于您已经开始使用SS公共接口,您可能希望有一个在两种API中都能工作的解决方案。不幸的是,DrawingPatrich尚未完全普及:(

导入java.io.File;
导入java.util.ArrayList;
导入java.util.List;
导入org.apache.poi.hssf.usermodel.HSSFPatriarch;
导入org.apache.poi.hssf.usermodel.HSSFShape;
导入org.apache.poi.ss.usermodel.Drawing;
导入org.apache.poi.ss.usermodel.Picture;
导入org.apache.poi.ss.usermodel.PictureData;
导入org.apache.poi.ss.usermodel.Sheet;
导入org.apache.poi.ss.usermodel.工作簿;
导入org.apache.poi.ss.usermodel.WorkbookFactory;
导入org.apache.poi.xssf.usermodel.XSSFDrawing;
导入org.apache.poi.xssf.usermodel.XSSFShape;
公共类XlsPictures{
公共静态void main(字符串args[])引发异常{
工作簿wb=WorkbookFactory.create(新文件(“picture.xls”);
表sh=wb.getSheetAt(0);
Drawing-draw=sh.createDrawingPachur();
List pics=new ArrayList();
if(绘制HSSFPatriarch的实例){
HSSFPatriarch hp=(HSSFPatriarch)绘图;
对于(HSSFShape hs:hp.getChildren()){
if(图片的hs实例){
图片添加((图片)hs);
}
}
}否则{
XSSFDrawing xdraw=(XSSFDrawing)绘图;
对于(XSSFShape xs:xdraw.getShapes()){
if(图片的xs实例){
图片添加((图片)xs);
}
}
}
用于(图p:pics){
PictureData pd=p.getPictureData();
字节saveme[]=pd.getData();
}
}
}

由于您已经开始使用SS通用接口,您可能希望有一个在两种API中都能工作的解决方案。不幸的是,DrawingPatrich尚未完全实现SS通用化:(

导入java.io.File;
导入java.util.ArrayList;
导入java.util.List;
导入org.apache.poi.hssf.usermodel.HSSFPatriarch;
导入org.apache.poi.hssf.usermodel.HSSFShape;
导入org.apache.poi.ss.usermodel.Drawing;
导入org.apache.poi.ss.usermodel.Picture;
导入org.apache.poi.ss.usermodel.PictureData;
导入org.apache.poi.ss.usermodel.Sheet;
导入org.apache.poi.ss.usermodel.工作簿;
导入org.apache.poi.ss.usermodel.WorkbookFactory;
导入org.apache.poi.xssf.usermodel.XSSFDrawing;
导入org.apache.poi.xssf.usermodel.XSSFShape;
公共类XlsPictures{
公共静态void main(字符串args[])引发异常{
工作簿wb=WorkbookFactory.create(新文件(“picture.xls”);
表sh=wb.getSheetAt(0);
Drawing-draw=sh.createDrawingPachur();
List pics=new ArrayList();
if(绘制HSSFPatriarch的实例){
HSSFPatriarch hp=(HSSFPatriarch)绘图;
对于(HSSFShape hs:hp.getChildren()){
if(图片的hs实例){
图片添加((图片)hs);
}
}
}否则{
XSSFDrawing xdraw=(XSSFDrawing)绘图;
对于(XSSFShape xs:xdraw.getShapes()){
if(图片的xs实例){
图片添加((图片)xs);
}
}
}
用于(图p:pics){
PictureData pd=p.getPictureData();
字节saveme[]=pd.getData();
}
}
}

why downvote?为什么我的要求不清楚?为什么downvote?为什么我的要求不清楚?你知道如何使用poi从excel检索图表吗。因为清楚地获取形状()不从excel中检索图表,只从图像中检索图表!!@KNDheeraj我没有检查如何处理图表,但excel/Powerpoint中的图表不时会在邮件列表中弹出。你最好的办法是在或那里询问…你知道如何使用poi从excel中检索图表吗。因为显然getShapes()不从excel中检索图表,只检索图像!!@KNDheeraj我没有检查如何处理图表,但excel/Powerpoint中的图表不时会在邮件列表中弹出。您最好的选择是在或在那里询问。。。
public static void main(String[] args) {
    try {
        InputStream inp = new FileInputStream("workbook.xlsx");
        Workbook wb = WorkbookFactory.create(inp);
        XSSFSheet sheet1 = (XSSFSheet)wb.getSheetAt(0);

        //returns the existing SpreadsheetDrawingML from the sheet, or creates a new one
        XSSFDrawing drawing = sheet1.createDrawingPatriarch();

        //loop through all of the shapes in the drawing area
        for(XSSFShape shape : drawing.getShapes()){
            if(shape instanceof Picture){
                //convert the shape into a picture
                XSSFPicture picture = (XSSFPicture)shape;

                //your logic here
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    }   
}
import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFShape;
import org.apache.poi.ss.usermodel.Drawing;
import org.apache.poi.ss.usermodel.Picture;
import org.apache.poi.ss.usermodel.PictureData;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFDrawing;
import org.apache.poi.xssf.usermodel.XSSFShape;

public class XlsPictures {
    public static void main(String args[]) throws Exception {
        Workbook wb = WorkbookFactory.create(new File("picture.xls"));
        Sheet sh = wb.getSheetAt(0);
        Drawing draw = sh.createDrawingPatriarch();
        List<Picture> pics = new ArrayList<Picture>();
        if (draw instanceof HSSFPatriarch) {
            HSSFPatriarch hp = (HSSFPatriarch)draw;
            for (HSSFShape hs : hp.getChildren()) {
                if (hs instanceof Picture)  {
                    pics.add((Picture)hs);
                }
            }
        } else {
            XSSFDrawing xdraw = (XSSFDrawing)draw;
            for (XSSFShape xs : xdraw.getShapes()) {
                if (xs instanceof Picture) {
                    pics.add((Picture)xs);
                }
            }
        }

        for (Picture p : pics) {
            PictureData pd = p.getPictureData();
            byte saveme[] = pd.getData();
        }
    }
}