[原创]java操作word(一)
一、 需求背景
在做项目的过程中,经常会遇到要把数据库数据导出到Word文件中的需求,因为很多情况下,我们需要将数据导出到WORD中进行打印。此需求可以通过用程序填充数据到word模板中来实现。所谓模板也就是标记了数据位置的Word文件。模板可以简单的分为两种:一种模板包含了固定的、有限个数的数据位置,比如一个请假条的模板中只有“部门、姓名、原因、天数、日期”几个数据位置,也可能是这5个数据位置中的某4个、某3个或某1个,但模板中的标签数量总是这个集合的子集(如下图所示:);另一种是包含了循环数据的,比如要生成一个员工信息表,这个表格中有不定个数的员工信息,每个员工的信息都包含了“编号、部门、姓名、年龄、籍贯”。第一种模板导出word文件相对比较简单,在本文中先描述此方案的实现方法。

二、 实现方法
1. 编辑模板:模板中必须标记好数据要插入的位置,这样才可以实现用程序插入数据到文件的相应位置,就是说要想生成文件,数据的位置必须用某种元素来标记出来。使用PageOffice填充数据到word文件,需要用Word书签来标记要插入数据的位置。先在Word模板中标记好“部门、姓名、原因、天数、日期”几个数据位置:PO_Dept、PO_Name、PO_Cause、PO_Num、PO_Date,如下图所示:

一般的开发人员使用Word比较少,可能不清楚Word书签是怎样插入的,下面简单的介绍一下插入书签的方法。
第一种方法:把光标定位到需要标记数据位置的地方,点Word菜单中的“插入”-“书签”,就会弹出一个标题为“书签”的对话框(如下图所示),输入新书签的名称,注意:书签名必须以字母、汉字、中文标点等开头,可以包含数字但中间不能有空格(用PageOffice开发的时候不推荐使用中文命名书签名)。点右侧的“添加”按钮,新的书签名将出现在下面的列表中。

第二种方法:选择几个文字、或一段文字、或者选择一段包含表格和图片的内容,为选中的内容指定书签的对象,然后执行第一种方法的同样操作,“插入”→“书签”……
注意:如果新插入位置或新对象采用的是已有的书签名,原有的书签将自动取消。
PageOffice示例代码中的模板在制作的时候,多采用第二中方法定义书签,插入书签之前会先写一个标示性的词语用中括号括起来,比如:[姓名],然后选中“[姓名]”,再插入书签。这样做的目的是便于在查看或编辑模板数据位置的时候一目了然。
在使用PageOffice开发的过程中,为了避免出现与用户自己定义的书签出现冲突,要求插入的书签名称必须以“PO_”开头。注意是字母o,不是数字0。书签名是不区分大小写的也可以写成“po_”。在PageOffice的概念里提到的数据区域,本质上就是书签,但是只有“po_”开头的书签才叫数据区域,请注意这点。
2. 编写代码调用PageOffice的接口填充数据到word文件中:
// 声明变量存储从数据库中读取的数据
String docName = "", docDept = "", docCause = "", docNum = "", docDate = "";
// 数据库数据读取操作(不同的数据库用不同的代码)
ResultSet rs = stmt.executeQuery("select * from leaveRecord where ID = " + id);
if (rs.next()) {
docName = rs.getString("Name");
docDept = rs.getString("Dept");
docCause = rs.getString("Cause");
docNum = rs.getString("Num");
docDate = rs.getString("SubmitTime");
}
rs.close();
//创建PageOffice的WordDocument对象,操作Word文件
WordDocument doc = new WordDocument();
doc.openDataRegion("PO_name").setValue(docName);
doc.openDataRegion("PO_dept").setValue(docDept);
doc.openDataRegion("PO_cause").setValue(docCause);
doc.openDataRegion("PO_num").setValue(docNum);
doc.openDataRegion("PO_date").setValue(docDate);
//创建PageOfficeCtrl对象打开文件
PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request);
poCtrl1.setServerPage(request.getContextPath()+"/poserver.zz"); //此行必须
//获取数据对象
poCtrl1.setWriter(doc);
// 打开文档
poCtrl1.webOpen("doc/template.doc", OpenModeType.docReadOnly, "Tom");
三、 生成文件的效果

四、 示例下载
http://www.zhuozhengsoft.com/down4/Java/BigDemo/poword.rar,或者下载PageOffice for Java的开发包,查看开发包中的示例:三、5、请假条示例
[原创]java操作word(一)的更多相关文章
- [原创]java操作word生成水印
应用场景 为了保护版权或辨别文件的真伪,有时需要在生成的Word文件中动态添加水印,PageOffice组件的WaterMark类就封装了给在线编辑的Word文件添加水印这一功能,调用接口非常简单. ...
- Java 操作Word书签(二):添加文本、图片、表格到书签内容
在Java操作Word书签(一)中介绍了给Word中的特定段落或文字添加书签.读取及删除已有书签的方法,本文将继续介绍Java 操作Word书签的方法,即如何给已有的书签添加内容,包括添加文本.图片. ...
- Java操作word文档使用JACOB和POI操作word,Excel,PPT需要的jar包
可参考文档: http://wibiline.iteye.com/blog/1725492 下载jar包 http://download.csdn.net/download/javashixiaofe ...
- [转载]java操作word(一)
一. 需求背景 在做项目的过程中,经常会遇到要把数据库数据导出到Word文件中的需求,因为很多情况下,我们需要将数据导出到WORD中进行打印.此需求可以通过用程序填充数据到word模板中来实现.所谓模 ...
- [原创]Java给word中的table赋值
一.准备工作: 下载PageOffice for Java:http://www.zhuozhengsoft.com/dowm/ 二. 实现方法: 要调用PageOffice操作Word中的tabl ...
- [原创]java导出word的5种方式
在网上找了好多天将数据库中信息导出到word中的解决方案,现在将这几天的总结分享一下.总的来说,java导出word大致有5种解决方案: 1:Jacob是Java-COM Bridge的缩写,它在Ja ...
- Java 操作Word表格——创建嵌套表格、添加/复制表格行或列、设置表格是否禁止跨页断行
本文将对如何在Java程序中操作Word表格作进一步介绍.操作要点包括 如何在Word中创建嵌套表格. 对已有表格添加行或者列 复制已有表格中的指定行或者列 对跨页的表格可设置是否禁止跨页断行 创建表 ...
- Java 操作Word书签(三):用文本、图片、表格替换书签
本篇文章将继续介绍通过Java来操作Word书签的方法,即替换Word中已有书签,包括用新的文本.图片.表格等替换原有书签处的内容. 使用工具:Free Spire.Doc for Java (免费版 ...
- Java 操作Word表格
本文将对如何在Java程序中操作Word表格作进一步介绍.操作要点包括 如何在Word中创建嵌套表格. 对已有表格添加行或者列 复制已有表格中的指定行或者列 对跨页的表格可设置是否禁止跨页断行 创建表 ...
随机推荐
- maven打包自动配置数据库链接信息
pom.xml加入下面代码 <profiles> <profile> <id>dev</id> <activation> <activ ...
- Java中的BigInteger在ACM中的应用
Java中的BigInteger在ACM中的应用 在ACM中的做题时,常常会遇见一些大数的问题.这是当我们用C或是C++时就会认为比較麻烦.就想有没有现有的现有的能够直接调用的BigInter,那样就 ...
- python 依照list中的dic的某key排序
面试题之中的一个. s=[ {"name":"Axx","score":"90"}, {"name" ...
- Android 组件之Service解析
原创文章,转载请注明 http://blog.csdn.net/leejizhou/article/details/50866875 李济洲的博客 Service是Android四大组件之中的一个.S ...
- word中更改图片和标题之间的垂直距离
word中插入图片后.往往须要给图片加上标题. 你插入图片和给图片插入标题时,word用的是默认的格式给你插入的图片和标题. 假如原来的paragraph是2倍行距.你的图片和标题之间的距离也是2倍行 ...
- java 发送微信客服消息
package com.baosight.wechat.service; import net.sf.json.JSONObject; import org.apache.commons.httpcl ...
- Azure Mobile App - Custom Authentication
Custom Authentication: 1. For OLD Mobile Service - https://azure.microsoft.com/en-us/documentation/a ...
- ffmpeg 跟我学 视频教程
最近一段时间找时间录制了一些Ffmpeg视频教程,还有录制完毕,会持续更新,内容会包含Ffmeg保存文件,网络流转发, 编码,解码,播放器制作,以及服务端搭建等等,适合初学者,有需要的朋友的可以关注: ...
- Spring Cloud(十一):Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式
上篇文章主要介绍了Zuul网关使用模式,以及自动转发机制,但其实Zuul还有更多的应用场景,比如:鉴权.流量转发.请求统计等等,这些功能都可以使用Zuul来实现. Zuul的核心 Filter是Zuu ...
- kubernetes调度之资源配额示例
系列目录 前面说过,资源配额限制在指定名称空间下,对资源对象数量和特定类型的资源的限制,你可以在ResourceQuota中指定配额 创建名称空间 我们创建一个新的名称空间来演示 kubectl cr ...