Java将数据写入word文档(.doc)

Java可用org.apache.poi包来操作word文档。org.apache.poi包可于官网上下载,解压后各jar作用如下图所示:
poi包中的各jar用途
可根据需求导入对应的jar。

一、HWPFDocument类的使用
用HWPFDocument类将数据写到指定的word文档中,基本思路是这样的:
- 首先,建立一个HWPFDocument类的实例,关联到一个临时的word文档;
- 然后,通过Range类实例,将数据写入这个word文档中;
- 接着,将这个临时的word文档通过write函数写入指定的word文档中。
- 最后,关闭所有资源。
下面详细说明各个步骤。
1.构造函数
这里要说明一下,经过试验,暂时还没找到直接在程序中新建一个word文档并读取的方法,只能先创建好temp.doc,然后在程序中读取。(用File-createNewFile和POIFSFileSystem.create创建出来的.doc文件,都不能被正确读取)
另外,其实选择哪种参数传入都是一样的,毕竟HWPFDocument关联的word文档是无法写入的,只是当作一个临时文件。所以,选择最为熟悉的InputStream较为合适。
参数1:InputStream。可将word文档用FileInputStream流读取,然后传入HWPFDocument类。主要用于读取word文档中的数据。
参数2:POIFSFileSystem。POIFSFileSystem的构造函数参数可以是(File,boolean)【这样的话file必须是已经存在的】,后者为false时可读写。这里可以写为

HWPFDocument doc = new HWPFDocument(new POIFSFileSystem(new File("temp.doc"),false));

2.Range类
(1)获取Range类实例。
HWPFDocument类中有一系列获取Range类实例以操作word文档的方法。比较常用的是getRange(),这个方法可以获取涵盖整个文档的范围,但不包括任何页眉和页脚。

Range range = doc.getRange();

此外,还有获取所有文本范围的getOverallRange()、获取所有文本框的getMainTextboxRange()等等,具体可以根据需求查阅文档。

(2)Range类操作word文档
Range类中有大量获取文档数据的方法,若有需要可以查阅文档。这里只说明与写入数据有关的方法。
1. insertBefore(String),将字符串插入到此range的开头。返回值类型:CharacterRun
2. insertAfter(String),将字符串插入到此range的结尾。返回值类型:CharacterRun
3. insertTableBefore(short列数, int行数),在此range的开头插入一个指定行列数的表。返回值类型:Table
4. text(),获取当前range的所有文本。返回值类型:String。虽然不是写入数据的方法,但是在调试过程中比较好用。

3.write方法
HWPFDocument类中的write方法有三种重载形式:(实际上可以理解为writeTo)
参数1:空参数。将本对象关联的word文档写入另一个打开的可写的POIFSFileSystem文件中。
参数2:File。将本对象关联的word文档写入指定的文件(newFile)中。如果该文件不存在,则创建;若存在,则覆盖。
参数3:OutputStream。将本对象关联的word文档写入指定的字节输出流中。
可以根据需求选择,但是最好还是选择OutputStream,因为输出流的操作空间更大。参数2的newFile不能续写,只能覆盖。
可以将其直接写入目标文件的输出流,也可以先写入一个字节数组输出流,在通过字节数组输出流写入到目标文件输出流中。

4.关闭资源
- 关闭doc.close();,也即是关闭doc所使用的资源”temp.doc”
- 关闭将数据写入指定word文档的输出流

二、代码示例

    /**
     * @description 将数据归档到.doc的word文档中。数据续写到原目标文件末尾。
     * @param source
     *            源文件(必须存在!)
     * @param sourChs
     *            读取源文件要用的编码,若传入null,则默认是GBK编码
     * @param target
     *            目标word文档(必须存在!)
     */
    public static 
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值