使用java读取excel中的embedded对象
我想做一个Excel表格,我需要发送其他填充它。 在Excel表中,其他人填写他的信息,也可以附加文本/ doc文件与excel表….我需要访问该文本/ doc文件..请为我提供一个解决scheme。 我正在使用Apache POI – HSSF api。
提前致谢。
包excelExchange; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Iterator; import java.util.Vector; 导入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。*; 公共类ReadEmbeddedObject { public static void main(String [] args)throws IOException { String fileName =“C:\\ Mayur \\ NewsLetter \\ files \\ projectInfo.xls”; // Vector dataHolder = ReadCSV(文件名); } 公共静态无效ReadCSV(string文件名)抛出IOException { Vector cellVectorHolder = new Vector(); FileInputStream myInput = new FileInputStream(fileName); // myFileSystem = fs // myWorkBook =工作簿 POIFSFileSystem fs = new POIFSFileSystem(myInput); HSSFWorkbook workbook =新的HSSFWorkbook(fs); for(HSSFObjectData obj:workbook.getAllEmbeddedObjects()){ //该对象的OLE2类名称 System.out.println(“Objects:”+ obj.getOLE2ClassName()+“2。”); stringoleName = obj.getOLE2ClassName(); 如果(oleName.equals(“Worksheet”)){ 的System.out.println( “表”); DirectoryNode dn =(DirectoryNode)obj.getDirectory(); HSSFWorkbook embeddedWorkbook = new HSSFWorkbook(dn,fs,false); System.out.println(oleName +“:”+ embeddedWorkbook.getNumberOfSheets()); System.out.println(“信息:---”); System.out.println(“name”+ embeddedWorkbook.getSheetName(0)); (entry.getName()+“:”+ embeddedWorkbook.getNumberOfSheets()); } else if(oleName.equals(“Document”)){ 的System.out.println( “文档”); 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( “演示”); 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”); 如果(obj.hasDirectoryEntry()){ // DirectoryEntry是一个DocumentNode。 检查它的条目,找出它是什么 DirectoryNode dn =(DirectoryNode)obj.getDirectory(); for(Iterator entries = dn.getEntries(); entries.hasNext();){ Entry entry =(Entry)entries.next(); System.out.println(oleName +“。”+ entry.getName()); } } else { //没有DirectoryEntry //从HSSFObjectData实例中恢复对象的数据。 byte [] objectData = obj.getObjectData(); } } } } } </代码>
POI有API来迭代embedded对象。 ( HSSFWorkbook .getAllEmbeddedObjects
或XSSFWorkbook.getAllEmbedds
)。 这里的例子http://poi.apache.org/spreadsheet/quick-guide.html#Embedded
import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.ArrayList; /** * Demonstrates how you can extract embedded data from a .xlsx file */ public class GetEmbedded { public static void main(String[] args) throws Exception { String path = "SomeExcelFile.xlsx" XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(new File(path))); for (PackagePart pPart : workbook.getAllEmbedds()) { String contentType = pPart.getContentType(); if (contentType.equals("application/vnd.ms-excel")) { //This is to read xls workbook embedded to xlsx file HSSFWorkbook embeddedWorkbook = new HSSFWorkbook(pPart.getInputStream()); int countOfSheetXls=embeddedWorkbook.getNumberOfSheets(); } else if (contentType.equals("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")) { //This is to read xlsx workbook embedded to xlsx file if(pPart.getPartName().getName().equals("/xl/embeddings/Microsoft_Excel_Worksheet12.xlsx")){ //"/xl/embeddings/Microsoft_Excel_Worksheet12.xlsx" - Can read an Excel from a particular sheet // This is the worksheet from the Parent Excel-sheet-12 XSSFWorkbook embeddedWorkbook = new XSSFWorkbook(pPart.getInputStream()); int countOfSheetXlsx=embeddedWorkbook.getNumberOfSheets(); ArrayList<String> sheetNames= new ArrayList<String>(); for(int i=0;i<countOfSheetXlsx;i++){ String name=workbook.getSheetName(i); sheetNames.add(name); } } } } } }