java导出word

前言
在日常的开发工作中,我们时常会遇到导出Word文档报表的需求,比如公司的财务报表、医院的患者统计报表、电商平台的销售报表等等。

导出Word方式多种多样,通常有以下几种方式: 

    1. 使用第三方Java工具类库Hutool的Word工具类,参考网址为https://www.hutool.cn/docs/#/poi/Word生成-Word07Writer;

    2. 利用Apache POI和FreeMarker模板引擎;

    3. 第三方报表工具。

上面的几种方式虽然可以实现Word文档的导出,但有以下缺点:

    第一种方式操作简单,但也只能生成简单的Word文档,无法生成有表格的Word文档;

    第二种方式可以生成复杂的Word文档,但是还要进行Word转xml,xml转ftl的双重转换,不适合内容经常变更的Word文档;

    第三种方式有时候不适合对格式要求严格的文档。

那么,有没有既简单又高效的导出Word的方法呢?答案是肯定有的。接下来我就来介绍一种用Java语言实现的,通过XDocReport和FreeMarker模板引擎生成Word文档的方法。

准备环境
开发语言:

Java7及以上的版本。

开发工具:

Eclipse/Idea。

第三方依赖库:

XDocReport、POI、Freemarker。

模板语言:

FreeMarker。

Word编辑器:

Microsoft 365或其他版本较高的Word编辑器。

示例Word模板


                     
制作模板
Word模板如上图,可以看到,结构比较简单,包括两个部分,第一部分是纯文字和数字,第二部分主要是表格。我们在实际的开发过程中生成的报表几乎都是动态生成的,所以模板中的数字和表格里的数据都要替换成我们后台的实际数据。

替换Word模板中的动态变量,我们需要掌握两个知识点:

    1.Word文档中的Word域,word域是引导Word在文档中自动插入文字、图形、页码或其他信息的一组代码。在这里我们可以把         Word域理解成标识符,这个标识符表示Word文档中要被替换的内容;

    2.FreeMarker模板下的变量表达式,比如用${city}替换Word示例模板中的北京市。

了解了以上两个概念后,我们就可以动手编辑Word模板了,步骤如下:

1. 首先在Word模板中选中要替换的文本,在这儿拿标题中的"北京市"为例,然后键盘使用 Ctrl + F9 组合键将其设置为域,此时文本会被"{}"包围,接着鼠标右键选择【编辑域(E)...】:

2. 在弹出的对话框中,类别选择“邮件合并”,域名选择 "MergeField",域属性中的域名填入模版表达式${city},点击【确定】按钮:

3. 编辑后的效果如下:

4. 掌握替换文本的方法后,我们可以把Word模板第一部分需要替换的内容都替换成模板变量:

Word模板中表格数据的处理
表格中的数据实质上就是对集合的遍历。

表格数据的处理其实和上面对文本内容的处理是类似的,只不过要在Word模板中加上集合的变量,Java代码中也要有对集合进行特对的处理(这个在后面的代码展示部分会说)。

具体操作步骤如下:

1. 选定表格中要替换的文本,然后键盘使用 Ctrl + F9 组合键将其设置为域,接着鼠标右键选择【编辑域(E)...】:

2. 在弹出的对话框中,类别选择“邮件合并”,域名选择 "MergeField",域属性中的域名填入模版表达式${goods.num},点击【确定】按钮;

3. 重复步骤2,替换表格中的其他文本内容:

后台代码
添加依赖到pom.xml文件

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.1</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.1</version>
</dependency>
<dependency>
    <groupId>org.jxls</groupId>
    <artifactId>jxls</artifactId>
    <version>2.6.0</version>
    <exclusions>
        <exclusion>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
   

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值