在Excel中使用Java读取嵌入对象 [英] Read embedded Object in excel using java

查看:3175
本文介绍了在Excel中使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆