Apache POI 简单操作word文档(2007 .docx格式)
2014-09-21 19:50
465 查看
网上找了很多资料大多都是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
相关文章推荐
- 利用poi操作word文档(针对docx格式)
- apache poi操作office文档---- POI Word DOC格式转Html
- 利用poi操作word文档(针对docx格式)
- apache.poi包简单操作word文档
- Apache POI:Java程序读写Microsoft Office格式文档——简单完整实例讲解
- C#word(2007)操作类--新建文档、添加页眉页脚、设置格式、添加文本和超链接、添加图片、表格处理、文档格式转化
- poi操作word,简单写docx
- .NET操作WORD文档另存为其他格式的文件
- apache poi操作office文档----java在线预览txt、word、ppt、execel,pdf代码
- [原创] 让Word 2007默认文档保存格式为Word 2003的DOC格式
- 通过代码将Word 2007 template (dotx)文档转换Word 2007 (docx)文档(续)
- Asp.net操作Word文档,原来这么简单啊!
- 黄聪:C# web word文档操作,任意指定位置插入图片,表格简单操作
- C#操作Word文档(Office 2007)
- C#操作Word文档(Office 2007)
- IIS6中添加对OFFICE 2007文档格式 .docx .xlsx .pptx等的支持
- C#操作Word文档(Office 2007)
- C#操作Word文档(Office 2007)
- IIS6中添加对OFFICE 2007文档格式 .docx .xlsx .pptx等的支持
- 黄聪:C# web word文档操作,任意指定位置插入图片,表格简单操作