Apache POI 简单操作word文档(2007 .docx格式)

网上找了很多资料大多都是2003的word操作,而2007格式的资料非常少.于是只能自己摸索着做. 还好我的工作中用到的操作不多.
分享一下,虽然说的不多,可能有错误,至少我完成了我的工作.


先到poi官方网站http://poi.apache.org/ 下载poi包,我用的是 poi-3.10.1

解压以后将poi-3.10.1目录下的几个jar包全部导入项目 :

poi-3.10.1-20140818.jar

poi-examples-3.10.1-20140818.jar

poi-excelant-3.10.1-20140818.jar

poi-ooxml-3.10.1-20140818.jar

poi-ooxml-schemas-3.10.1-20140818.jar

poi-scratchpad-3.10.1-20140818.jar

这些包中包含了2003和2007的word , excel, ppt等,也可以根据需要只导入部分用到的包


此外,还要导入ooxml-lib目录里的三个jar包:

dom4j-1.6.1.jar

stax-api-1.0.1.jar

xmlbeans-2.6.0.jar

这是前面那些jar包依赖的包. 细心的人会发现在lib目录里面还有几个依赖的jar包,但是我的项目是用MyEclipse建立的web项目,已经有了,所以我没有重复导入.

如果你在运行中报错没有找到某某包,你可以根据提示,去百度这个包,你就会知道在哪可以下载到这个包


在java中导入需要的包

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import java.util.List;

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;



1.  读取一个word文档

    XWPFDocument doc;//word文档对象
    try{
        InputStream in_stream=new FileInputStream("D:\\test.docx");//文件流
        doc=new XWPFDocument(in_stream);
    }
    catch(IOException e){
        e.printStackTrace();
    }
这样就成功读入了一个word文档,下面可以进行相应的操作

2. 读取段落文本

</pre><pre name="code" class="java">List<XWPFParagraph> _paraList=doc.getParagraphs();//得到一个包含所有段落的List
XWPFParagraph _p=_paraList.get(0);//获取到第一个段落,根据需要读取相应段落
List<XWPFRun> _runsList=_p.getRuns();//获取段落中的run列表
 XWPFRun _run=_runsList.get(0);//获取第一个run对象
String s=_run.getText(0);//获取到run里面的子句字符串
_run.setText("这是插入的内容",0);//在0位置插入字符串

从word文档的起始位置开始,读取所有段落. 这里得说说XWPFRun类, 经过我自己测试,一个段落里面有多个XWPFRun对象,它大概是以标点符号,连续空格或者tab将段落划分成子句,一个run管理一个子句.

 例如 段落 "我有一头小毛驴,我从来也不骑.有一天我心血来潮骑它去赶集!"

我测试的时候在每个run子句后面插入数字,发现变成这样: "我有一头小毛驴0,1我从来也不骑2.3有一天我心血来潮骑它去赶集4!5" 

也就是说这个段落有5个XWPFRun对象,段落被拆分成了6个子句: <1>我有一头小毛驴  <2> ,(一个逗号)  <3>我从来也不骑 <4>.(句号) <5>有一天我心血来潮骑它去赶集 <6> !(叹号)

其实我也不大清楚怎么分的,当我在用一长串空格的时候,发现它竟然从中间的某个空格出断出两个子句来(可能是因为这串空格字符是我在不同时间打上去的,就变成了两个子句),

再说说XWPFRun的Position 

查阅 poi 的javadoc可以看到XWPFRun的方法setText(java.lang.String value, int pos) 

根据我测试,使用_run.setText()时

如果pos为 0 时,则是替换_run的子句,即覆盖原有全部内容; 如果pos是1,则是在子句末端追加文字

还有一个方法是 setText(String value); 不需要写插入位置,默认是在末尾追加文字


3.读取表格数据

List<XWPFTable> _tableList=doc.getTables();//获取到word中所有的表格对象
XWPFTable _table_table=_tableList.get(0);//得到第一个表格,根据需要获取相应第几个表格
 XWPFTableRow _row=_table.getRow(0);//获取表格的第0行,行号下标是从0开始的
 XWPFTableCell _cell=_row.getCell(0);//获取该行中第一个单元格,即第0行0列
String s=_cell.getText();//读取数据
_cell.setText("插入的数据");//插入数据
与段落差不多的方式获取到表格,并读取表格数据,在一些不是方方正正的表格,比如有很多合并单元格的表格中,元素在第几行,第几列你就得好好数数了,可以用插入数据来测试是否插对相应单元格.

但我发现一个问题,就是XWPFTable这个类中我只看到setText这个写入数据的函数,它是在原有内容上追加文字,没找替换文字的方法,因为我的工作没有替换文字的需求,所以我也懒得去找了.有需要的朋友自己查API或者相关资料.

4.保存word到磁盘

try{
    OutputStream _os=new FileOutputStream("D:\\temp.docx");
    doc.write(_os);
}
catch(IOException e){
    e.printStackTrace();
}
路径自己定义

word中还有很多其他操作,比如读取图片, 读取文字字体,样式等等, 具体自己查看相关资料和poi javadoc文档

http://poi.apache.org/apidocs/index.html














  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Apache POI 是一个 Java API,可以用来操作 Microsoft Office 格式的文件,包括 Word、Excel 和 PowerPoint 等。在本文中,我们将重点介绍如何使用 Apache POI 操作 Word 文档。 1. 添加 Maven 依赖 首先,我们需要在项目中添加 Apache POI 的依赖。在 pom.xml 文件中添加以下代码: ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> ``` 2. 创建 Word 文档 要创建一个新的 Word 文档,我们需要使用 XWPFDocument 类。以下是创建一个空白文档的示例代码: ```java XWPFDocument document = new XWPFDocument(); ``` 3. 添加段落 要向文档中添加段落,我们需要使用 XWPFParagraph 类。以下是向文档中添加一个段落的示例代码: ```java XWPFParagraph paragraph = document.createParagraph(); paragraph.setAlignment(ParagraphAlignment.CENTER); XWPFRun run = paragraph.createRun(); run.setText("Hello, World!"); ``` 4. 添加表格 要向文档中添加表格,我们需要使用 XWPFTable 类。以下是向文档中添加一个表格的示例代码: ```java XWPFTable table = document.createTable(); XWPFTableRow row = table.getRow(0); row.getCell(0).setText("Name"); row.addNewTableCell().setText("Age"); row.addNewTableCell().setText("Gender"); XWPFTableRow row1 = table.createRow(); row1.getCell(0).setText("Tom"); row1.getCell(1).setText("25"); row1.getCell(2).setText("Male"); ``` 5. 保存文档 要保存文档,我们需要使用 FileOutputStream 类将文档写入文件中。以下是将文档保存为名为“example.docx”的文件的示例代码: ```java FileOutputStream out = new FileOutputStream("example.docx"); document.write(out); out.close(); document.close(); ``` 完整的示例代码: ```java import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.xwpf.usermodel.*; public class WordTest { public static void main(String[] args) throws IOException { XWPFDocument document = new XWPFDocument(); // 添加段落 XWPFParagraph paragraph = document.createParagraph(); paragraph.setAlignment(ParagraphAlignment.CENTER); XWPFRun run = paragraph.createRun(); run.setText("Hello, World!"); // 添加表格 XWPFTable table = document.createTable(); XWPFTableRow row = table.getRow(0); row.getCell(0).setText("Name"); row.addNewTableCell().setText("Age"); row.addNewTableCell().setText("Gender"); XWPFTableRow row1 = table.createRow(); row1.getCell(0).setText("Tom"); row1.getCell(1).setText("25"); row1.getCell(2).setText("Male"); // 保存文档 FileOutputStream out = new FileOutputStream("example.docx"); document.write(out); out.close(); document.close(); } } ``` 这是一个简单的示例,介绍了如何使用 Apache POI 操作 Word 文档。您可以进一步研究该 API,以了解更多高级功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值