`
wuhaidong
  • 浏览: 357702 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

java用poi实现对word读取和修改操作

    博客分类:
  • SE
 
阅读更多

java编程要实现对word的操作没有vb那种编程语言来得容易,得借助一些开源组件,其中就包括jacob、poi等, 而poi应用得最为广泛,对word2003和2007的读和写word操作都十分方便。它是Apache组织的一个项目,早在2001年就已经发布了第 一个版本,可以说是apache组织的一个老牌项目,到现在已经走过了10年光辉历程,目前最新版本是3.8的beta版本。下面就以该版本来演示如何实 现对word进行读取和改写值操作。

本文的所有源代码可以通过下载poi实现对word读写操作实例源码 (3)获得。

1.下载

下载3.8beta4版本,请记得一定要下载该版本,其他版本读取word模板并改写内容生成新的文件后,打开新文件时会提示“word无法读取文档,文档可能损坏。”,见下图


低版本poi生成word文档打开时的错误

2.集成到项目

这一步很简单,只要把下载后解压得到的poi-3.8-beta4-20110826.jar和poi-scratchpad-3.8-beta4-20110826.jar两个文件复制到java web项目的lib目录下就行了

3.制作word模板

把需要变动的值全部用代码来代替,例如你需要改变名称的值,则可以在模板中用name来表示。详细见附件中的doc文件。

4.调用接口方法实现对word的读写操作

整个过程就是先读取模板,然后修改内容,再重新生成新的文档保存到本地或者输出文件流提供下载,下面分别是生成新文档和输出文件流两种方式的代码片断,详细的代码请见下列代码中的readwriteWord()两个重载方法。

 

==========================================================================

//======================生成新文档的方式::==========================

package work.tool;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.model.FieldsDocumentPart;
import org.apache.poi.hwpf.usermodel.Field;
import org.apache.poi.hwpf.usermodel.Fields;
import org.apache.poi.hwpf.usermodel.Range;

/**
 * 实现java用poi实现对word读取和修改操作
 * @author fengcl
 *
 */
public class ReadAndWriteDoc {
    
    /**
     * 实现对word读取和修改操作
     * @param filePath    word模板路径和名称
     * @param map        待填充的数据,从数据库读取
     */
    public static void readwriteWord(String filePath, Map<String,String> map){
        //读取word模板
//        String fileDir = new File(base.getFile(),"http://www.cnblogs.com/http://www.cnblogs.com/../doc/").getCanonicalPath();
        FileInputStream in = null;
        try {
            in = new FileInputStream(new File(filePath));
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        }
        HWPFDocument hdt = null;
        try {
            hdt = new HWPFDocument(in);
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        Fields fields = hdt.getFields();
        Iterator<Field> it = fields.getFields(FieldsDocumentPart.MAIN).iterator();
        while(it.hasNext()){
            System.out.println(it.next().getType());
        }
    
        //读取word文本内容
        Range range = hdt.getRange();
        System.out.println(range.text());
        //替换文本内容
        for (Map.Entry<String,String> entry: map.entrySet()) {
            range.replaceText("$" + entry.getKey() + "$",entry.getValue());
        }
        ByteArrayOutputStream ostream = new ByteArrayOutputStream();
        String fileName = ""+System.currentTimeMillis();
        fileName += ".doc";
        FileOutputStream out = null;
        try {
            out = new FileOutputStream("E:\\test\\"+fileName,true);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            hdt.write(ostream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //输出字节流
        try {
            out.write(ostream.toByteArray());
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            ostream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

//======================输出文件流下载方式:==========================  


    /**
     * 实现对word读取和修改操作
     * @param response    响应,设置生成的文件类型,文件头编码方式和文件名,以及输出
     * @param filePath    word模板路径和名称
     * @param map        待填充的数据,从数据库读取
     */
    public static void readwriteWord(HttpServletResponse response, String filePath, Map<String, String> map){
        //读取word模板文件
//        String fileDir = new File(base.getFile(),"http://www.cnblogs.com/http://www.cnblogs.com/../doc/").getCanonicalPath();
//        FileInputStream in = new FileInputStream(new File(fileDir+"/laokboke.doc"));
        FileInputStream in;
        HWPFDocument hdt = null;
        try {
            in = new FileInputStream(new File(filePath));
            hdt = new HWPFDocument(in);
        } catch (Exception e1) {
            e1.printStackTrace();
        }
        
        Fields fields = hdt.getFields();
        Iterator<Field> it = fields.getFields(FieldsDocumentPart.MAIN).iterator();
        while(it.hasNext()){
            System.out.println(it.next().getType());
        }

        //替换读取到的word模板内容的指定字段
        Range range = hdt.getRange();

        for (Map.Entry<String,String> entry:map.entrySet()) {
            range.replaceText("$" + entry.getKey() + "$",entry.getValue());
        }

        //输出word内容文件流,提供下载
        response.reset();
        response.setContentType("application/x-msdownload");
        String fileName = ""+System.currentTimeMillis()+".doc";
        response.addHeader("Content-Disposition", "attachment; filename="+fileName);
        ByteArrayOutputStream ostream = new ByteArrayOutputStream();
        OutputStream servletOS = null;
        try {
            servletOS = response.getOutputStream();
            hdt.write(ostream);
            servletOS.write(ostream.toByteArray());
            servletOS.flush();
            servletOS.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }
}
 
分享到:
评论
3 楼 贝塔ZQ 2016-09-19  
java实现操作word的读取和修改操作,用插件实现的话,可以试试PageOffice插件,专门操作office文件的
2 楼 yh412 2015-10-19  
[flash=200,200][url][img]
引用
[/img][/url][/flash]
1 楼 夜爽星 2013-07-16  
最后下载下来的 word 文档我怎么 打不开啊?

相关推荐

    java用poi实现对word读取和修改操作.pdf

    总结起来,Apache POI的`XWPFDocument`类和相关的接口提供了一种强大的方式来读取和修改Word文档内容,使得在Java中自动化处理Word文档成为可能。`WordUtil`类展示了如何实现基础的文本替换功能,但实际应用中可能...

    java Apache poi 对word doc文件进行读写操作

    在实际应用中,Apache POI 的功能不仅限于简单的读写操作,还支持复杂的格式转换、样式调整和模板填充等功能,是 Java 开发者处理 Word 文件的强大工具。然而,需要注意的是,由于 `.doc` 文件格式的复杂性,处理...

    POI处理EXCEL和WORD文件的JAR包和资料

    `使用POI读写Word doc文件 - 好好学习,天天向上(Elim的博客) - ITeye技术网站.html`和`java用poi实现对word读取和修改操作 - JAVA - ITeye技术网站.html`则聚焦于POI处理Word文档的读取和修改功能。这可能涵盖...

    POI读取 word 2003 和 word 2007 的例子

    这是一个POI读取word 2003 和 word 2007的例子 是一个Eclipse工程 下载后直接导入工程 运行 src 目录下的 Test java 类即可 这个 rar 包中包含着 POI 读取word 2003 和 word 2007 所需要的 jar 包 也有需要读取的 ...

    java 利用POI读取Word文件中的内容

    在提供的压缩包文件中,StreamDemo_17.java可能是实现上述操作的一个示例代码,而Java.jpg可能是一个示例图片,用于展示如何处理Word文档中的图片。通过学习和理解这个例子,你可以更好地掌握使用Apache POI读取Word...

    java读写Excel,POI.JAR,Word内容读取

    java读写Excel,POI.JAR,Word内容读取

    java 使用POI合并两个word文档.docx

    Java 是一种流行的编程语言,POI(Poor Obfuscation Implementation)是一个流行的 Java 库,用于操作 Microsoft Office 文件,包括 Word 文档。合并两个 Word 文档是指将两个独立的 Word 文档合并成一个新的 Word ...

    JAVA-POI读取word每一段所在页码(附依赖jar包).zip

    我给出了代码和所有的解释,用POI读取word中的页码。也算是小方法了,基本很准确,为什么要加一个基本呢?因为,分页标志符号在第一行为空白行的时候没有分页符!!所以你的文档如果有很多首段空白行的话,不要浪费C...

    Java Poi流根据Word模板插入相应的文本、表格和图片,并生成新的Word报告。

    XWPFDocument可以读取、修改和创建Word文档。在生成新报告的过程中,我们需要先加载模板文件,这可以通过创建XWPFDocument对象并传入模板文件的输入流来实现。 文本插入通常涉及到XWPFParagraph和XWPFRun对象。...

    Java利用poi对word插入文字图片

    在Java编程领域,Apache POI库是一个非常实用的工具,它允许开发者读写Microsoft Office格式的文件,如Word、Excel和PowerPoint...通过掌握Apache POI,你可以实现对Word文档的完全控制,让Java与Office世界无缝对接。

    java采用poi3.16解析word文档

    1、本案例采用apache开源的poi3.16,读取word文档中文本 ...3、poidemo是一个web工程,运行后,点击首页中的下载按钮,跳转到ReadWriteAndDownloadDocServlet,实现对word中文本内容的替换,并 提供下载功能

    POI实现word和excel在线预览

    本项目提供的"POI实现word和excel在线预览"是基于Apache POI的一个实用工具集,它能够帮助开发者实现在Web环境下对这些文件的在线预览功能,无需用户下载文件到本地即可查看内容,提高了用户体验和数据安全性。...

    java poi操作word模版文件生成表单和修改

    总的来说,Java POI为Java开发者提供了一个强大的工具,能够方便地处理Word文档,包括创建、修改和填充表单,这对于自动化报告生成、数据导出或任何基于Word文档的工作流程都是极其有用的。通过熟练掌握Java POI,你...

    Java通过POI读取Excel遍历数据,批量生成word文档

    通过这种方式,你可以根据业务需求,利用Java和Apache POI库实现Excel数据的批处理,生成大量定制化的Word文档。这个过程对于报告生成、自动化数据导出或者大规模邮件合并等场景非常有用。 这个示例代码只是一个...

    安卓使用poi读取及修改word文档

    Apache POI是一个广泛使用的开源库,它允许开发者用纯Java代码操作微软的Office格式,包括Word(.doc)、Excel(.xls)和PowerPoint(.ppt)等。在"安卓使用POI读取及修改Word文档"这个主题中,我们将深入探讨如何在...

    [简单]poi读取word 2007简单文本框值

    综上所述,Apache POI提供了一种强大的方式来读取和操作Word文档,包括其中的文本框。通过理解Open XML结构和使用Apache POI提供的API,开发者可以有效地处理Word文档的各个部分,实现自定义的需求。在处理"文本框...

    Java 使用 poi 和 aspose 实现 word 模板数据写入并转换 pdf 增加水印

    在我们的案例中,我们可以用它来读取和写入Word文档。POI提供了一套API,允许开发者操作文档中的文本、图片、表格等元素。 2. **Aspose.Words for Java**: Aspose.Words 是一个强大的商业组件,它提供了对多种...

    poi实现对word读写操作实例源码Java源码

    本实例将详细介绍如何利用Apache POI在Java中实现Word的读写功能。 首先,我们需要引入Apache POI的依赖库。通常,这可以通过在Maven或Gradle项目中添加相应的依赖来完成。对于Maven,可以在pom.xml文件中添加以下...

    java-poi完美读写word(doc/docx)和TXT。附jar包

    在这个主题中,我们将深入探讨如何使用Java POI库来实现Word(包括.doc和.docx)以及TXT文件的读写操作。 首先,让我们了解一下Java POI的工作原理。POI库提供了HSSF和XSSF两个API,分别用于处理旧版的二进制Excel...

    java_poi实现excel导入导出

    Java POI 的主要特点是可以在 Java 应用程序中读取、写入和操作 Office 文件。 2. Java POI 的组成 Java POI 由多个组件组成,每个组件负责处理不同的 Office 文件格式。以下是 Java POI 的主要组件: * POIFS ...

Global site tag (gtag.js) - Google Analytics