我正在使用poi庫來處理MS文件。爲了提取docx,xlsx和pptx的嵌入式ole對象,我使用方法:PackagePart pp = src.getAllEmbedds()
但是對於doc,xls和ppt等MS格式的舊格式,沒有這種方法。所以我使用提取器:POITextExtractor[] embeddedExtractors = ExtractorFactory.getEmbededDocsTextExtractors(oleTextExtractor);
但是這隻能提取文本而不是整個文件。 任何人都可以幫助我提取doc,ppt和xls文件嗎?使用java從doc中提取嵌入文件
回答
OLE2文件包括最的Microsoft Office文件,如XLS
,DOC
,並PPT
以及MFC
序列化API基於文件格式。 辦公室OpenXML格式是新的基於標準的XML 文件格式的Microsoft Office 2007和發現。這包括XLSX
,DOCX
和PPTX
。
對於每個MS Office的應用存在,試圖提供一個共同的高電平的Java API既OLE2和OOXML文檔格式的組件模塊。
見
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();
}
}
}
}
上面的代碼是從xls excel中讀取嵌入的xlsx。 –
import java.io.File;
import java.io.FileInputStream;
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.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.util.IOUtils;
public class TestEmbedded {
public static void main(String[] args) throws Exception {
String path = "DummyParent.xls";
File file = new File(path);
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(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")){
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(dn,fs,false);
int number = hssfWorkbook.getNumberOfSheets();
System.out.println("The number of sheets in the Embedded excel - xls"+number);
}
}
}
}
上面的代碼是讀取嵌入到另一個xls的xls。 –
您應該編輯您的答案以添加任何相關信息或評論,而不僅僅是評論您自己的答案 – JSantos
- 1. 從.doc文件中提取文本python
- 2. 如何使用apache poi從.doc文件中提取文本?
- 3. 如何從DOC文件中提取圖像而不使用Microsoft.Office.Interop.Word
- 4. 如何使用MuPDF從pdf中提取嵌入文件
- 5. 使用java從doc或rtf文件中讀取表格數據
- 6. 從Word Doc Binary中提取文本
- 7. 如何從Python使用doc/docx文件提取數據
- 8. 使用Apache tika在doc文件中獲得嵌入式資源
- 9. 如何在Java中使用Apache POI從.doc和.docx文件中提取從右到左的文本?
- 10. Java Apache POI:從.doc文件讀取/寫入問題
- 11. 如何從word文件中提取文本.doc,docx,.xlsx,.pptx php
- 12. 從DOC提取頁面到新的DOC
- 13. 使用Java從URL中提取推文?
- 14. 從doc文件中的圖表中提取數據
- 15. 在Android Java中使用Apache POI插入圖像到.doc文件
- 16. 提取嵌入Excel中的「PDF」文件,並使用C#
- 17. 在java中使用Apache Tika從PDF文件中提取文本
- 18. 在C#中使用abcpdf從PDF A/3中提取嵌入式XML文件 - ZUGFeRD
- 19. 在PHP中從ipa中提取嵌入式配置文件
- 20. 從doc/docx文件中提取單詞c#
- 21. 使用javascript從嵌套的json文件中提取數據
- 22. 如何使用java創建.doc文件?
- 23. 使用java從文本文件中提取特定的url
- 24. 從嵌入式Mp3文件中提取歌曲信息,ID3類
- 25. 從pdf中獲取pdf文件嵌入
- 26. 寫入.doc文件
- 27. java:從txt文件中提取點
- 28. 在Java從文件中提取數值
- 29. 從.doc中提取超鏈接
- 30. 從Java EE + Struts2導出到DOC文件
十分感謝,這工作〜 – Alvin
不客氣。 –