使用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 .getAllEmbeddedObjectsXSSFWorkbook.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); } } } } } }