在网上找了好多天将数据库中信息导出到word中的解决方案,现在将这几天的总结分享一下。总的来说,java导出word大致有5种解决方案:

1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。通过Jacob实现了在Java平台上对微软Office的COM接口进行调用。

优点:调用微软Office的COM接口,生成的word文件格式规范。

缺点:服务器只能是windows平台,不支持unix和linux,且服务器上必须安装微软Office。

2:Apache POI包括一系列的API,它们可以操作基于MicroSoft OLE 2 Compound Document Format的各种格式文件,可以通过这些API在Java中读写Excel、Word等文件。

优点:跨平台支持windows、unix和linux。

缺点:相对与对word文件的处理来说,POI更适合excel处理,对于word实现一些简单文件的操作凑合,不能设置样式且生成的word文件格式不够规范。

3:Java2word是一个在java程序中调用 MS Office Word 文档的组件(类库)。该组件提供了一组简单的接口,以便java程序调用他的服务操作Word 文档。 这些服务包括: 打开文档、新建文档、查找文字、替换文字,插入文字、插入图片、插入表格,在书签处插入文字、插入图片、插入表格等。

优点:足够简单,操作起来要比FreeMarker简单的多。

缺点:没有FreeMarker强大,不能够根据模版生成Word文档,word的文档的样式等信息都不能够很好的操作。

4:FreeMarker生成word文档的功能是由XML+FreeMarker来实现的。先把word文件另存为xml,在xml文件中插入特殊的字符串占位符,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板,编码调用FreeMarker实现文本替换并输出Doc。

优点:比Java2word功能强大,也是纯Java编程。

缺点:生成的文件本质上是xml,不是真正的word文件格式,有很多常用的word格式无法处理或表现怪异,比如:超链、换行、乱码、部分生成的文件打不开等。

5:PageOffice生成word文件。PageOffice封装了微软Office繁琐的vba接口,提供了简洁易用的Java编程对象,支持生成word文件,同时实现了在线编辑word文档和读取word文档内容。

优点:跨平台支持windows、unix和linux,生成word文件格式标准,支持文本、图片、表格、字体、段落、颜色、超链、页眉等各种格式的操作,支持多word合并,无需处理并发,不耗费服务器资源,运行稳定。

缺点:必须在客户端生成文件(可以不显示界面),不支持纯服务器端生成文件。

综合以上资料的参考,和网上的一些意见,最后选择了,第5种用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");

生成的文件效果:

java_导出_word_[转载]java导出word的5种方式相关推荐

  1. 关于java 操作word的几种方式

    1.apose word <dependency><groupId>com.luhuiguo</groupId><artifactId>aspose-w ...

  2. 导出Word的两种方式

    导出Word有两种方式,分别是前端和后端 这两种方式在实际开发中根据实际需要会选择不同的方式 方式对比: 前端导出: 优点:简单,快捷,对于样式的设定也比较方便 缺陷:只可以导出本页展示的数据,导出的 ...

  3. Java读取证书的两种方式

    关于证书基础以及创建.查看.删除.导入.导出以及其他功能详解请参照:Java使用keytool创建CA证书 Java读取证书有两种方式 1.从文件中读取 public static void main ...

  4. Java中创建对象的几种方式

    Java中创建对象的几种方式 1.使用new创建对象,在堆上创建. 2.克隆 3.反序列化 4.反射创建对象 5.NIO中可以使用本地方法直接分配堆外内存. 转载于:https://www.cnblo ...

  5. Java中创建对象的四种方式

    为什么80%的码农都做不了架构师?>>>    Java中创建对象的四种方式 (1) 用new语句创建对象,这是最常见的创建对象的方法.    (2) 运用反射手段,调用java.l ...

  6. java解析xml的几种方式

    java解析xml的几种方式 博客分类: java基础备忘-好记性不然烂笔头 XMLJava应用服务器数据结构编程  第一种:DOM. DOM的全称是Document Object Model,也即文 ...

  7. Java字符串连接的几种方式

    Java字符串连接的几种方式 字符串表现的几种方式 StringBuffer和StringBuilder及String的继承关系 字符串的连接 1.String的连接方法 可以看出连接方式是新建了一个 ...

  8. java操作Excel有两种方式 方式1:jxl操作Excel jxl的API

    java操作Excel有两种方式 方式1:jxl操作Excel 方式2:poi操作Excel 下面介绍jxl API: 使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用 ...

  9. 12月18日云栖精选夜读 | Java 中创建对象的 5 种方式!...

    作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有5种创建对象的方式,下面给出它们的 ...

最新文章

  1. 为什么要打jar_生活在西北的兰州人过春节为什么要打太平鼓?
  2. 【Flutter】Animation 动画 ( Flutter 动画的核心类 | Animation | CurvedAnimation | AnimationController | Tween )
  3. c# mysql timeout expired_C#百万数据查询出现超时问题的解决方法
  4. 任务型对话系统预训练最新研究进展
  5. 人人都能学会的python编程教程(基础篇)完整版
  6. 用Python写一个将Python2代码转换成Python3代码的批处理工具
  7. Linux 的 Out-of-Memory (OOM) Killer
  8. qt文件怎么设置全局变量_QT编程之——使用全局变量
  9. jQuery----分页插件实现
  10. linux设备树详解-韦东山-专题视频课程
  11. C#Socket编程TCP实例(四)
  12. WinCC数据报表控件
  13. 怎样屏蔽掉“网页对话框”
  14. 牛客MySQL:错题
  15. serverStatus详解
  16. 输入证件号码,生日自动回填
  17. sql包含怎么写_实习生简历怎么写?都包含哪些内容?
  18. 辞职一年不上班,生活会变得怎么样?
  19. layui 表格操作列按钮动态显示变换
  20. 如何用matlab绘制双调谐滤波器的阻抗频率特性曲线,一种双调谐无源滤波器的参数设计方法与流程...

热门文章

  1. LiveNVR高性能RTSP、Onvif探测流媒体服务接入海康、大华、华为、科达等摄像机、NVR进行全终端无插件直播...
  2. phpstudy后门(转自feng)
  3. ZooKeeper应用场景-分布式锁实现范例
  4. Jquery中的AJax技术结合PHP实现无刷新验证验证码
  5. debian下面字体管理的命令
  6. 解决软著还在申请中,app上线应用宝攻略
  7. 360浏览器兼容模式下get请求缓存解决方案
  8. 实用教程使用ueditor上传图片加水印
  9. 65、如何解决浮动引起的父元素高度塌陷
  10. 集成企业微信,企业微信扫码登录和企业微信容器内免密登录