最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

POI--WORD部分的示例

来源:动视网 责编:小OO 时间:2025-10-02 18:49:40
文档

POI--WORD部分的示例

ApachePOI----Word部分最近在研究ApachePOI,不过只研究了如何做word的部分。网上对于Excel等的介绍也很多例子也很多,但是对于word缺少的可怜,导致我学的也很费劲,只能算是会了皮毛。但是整理了下例子,也方便以后大家看。最好能有高手把这个word部分的知识和例子多传到网上给大家分享。ApachePOI是一个开源的利用Java读写Excel、WORD等微软OLE2组件文档的项目。最新的版本有很多改进,加入了对采用OOXML格式的Office2007支持,如xlsx、d
推荐度:
导读ApachePOI----Word部分最近在研究ApachePOI,不过只研究了如何做word的部分。网上对于Excel等的介绍也很多例子也很多,但是对于word缺少的可怜,导致我学的也很费劲,只能算是会了皮毛。但是整理了下例子,也方便以后大家看。最好能有高手把这个word部分的知识和例子多传到网上给大家分享。ApachePOI是一个开源的利用Java读写Excel、WORD等微软OLE2组件文档的项目。最新的版本有很多改进,加入了对采用OOXML格式的Office2007支持,如xlsx、d
Apache POI

                      ----Word部分

最近在研究Apache POI,不过只研究了如何做word的部分。网上对于Excel等的介绍也很多例子也很多,但是对于word缺少的可怜,导致我学的也很费劲,只能算是会了皮毛。但是整理了下例子,也方便以后大家看。最好能有高手把这个word部分的知识和例子多传到网上给大家分享。

Apache POI是一个开源的利用Java读写Excel、WORD等微软OLE2组件文档的项目。最新的版本有很多改进,加入了对采用OOXML格式的 Office 2007支持,如xlsx、docx、pptx文档。以下是POI的几个重要组成部分,以及各组件的功能概述。

POIFS是该项目的最古老,最稳定的一部分。.这是格式化OLE 2复合文档为纯Java的接口。 它同时支持读写功能。所有的组件,最终都依赖于它的定义

HSSF: MS-Excel 97-2003(.xls),基于BIFF8格式的JAVA接口。

XSSF:MS-Excel 2007+(.xlsx),基于OOXML格式的JAVA接口。

HWPF: MS-Word 97-2003(.doc),基于BIFF8格式的JAVA接口。只支持.doc文件简单的操作,读写能力有限。本API为POI项目早期开发,很不幸的 是主要负责HWPF模块开发的工程师-"Ryan Ackley"已经离开Apache组织,现在该模块没有人维护、更新、完善。

XWPF:MS-Word 2007+(.docx),基于OOXML格式的JAVA接口。较HWPF功能完善。

Word例子:

1读取一个word里的内容,只能读取纯文字,word里不能有图片表格等,否则图片和表格就会成为乱码。输出结果在后台显示

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import org.apache.poi.hwpf.extractor.WordExtractor;

//输出文字

public class world {

public static void main(String [] args){

    FileInputStream file;

    try {

        file = new FileInputStream("d:\\\\a.doc");

        WordExtractor extractor; 

        try {

            

            extractor = new WordExtractor(file);

            String st=extractor.getText();

            System.out.println(st);

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    

    } catch (FileNotFoundException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

    }

    

}

  

}

用另一种方式也可以输出文字

public class world2 {

     public static void main(String[] args) throws Exception{

        FileInputStream file;

        try {

            file=new FileInputStream("d:\\\\a.doc");

            HWPFDocument hDocument= new HWPFDocument(file);

              Range rang= hDocument.getRange();

              String string=rang.text();

            

            System.out.println(string);

        } catch (FileNotFoundException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

}

}

2,把从一个word里读出来的内容写到另一个里,虽然可以写进去,但是只能把文字、数字、字母等写进去,图片和表格依旧不可以。而且写进去的文字只能是字符形式写进去,这样在打开word文档时就会有个转换器的问题。但是可以写进去,不知道怎么解决。

import java.io.*;

import org.apache.poi.hwpf.HWPFDocument;

import org.apache.poi.hwpf.model.io.HWPFOutputStream;

import org.apache.poi.hwpf.usermodel.Range;

public class wordWrite {

    public static void main(String [] args){

            try {

//用了HWPFDocument API对于他的解释是:作为一个存储桶,我们把所有的word数据抛出到其中 我的理解就是把输入流读取的word数据都放到他这里了 以便调用方法使用

         HWPFDocument hDocument= new HWPFDocument(new FileInputStream("d:\\\\a.doc"));

              Range range= hDocument.getRange();              

              String st=range.text();//获得了word里的内容

              writeDoc("d:\\\\a.doc",st);//调用写入的方法

              System.out.println(st);

            } catch (Exception e) {

                e.printStackTrace();

            }

              

    }

    public static boolean writeDoc(String path, String string) {

        

        boolean w = false;

        try {

            byte b[] = string.getBytes("utf-8");

            ByteArrayInputStream bais = new ByteArrayInputStream(b);

            POIFSFileSystem fs = new POIFSFileSystem();

            DirectoryEntry directory = fs.getRoot();

            DocumentEntry de = directory.createDocument("WordDocument", bais);

            FileOutputStream ostream = new FileOutputStream(path);

            fs.writeFilesystem(ostream);

            bais.close();

            ostream.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

        return w;

}

}

3、把word文档里的某个内容替换成所需要的别的内容。也可以说是修改成自己想要的内容。但是还是仅限于修改文字。

public class word {    

    public static void main(String [] args){

            try {

             HWPFDocument hDocument= new HWPFDocument(new FileInputStream("d:\\\\a.doc"));

              Range range= hDocument.getRange();     

//在这里把word里的name替换成组织 当然word里要已经有了name这个单词

其实这个时候replaceText()方法并没有真正的替换了你原有word里的内容 你打开文档里面依旧显示name 但是你看后台输出的内容是已经修改了的 这就又需要把修改的内容写进word        

              range.replaceText("name组织1");

              String st=range.text();

              writeDoc("d:\\\\a.doc",st);

              System.out.println(st);

            } catch (Exception e) {

                e.printStackTrace();

            }

              

    }

public static boolean writeDoc(String path, String string) {    

//这里的写入我换了个方式 不过类似     依旧是以字节的形式写入 还是会有什么转换器的错误 我研究好久没解决这个问题

        boolean w = false;  

        try {  

            byte b[] = string.getBytes(); 

            FileOutputStream fs = new FileOutputStream(“d://b.doc”);

            HWPFOutputStream hos = new HWPFOutputStream();

            hos.write(b, 0, b.length);

            hos.writeTo(fs);

            hos.close();

                     w=true;

        } catch (Exception e) {  

            e.printStackTrace();  

        }  

        return w;

    }

    

4,把整个word里的内容读出来 写入另一个里 这次无论是图片还是文字或者表格都可以写入,而且没有那个转换器的错误了。但是其实就相当于复制了一个word到另一个word里。却无法实现修改内容在写入啊 或者别的。

public class word2 {

    public static void main(String[] args) {

        try {

    POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("d:\\\\bb.doc"));

            HWPFDocument hDocument = new HWPFDocument(fs);

            Range range = hDocument.getRange();

            String st = range.text();

            FileOutputStream out = new FileOutputStream("d:\\\\cc.doc");   

            fs.writeFilesystem(out);

            out.flush();

            out.close();

            System.out.println(st);

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}

5、这个是把图片从word里读出来 生成一张图片 也就是个的图片。但是我读出来却无法把它写进word里,也就是无法插入。我没研究出来。

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.List;

import org.apache.poi.hwpf.HWPFDocument;

import org.apache.poi.hwpf.usermodel.Picture;

//输出图片

public class Picture1 {

    public static void main(String[]args) throws FileNotFoundException, IOException{

    String savePath= "d:\\\\";   

    String docFile= savePath+ "a.doc";   

    FileInputStream file=new FileInputStream(docFile);

    HWPFDocument poiDoc = new HWPFDocument(file);

    List picList = poiDoc.getPicturesTable().getAllPictures();

    Picture picture = (Picture) picList.get(0);

    try {

        picture.writeImageContent(new FileOutputStream(imgFile));

        

    } catch (FileNotFoundException e) {

        e.printStackTrace();

    }

    

}

}

6,这个例子不太好。就是把表格遍历出来。但是还是无法写进word,你也无法在后台看到表格,只能在后台看到表格里的数据。这个例子的作用不大。

public class table1  

   {  

      public static void main(String [] args){

  

          try{  

             FileInputStream in = new FileInputStream("D:\\\\c.doc");          POIFSFileSystem pfs = new POIFSFileSystem(in);     

              HWPFDocument hwpf = new HWPFDocument(pfs);     

              Range range = hwpf.getRange();//得到文档的读取范围  

             TableIterator it = new TableIterator(range);  

             //迭代文档中的表格  

              while (it.hasNext()) {     

                  Table tb = (Table) it.next();     

                   //迭代行,默认从0开始  

                  for (int i = 0; i < tb.numRows(); i++) {     

                       TableRow tr = tb.getRow(i);     

                      //迭代列,默认从0开始  

                       for (int j = 0; j < tr.numCells(); j++) {

                          TableCell td = tr.getCell(j);//取得单元格  

                           //取得单元格的内容  

                           for(int k=0;k                               Paragraph para =td.getParagraph(k);     

                               String s = para.text();     

                              System.out.println(s);

                       }     

                       }    

                 }    

               } 

        }catch(Exception e){  

              e.printStackTrace();  

          }  

      }}

总结了算是有点用的以上几个例子,最大的问题就是无法写入,无法自己修改之后写入。希望有厉害的高手可以研究明白了给大家共享。

文档

POI--WORD部分的示例

ApachePOI----Word部分最近在研究ApachePOI,不过只研究了如何做word的部分。网上对于Excel等的介绍也很多例子也很多,但是对于word缺少的可怜,导致我学的也很费劲,只能算是会了皮毛。但是整理了下例子,也方便以后大家看。最好能有高手把这个word部分的知识和例子多传到网上给大家分享。ApachePOI是一个开源的利用Java读写Excel、WORD等微软OLE2组件文档的项目。最新的版本有很多改进,加入了对采用OOXML格式的Office2007支持,如xlsx、d
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top