POI读取word是否必须安装office?因为我将程序部署到服务器上的时候发现没装office不行,但是装了office就没事了。
另我们客户的服务器用的是aix操作系统,所以有没什么解决方法?谢谢。

解决方案 »

  1.   

    POI提供了一个让Java操作office文件的接口,但是前提是系统能够识别office文件,而识别的前提是你已经安装了office文件的识别代码,这就是office软件安装的意义所在。
      

  2.   

    照你这么说,在aix或者是Linux上就不能用poi了吗?
      

  3.   

    装不了office 的系统怎末读 word文档啊,当然不行
      

  4.   

    很难,建议lz把操作系统
    java 跨平台并没有它吹嘘的那么好
    有个问题请教一下,
    你们在处理word的时候有涉及到表格吗?poi怎么操作word里面的表格信息?
    ---------------------------------------------
    Quietly through .....
      

  5.   

    关键是poi要操作的东西不跨平台,不是java自己的东西,这并不是java跨平台的缺陷
      

  6.   

    我在unix上,用过poi解析excel, 只须把poi三个jar包放上就可以了.
      

  7.   

    刚才我又测试了下,在未装office的win2003 sp2系统中,能解析出文本,所以我现在怀疑是因为乱码的缘故导致在应用中出错,再稍微研究下吧,到时给各位答案
      

  8.   


    package org.LeeJ.util.word.poi;import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.List;import org.apache.poi.hwpf.HWPFDocument;
    import org.apache.poi.hwpf.extractor.*;
    import org.apache.poi.hwpf.model.*;
    import org.apache.poi.hwpf.usermodel.CharacterRun;
    import org.apache.poi.hwpf.usermodel.Picture;
    import org.apache.poi.hwpf.usermodel.Range;public class MsWordExtractorPC {
       /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException{
        
        //下面注释掉的是提取所有文字的
        FileInputStream in = new FileInputStream("F:/test.doc");
        WordExtractor extractor = new WordExtractor(in);
        
        String [] strArray = extractor.getParagraphText();
        String str =  extractor.getText();
        for(int i = 0; i < strArray.length; ++i)
         System.out.println(strArray[i]);
        
        System.out.println(str);
            //hwpfDocument是专门处理word的, 在poi中还有处理其他office文档的类
        HWPFDocument doc = new HWPFDocument(new FileInputStream("F:/test.doc"));
        //看看此文档有多少个段落
        Range range = doc.getRange();
        int numP = range.numParagraphs();
        System.out.println("number of Paragrah  " + numP);
       
       long start2 = System.currentTimeMillis();
        //得到word的数据流
        byte[] dataStream = doc.getDataStream();
        
        System.out.println("size of dataStream " + dataStream.length);
       
        int numChar = range.numCharacterRuns();
        System.out.println("number of CharacterRun " + numChar);
        PicturesTable pTable = new PicturesTable(dataStream);
        for(int j = 0; j < numChar; ++j){
         CharacterRun cRun = range.getCharacterRun(j);          //看看有没有图片
         boolean has = pTable.hasPicture(cRun);
         System.out.println("hasPicture " + has);
         if(has){
         Picture zhou =  pTable.extractPicture(cRun, true);
         //目录你就自己设了,像保存什么的格式都可以
         zhou.writeImageContent(new FileOutputStream("f:/"+ j +".bmp"));
         System.out.println("extract Picture successfully! ");
         }
        } 
      
       }
    }