Java 获取xls中嵌入文件的文档名(Apache POI)

Java 获取xls中嵌入文件的文档名(Apache POI),java,excel,apache-poi,inputstream,hssf,Java,Excel,Apache Poi,Inputstream,Hssf,我想保存.xls(POI类型:HSSF)文件的所有嵌入文件,无论它是哪种嵌入文件类型。因此,如果我可以保存所有嵌入的文件而不使用扩展名,我会很高兴。我正在使用Java7上的ApachePOI库3.7 现在,我在使用createDocumentInputStream(document)时遇到问题。我不知道如何获得这个预期参数。有人能帮我吗 public static void saveEmbeddedXLS(InputStream fis_param, String outputfile) thr

我想保存.xls(POI类型:HSSF)文件的所有嵌入文件,无论它是哪种嵌入文件类型。因此,如果我可以保存所有嵌入的文件而不使用扩展名,我会很高兴。我正在使用Java7上的ApachePOI库3.7

现在,我在使用createDocumentInputStream(document)时遇到问题。我不知道如何获得这个预期参数。有人能帮我吗

public static void saveEmbeddedXLS(InputStream fis_param, String outputfile) throws IOException, InvalidFormatException{
    //HSSF - XLS

    int i = 0;
    System.out.println("Starting Embedded Search in xls...");

    POIFSFileSystem fs = new POIFSFileSystem(fis_param);//create FileSystem using fileInputStream
    HSSFWorkbook workbook = new HSSFWorkbook(fs);

    for (HSSFObjectData obj : workbook.getAllEmbeddedObjects()) {

        System.out.println("Objects : "+ obj.getOLE2ClassName());//the OLE2 Class Name of the object
        String oleName = obj.getOLE2ClassName();//Document Type

        DirectoryNode dn = (DirectoryNode) obj.getDirectory();//get Directory Node  


//Trying to create an input Stream with the embedded document, argument of createDocumentInputStream should be: String; Where/How can I get this correct parameter for the function?
        InputStream is = dn.createDocumentInputStream(oleName);//oleName = Document Type, but not it's name (Wrong!)

        FileOutputStream fos = new FileOutputStream(outputfile + "_" + i);//Outputfilepath + Number

        IOUtils.copy(is, fos);//FileInputStream > FileOutput Stream (save File without extension)
        i++;
       } 
    }

为什么要使用如此旧版本的ApachePOI?另外,(由ApachePOI提供支持)是否能满足您的需要?@Gagravarr我的代码是一个更大软件的一部分,该软件还包含使用ApachePOI的其他功能。ApachePOI基本上是Tika的一部分,我使用POI是因为我不需要Tika的其他特性。我使用旧版本的原因是,因为我的代码的某些部分与实际版本不兼容。我现在正在使用POI 3.14尝试同样的方法,但仍然存在相同的问题。请提出一个合适的解决方案。谢谢,NicolaTry和Apache Tika CLI。如果这行得通,我们可以帮助您直接使用ApachePOI做同样的事情。如果没有,那么你很可能在寻找未包含在文档中的信息file@Gagravarr非常感谢您的帮助,刚刚看到您是一名apache开发人员。所以我问的是对的人我现在尝试使用带有-z参数的Tika CLI,效果很好!但我还没有找到任何示例源代码。我现在如何在代码中实现这一点?(我不能在我的软件中使用CLI语句,所以一些与
-z--extract dir
相同功能的示例代码就可以了)而且我想知道,是否可以只使用apache poi来存储.doc文件?好吧,apache Tika是开源的,所以您可以阅读它背后的代码!我建议您快速阅读的
handleEmbeddedOfficeDoc
方法,然后用您仍然需要帮助的内容更新您的问题!