一、 需求背景

  在做项目的过程中,经常会遇到要把数据库数据导出到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(一)相关推荐

  1. Java操作word文件的工具选择

    Java操作word文件的工具选择 使用Java语言,创建doc.docx.excel.pdf等文档,并对文档进行一系列操作. Spire.Doc for Java https://blog.csdn ...

  2. Java操作word模板文件

    关于导出word文档,之前想过用ireport但模板文件比较复杂不容易画.所以采取了Java操作word文件,替换word中的元素方法 模板文件如下 单位名称:$ACCTNAME$ NO: $SN$ ...

  3. Java操作word文档将docx转换为pdf格式

    Java操作word文档将docx转换为pdf格式 一.整体说明 在上传 Office 课件时,格式有:doc,docx,xls,xlsx,ppt,pptx,程序需要将其 转换成 pdf 格式, 才能 ...

  4. java操作word,添加页眉,页眉图片,替换书签,添加水印(全)

    java操作word文档,添加页眉文本,页眉图片,替换书签,水印 原模板截图: 生成后的文档效果截图: 第一步:引入maven <dependency><groupId>spi ...

  5. java 操作 word 表格和样式,java读取word表格中的表格 java如何读取word中的excel表格数据...

    Java 利用poi 可以直接读取word中的表格保持样式生1.读取word 2003及word 2007需要的jar包 读取 2003 版本(.doc)的word文件相对来说比较简单,只需要 poi ...

  6. java操作word

    前言 使用java操作word使用的是java开源项目docx4j,在学习docx的使用过程中,参考了大牛的链接,下面放上我参考过的网址: http://blog.csdn.net/zhyh1986/ ...

  7. Java操作Word文档

    Java 生成 Word 的几种方案 参考 ​ 主要有这么一些工具可以使用 Jacob.Apache POI.Java2word.iText,还有一种方法是使用XML作为模板. ​ 使用 XML 的思 ...

  8. 【基础】java操作word,自动更新目录/域

    python操作word自动更新目录 aspose-words安装部署 增删水印 使用aspose-words,自动更新目录/域(如何使用,请参考其他博客) Document doc = new Do ...

  9. Java 操作Word表格——创建嵌套表格、添加/复制表格行或列、设置表格是否禁止跨页断行

    本文将对如何在Java程序中操作Word表格作进一步介绍.操作要点包括 如何在Word中创建嵌套表格. 对已有表格添加行或者列 复制已有表格中的指定行或者列 对跨页的表格可设置是否禁止跨页断行 创建表 ...

最新文章

  1. 小型星形网络结构设计示例
  2. 如何使用MERGE(合并)SQL
  3. 【阅读笔记】Thinking in Java 对象入门
  4. hp服务器ilo批量配置脚本
  5. 基于Bootstrap Ace模板+bootstrap.addtabs.js的菜单
  6. 如何将类序列化并直接存储入数据库
  7. 小波相干wtc matlab,实现时间序列的小波相干性分析,并画出图谱
  8. python 面向对象编程tcp_python 闯关之路三(面向对象与网络编程)
  9. webservice第一篇【介绍、Scoket、http调用、wsimport调用】
  10. SQL Server 2005:面向信息管理的全新平台
  11. HDMI、DVI和VGA接口互相转换问题
  12. Java异常处理之------Java方法中throws Exception使用案例!什么情况下使用throws Exception?...
  13. PLsql 永久注册码
  14. java离线地图web
  15. linux模拟键盘按键_Linux上的自动键盘按键
  16. 前端web设计师_Web设计师的时尚Web设计主题
  17. 从SO_REUSEPORT服务器的一个弊端看多队列服务模型
  18. 视频播放插件AVPro1-插件介绍
  19. uniapp editor编辑器
  20. FOR ALL ENTRIES IN

热门文章

  1. ps倒出gif只有html,PS中我做好了帧(动画没问题),但是怎么导出GIF的动画?
  2. Pycharm下载及设置文字大小快捷键
  3. AntDesignVue中Table表格嵌套子表格expandedRowRender插槽用法
  4. php正则怎么用,php正则及常用正则函数怎么用
  5. 步进电机S曲线的生成
  6. 世纪安图参加2014地理信息开发者大会
  7. 保留三位有效数字,四舍六入五成双
  8. 储存数据与操作Excel [爬虫专题(9)]
  9. 3原色对照表.....
  10. 超微服务器安装Linux,超微服务器使用IPMI安装操作系统