使用java从doc中提取嵌入文件

时间:2014-01-29 00:28:23

标签: java apache-poi

我正在使用poi库来处理MS文件。要为docx,xl​​sx和pptx提取嵌入式ole对象,我使用方法:PackagePart pp = src.getAllEmbedds()但是对于像doc,xls和ppt这样的MS文件的旧格式,没有这样的方法。所以我使用的是提取器:POITextExtractor[] embeddedExtractors = ExtractorFactory.getEmbededDocsTextExtractors(oleTextExtractor);但是这只能提取文本而不是整个文件。 任何人都可以帮我解压doc,ppt和xls文件吗?

3 个答案:

答案 0 :(得分:1)

OLE2 文件包含大多数 Microsoft Office 文件,例如XLSDOCPPT以及{{1基于序列化API的文件格式。 Office OpenXML格式 Microsoft Office 2007 2008 中基于新标准的 XML 文件格式。其中包括MFCXLSXDOCX

对于每个 MS Office 应用程序,都存在一个组件模块,它试图为 OLE2 Java api > OOXML 文档格式。

答案 1 :(得分:0)

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;

import org.apache.poi.hssf.usermodel.HSSFObjectData;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.DirectoryNode;
import org.apache.poi.poifs.filesystem.DocumentEntry;
import org.apache.poi.poifs.filesystem.Entry;
import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class TestEmbedded {
   public static void main(String[] args) throws Exception {
       String path = "ParentExcel.xls";
       File file = new File(path);

       NPOIFSFileSystem fs = new NPOIFSFileSystem(file);
       HSSFWorkbook wb = new HSSFWorkbook(fs.getRoot(), true);

       for (HSSFObjectData obj : wb.getAllEmbeddedObjects()) {
       System.out.println(obj.getDirectory()+"***************HSSFObject data value************"+obj.getOLE2ClassName());
       String oleName = obj.getOLE2ClassName();
       System.out.println("Has directory Entry node"+obj.hasDirectoryEntry());
       DirectoryNode dn = (DirectoryNode)obj.getDirectory();
       Iterator<Entry> ab = dn.getEntries();
       System.out.println("The entries in the directory node are"+dn.getEntries()+"And also the count"+dn.getEntryCount());

       if(oleName.contains("Worksheet")){

          InputStream is ;
          Entry entry = ab.next();
          is = dn.createDocumentInputStream(entry);
          FileOutputStream fos = new FileOutputStream("EmbeddedWorkbook.xlsx");
          IOUtils.copy(is, fos);
          fos.close();
       }


       }

    }
}

答案 2 :(得分:0)

<a href="photographicadventures.co.uk">
    <img src="images/w3schools.jpg" class="center" size width ="200" height="200">
</a>
<br><br><hr>
<h2>This is a Smaller Heading.</h2>
<p>This is a paragraph and is colored red and resized and centered due to the external style sheet</p>