在Excel中使用Java读取嵌入对象 [英] Read embedded Object in excel using java
问题描述
我希望做一个excel表格中,我需要发送其他填充它。
在Excel工作表,其他人填补他的信息,也可以将文本/ doc文件用Excel表....
我需要访问该文本/ doc文件。请给我一个解决方案。
我使用Apache POI - HSSF API
先谢谢了。
包excelExchange;进口java.io.FileInputStream中;
进口java.io.FileNotFoundException;
进口java.io.IOException异常;
进口java.util.Iterator的;
进口java.util.Vector中;进口org.apache.poi.hslf.HSLFSlideShow;
进口org.apache.poi.hslf.usermodel.SlideShow;
进口org.apache.poi.hssf.usermodel.HSSFCell;
进口org.apache.poi.hssf.usermodel.HSSFObjectData;
进口org.apache.poi.hssf.usermodel.HSSFRow;
进口org.apache.poi.hssf.usermodel.HSSFSheet;
进口org.apache.poi.hssf.usermodel.HSSFWorkbook;
进口org.apache.poi.hwpf.HWPFDocument;
进口org.apache.poi.poifs.filesystem.DirectoryNode;
//进口org.apache.poi.h;
导入org.apache.poi.poifs.filesystem *。公共类ReadEmbeddedObject { 公共静态无效的主要(字串[] args)抛出IOException 字符串文件名=C:\\\\ \\\\ MAYUR \\\\专刊\\\\文件projectInfo.xls
//矢量dataHolder =
ReadCSV(文件名);
} 公共静态无效ReadCSV(字符串文件名)抛出IOException异常{
矢量cellVectorHolder =新的向量();
的FileInputStream myInput =新的FileInputStream(文件名); // myFileSystem = FS
// myWorkBook =工作簿 POIFSFileSystem FS =新POIFSFileSystem(myInput);
HSSFWorkbook工作簿=新HSSFWorkbook(FS); 为(HSSFObjectData物镜:workbook.getAllEmbeddedObjects()){
//对象的OLE2类名
的System.out.println(对象:+ obj.getOLE2ClassName()+2);
串oleName = obj.getOLE2ClassName();
如果(oleName.equals(工作表)){
的System.out.println(工作表);
DirectoryNode的dn =(DirectoryNode)obj.getDirectory();
HSSFWorkbook embeddedWorkbook =新HSSFWorkbook(DN,FS,FALSE);
的System.out.println(oleName +:+ embeddedWorkbook.getNumberOfSheets());
的System.out.println(信息:---);
的System.out.println(名+ embeddedWorkbook.getSheetName(0));
//System.out.println(entry.getName()+:+ embeddedWorkbook.getNumberOfSheets());
}否则如果(oleName.equals(文档)){
的System.out.println(文档);
DirectoryNode的dn =(DirectoryNode)obj.getDirectory();
HWPFDocument embeddedWordDocument =新HWPFDocument(DN,FS);
的System.out.println(医生:+ embeddedWordDocument.getRange()文本());
}否则如果(oleName.equals(presentation)){
的System.out.println(presentation);
DirectoryNode的dn =(DirectoryNode)obj.getDirectory();
幻灯片embeddedPowerPointDocument =新的幻灯片(新HSLFSlideShow(DN,FS));
//中入口=(入口)entries.next();
的System.out.println(:+ embeddedPowerPointDocument.getSlides()的长度。);
}其他{
的System.out.println(else部分);
如果(obj.hasDirectoryEntry()){
//该DirectoryEntry的是DocumentNode。检查其条目,找出它是什么
DirectoryNode的dn =(DirectoryNode)obj.getDirectory();
为(迭代条目= dn.getEntries(); entries.hasNext()){
中入口=(入口)entries.next();
的System.out.println(oleName ++ entry.getName()。);
}
}其他{
//没有的DirectoryEntry
//从HSSFObjectData实例恢复对象的数据。
字节[] =目标数据obj.getObjectData();
}
}
}
}}< / code>
POI有API来遍历嵌入的对象。 ( HSSFWorkbook .getAllEmbeddedObjects
或 XSSFWorkbook.getAllEmbedds
)。例如这里 http://poi.apache.org/s$p $ padsheet /快guide.html#嵌入式
I want to make one excel sheet which I need to send other for filling it. In the excel sheet , the other person fill his information and can also attach text/doc file with excel sheet.... I need to access that text/doc file .. Please provide me a solution . I am using Apache POI - HSSF api.
Thanks in advance.
package excelExchange; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Iterator; import java.util.Vector; import org.apache.poi.hslf.HSLFSlideShow; import org.apache.poi.hslf.usermodel.SlideShow; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFObjectData; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.poifs.filesystem.DirectoryNode; //import org.apache.poi.h; import org.apache.poi.poifs.filesystem.*; public class ReadEmbeddedObject { public static void main(String[] args) throws IOException { String fileName = "C:\\Mayur\\NewsLetter\\files\\projectInfo.xls"; //Vector dataHolder = ReadCSV(fileName); } public static void ReadCSV(String fileName) throws IOException{ Vector cellVectorHolder = new Vector(); FileInputStream myInput = new FileInputStream(fileName); // myFileSystem=fs //myWorkBook=workbook POIFSFileSystem fs = new POIFSFileSystem(myInput); HSSFWorkbook workbook = new HSSFWorkbook(fs); for (HSSFObjectData obj : workbook.getAllEmbeddedObjects()) { //the OLE2 Class Name of the object System.out.println("Objects : "+ obj.getOLE2ClassName()+ " 2 ."); String oleName = obj.getOLE2ClassName(); if (oleName.equals("Worksheet")) { System.out.println("Worksheet"); DirectoryNode dn = (DirectoryNode) obj.getDirectory(); HSSFWorkbook embeddedWorkbook = new HSSFWorkbook(dn, fs, false); System.out.println(oleName+": " + embeddedWorkbook.getNumberOfSheets()); System.out.println("Information :--- "); System.out.println(" name " + embeddedWorkbook.getSheetName(0)); //System.out.println(entry.getName() + ": " + embeddedWorkbook.getNumberOfSheets()); } else if (oleName.equals("Document")) { System.out.println("Document"); DirectoryNode dn = (DirectoryNode) obj.getDirectory(); HWPFDocument embeddedWordDocument = new HWPFDocument(dn,fs); System.out.println("Doc : " + embeddedWordDocument.getRange().text()); } else if (oleName.equals("Presentation")) { System.out.println("Presentation"); DirectoryNode dn = (DirectoryNode) obj.getDirectory(); SlideShow embeddedPowerPointDocument = new SlideShow(new HSLFSlideShow(dn, fs)); //Entry entry = (Entry) entries.next(); System.out.println(": " + embeddedPowerPointDocument.getSlides().length); } else { System.out.println("Else part "); if(obj.hasDirectoryEntry()){ // The DirectoryEntry is a DocumentNode. Examine its entries to find out what it is DirectoryNode dn = (DirectoryNode) obj.getDirectory(); for (Iterator entries = dn.getEntries(); entries.hasNext();) { Entry entry = (Entry) entries.next(); System.out.println(oleName + "." + entry.getName()); } } else { // There is no DirectoryEntry // Recover the object's data from the HSSFObjectData instance. byte[] objectData = obj.getObjectData(); } } } } } </code>
POI has APIs to iterate over embedded objects. (HSSFWorkbook .getAllEmbeddedObjects
or XSSFWorkbook.getAllEmbedds
). Examples here http://poi.apache.org/spreadsheet/quick-guide.html#Embedded
这篇关于在Excel中使用Java读取嵌入对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!