Springboot 之 POI 导出 Word 文件

本贴最后更新于 2594 天前,其中的信息可能已经时过境迁

导出 Word 文件其实与 Springboot 没有多大关系,这都是 Apache 子项目 POI 的功劳。下面简单介绍一下在 Springboot 项目中如何使用 POI 导出 Word 文件。

  • 关键的依赖是 poi 的 jar 包:

    org.apache.poi poi 3.15 org.apache.poi poi-scratchpad 3.15
  • 创建 Word 模板文件

创建一个 Word 文件,命名为:template.doc,内容如图:
POIå¯¼å ºWordæ  ä»¶ç  æ¨¡æ ¿

  • 编写导出程序

    private void build(File tmpFile,Map<String, String> contentMap, String exportFile) throws Exception {

    FileInputStream tempFileInputStream = new FileInputStream(tmpFile);
    HWPFDocument document = new HWPFDocument(tempFileInputStream);
    // 读取文本内容
    Range bodyRange = document.getRange();
    // 替换内容
    for (Map.Entry<String, String> entry : contentMap.entrySet()) {
    bodyRange.replaceText("${" + entry.getKey() + "}", entry.getValue());
    }

    //导出到文件
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    document.write(byteArrayOutputStream);
    OutputStream outputStream = new FileOutputStream(exportFile);
    outputStream.write(byteArrayOutputStream.toByteArray());
    outputStream.close();
    }参数说明:

tmpFile: 模板文件

contentMap:数据模型,包含具体数据的 map 对象

exportFile:需要保存导出文件的路径

  • 导出文件测试方法

    @Test
    public void testExportWord() throws Exception {

    String tmpFile = "D:/temp/template.doc"; String expFile = "D:/temp/result.doc"; Map<String, String> datas = new HashMap<String, String>(); datas.put("title", "标题部份"); datas.put("content", "这里是内容,测试使用POI导出到Word的内容!"); datas.put("author", "知识林"); datas.put("url", "http://www.zslin.com"); build(new File(tmpFile), datas, expFile);

    }
    **注意:**这里的模板文件是放到 D:/temp 目录下,在实际项目应用中这些模板文件都是需要放在项目的 classpath 中的,这样的做法很明显不能满足需求。

  • 模板文件中 classpath 中的导出文件测试方法

    @Test
    public void testExportWord2() throws Exception {
    String tmpFile = "classpath:template.doc";
    String expFile = "D:/temp/result.doc";
    Map datas = new HashMap();
    datas.put("title", "标题部份");
    datas.put("content", "这里是内容,测试使用 POI 导出到 Word 的内容!");
    datas.put("author", "知识林");
    datas.put("url", "http://www.zslin.com");

    build(ResourceUtils.getFile(tmpFile), datas, expFile);

    }

**注意:**使用 ResourceUtils 工具类的 getFile 方法即可读取 classpath 中的文件,所以这里读模板文件的方法是:ResourceUtils.getFile("classpath:template.doc")
以上两种方法导出的文件都放在:D:/temp/result.doc 文件中,具体的内容如下图:
POIå¯¼å ºWordç  ç» æ  å ¾ç

  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    949 引用 • 1460 回帖
  • POI
    23 引用 • 21 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
Ethan
从前现在过去不在回来,红红落叶望眼尘世外! 苏州

推荐标签 标签

  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 681 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 575 关注
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    24 引用 • 33 回帖 • 4 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖
  • 笔记

    好记性不如烂笔头。

    311 引用 • 790 回帖
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖 • 1 关注
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    92 引用 • 752 回帖
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 81 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 91 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    85 引用 • 324 回帖 • 2 关注
  • 倾城之链
    23 引用 • 66 回帖 • 184 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 247 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    316 引用 • 547 回帖 • 4 关注
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 11 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    108 引用 • 153 回帖 • 2 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    46 引用 • 114 回帖 • 140 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 780 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 38 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 52 关注
  • OnlyOffice
    4 引用 • 30 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    134 引用 • 1128 回帖 • 108 关注
  • 安全

    安全永远都不是一个小问题。

    201 引用 • 818 回帖 • 1 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    16 引用 • 236 回帖 • 234 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 3 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 234 回帖