目录

实现方式一、通过原生的POI

实现方式二、通过Hutool工具包

步骤1、添加pom依赖

步骤2、编写几行代码

步骤3、启动项目,大功告成

实现的效果


最近在做一个word导出功能,需求非常简单,只需要将内容导出到word文件里即可,对于word的格式并没有要求。功能不复杂,想快速实现这个功能,但是使用POI的话,比较麻烦。本文记录一下通过一个工具类即可实现简单的word导出的功能。

项目架构:Springboot + mybatis-plus + MySQL + Maven

实现方式一、通过原生的POI

通过原生的POI实现这个功能感觉有点大材小用,实现起来也比较复杂。可参考一篇写的比较好的博客:Apache POI使用详解。已经有其他人写的很好了,这里就不再赘述。

POI读写Excel功能强大、操作简单。但是POI操作时,一般只用它读取word文档,POI只能能够创建简单的word文档,相对而言POI操作时的功能太少。

实现方式二、通过Hutool工具包

如果以下内容看不懂,可参考Hutool工具包关于poi的介绍:Hutool工具包的使用方法

步骤1、添加pom依赖

   <dependencies><!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>4.6.1</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><!--说明 hutool-4.x的poi-ooxml 版本需高于 3.17(别问我3.8版本为啥不行,
因为3.17 > 3.8 ) hutool-5.x的poi-ooxml 版本需高于 4.1.2 xercesImpl版本高于2.12.0--><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency></dependencies>

步骤2、编写几行代码

Hutool将POI中Word生成封装为Word07Writer, 通过分段写出,实现word生成。

使用例子

Word07Writer writer = new Word07Writer();// 添加段落(标题)
writer.addText(new Font("方正小标宋简体", Font.PLAIN, 22), "我是第一部分", "我是第二部分");
// 添加段落(正文)
writer.addText(new Font("宋体", Font.PLAIN, 22), "我是正文第一部分", "我是正文第二部分");
// 写出到文件
writer.flush(FileUtil.file("e:/wordWrite.docx"));
// 关闭
writer.close();

步骤3、启动项目,大功告成

完成前两步即可导出word文档。

********************************************************************************************************************************************************************************************************************************************************************************************************************

附:以下是我的功能具体实现(步骤1省略)

public RestResponse word(Integer examId) {Word07Writer word07Writer = new Word07Writer();// 1、得到当前试卷信息Exam exam = this.getById(examId);// 1.1 保存试卷名称word07Writer.addText(new Font("方正小标宋简体", Font.PLAIN, 22), "试卷名称:" + exam.getTitle());// 2、得到当前试卷的题目列表List<Integer> quIds = quExamService.listByExamId(examId);// 题目列表用int count = 1;for (Integer quId : quIds) {// 3、得到当前题目信息Question question = questionMapper.selectById(quId);// 4、保存到文件中:题目 格式为( 题目2. 多选题测试(20分))word07Writer.addText(new Font("宋体", Font.PLAIN, 15),"题目" + (count++) + ". " + question.getContent() + "(" + (question.getQuScore()) + "分)");// 5、得到每个题目的选项列表List<QuAnswerDTO> quAnswerDTOList = quAnswerService.listByQu(quId);// 6、答案和解析StringBuilder answers = new StringBuilder();// 题目类型 1 单选题 2 多选题 3 判断题 4 简答题 5 填空题Integer quType = question.getQuType();for (QuAnswerDTO quAnswerDTO : quAnswerDTOList) {// 添加题目选项word07Writer.addText(new Font("宋体", Font.PLAIN, 10),quAnswerDTO.getAbc() + "、" + quAnswerDTO.getContent());// 得到题目选项的答案 1 正确答案,0 错误答案Integer isRight = quAnswerDTO.getIsRight();String dtoAbc = quAnswerDTO.getAbc();// 得到正确答案this.getAnswers(quType, isRight, answers, dtoAbc);}// 7、得到答案并保存到文件中word07Writer.addText(new Font("宋体", Font.PLAIN, 10), "答案:" + answers);// 8、得到题目整体解析String analysis = question.getAnalysis();word07Writer.addText(new Font("宋体", Font.PLAIN, 10),"解析:" + (Objects.isNull(analysis) ? "暂无解析" : analysis));}// 9、写出到文件(试卷名称.docx)word07Writer.flush(FileUtil.file("G:/" + Math.round(Math.random() * 100) + exam.getTitle() + ".docx"));// 10、关闭word07Writer.close();return RestResponse.ok();}/*** 得到答案** @param quType  题目类型 1 单选题 2 多选题 3 判断题 4 简答题 5 填空题* @param isRight 是否为正确答案 1 正确答案,0 错误答案* @param answers 得到的答案* @param dtoAbc  选项ABC*/private void getAnswers(Integer quType, Integer isRight, StringBuilder answers, String dtoAbc) {if (quType == Constants.QU_TYPE_SINGLE && isRight == Constants.NUMBER_ONE) {answers.append(dtoAbc);}if (quType == Constants.QU_TYPE_MULTI && isRight == Constants.NUMBER_ONE) {answers.append(dtoAbc);}if (quType == Constants.QU_TYPE_JUDGE && isRight == Constants.NUMBER_ONE) {answers.append(dtoAbc);}if (quType == Constants.QU_TYPE_SHORT && isRight == Constants.NUMBER_ONE) {answers.append(dtoAbc);}if (quType == Constants.QU_TYPE_FILL && isRight == Constants.NUMBER_ONE) {answers.append(dtoAbc);}}

实现的效果

在本地电脑可以,但是项目部署到服务器,还是无法下载到本地电脑,如果想要从服务器上下载word文档,请参考另一篇文章:【Java用法】使用Java导出word文档的解决方案(适用于从服务器上下载到本地电脑)

完结!

【Java用法】使用Java导出word文档的解决方案(适用于Windows电脑)相关推荐

  1. 【Java用法】使用Java导出word文档的解决方案(适用于从服务器上下载到本地电脑)

    本文目录 一.Controller 二.Service 接口类 三.ServiceImpl 实现类 四.Content-Type 类型与MIME Type类型对照表 最近在做一个word导出功能,需求 ...

  2. Java使用POI实现导出Word文档

    POI官网链接:http://deepoove.com/poi-tl/(方便各位博友后期深入学习) 1.首先导入POM依赖包 <dependency><groupId>com. ...

  3. Java后端使用Freemarker导出word文档的各种细节

    2019独角兽企业重金招聘Python工程师标准>>> 1.前言 最近在项目中,因客户要求,需要做一个导出成word的功能(比如月度报表等),技术选型也考虑过几种,比如easypoi ...

  4. Java 用Freemarker完美导出word文档(带图片)

    第一步:制作word模板 第二步:格式转换,将word另存为xml 第三步:找到图片base64,删除base64替换成占位符${image},只修改图片的,其余的不用动 第四步:加入依赖 <d ...

  5. java 图片 word文档_【Java】用Freemarker完美导出word文档(带图片)

    Java  用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...

  6. java freemarker word_Java 用Freemarker完美导出word文档(带图片)(示例代码)

    Java  用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...

  7. 【day22】java导出word文档(包含导出图片)

    1.[Java]使用freemarker模板技术导出word main方法测试 package com.havenliu.document;import java.io.UnsupportedEnco ...

  8. 【Java实现导出Word文档功能 XDocReport +FreeMarker】

    Java实现导出Word文档功能(XDocReport +FreeMarker) 前言 在日常的开发工作中,我们时常会遇到导出Word文档报表的需求,比如公司的财务报表.医院的患者统计报表.电商平台的 ...

  9. java调用word模板文件_Java使用模板导出word文档

    Java使用模板导出word文档 需要导入freemark的jar包 使用word模板,在需要填值的地方使用字符串代替,是因为word转换为xml文件时查找不到要填入内容的位置.尽量不要在写字符串的时 ...

最新文章

  1. OpenCV+python:色彩空间转换及色彩通道的分离和合并
  2. matlab设计长度为50的滤波器,实验5 基于Matlab的数字滤波器设计
  3. c语言sleep_编程代码:用C语言来实现下雪效果,这个冬天,雪花很美
  4. 百度云推送的简单集成
  5. 2016年下半年勒索软件数量翻倍
  6. 礼物gift(DP)
  7. vim可以用来编译python吗_Linux下编译Vim以支持python2.x
  8. 新鲜出炉!腾讯大数据分析的真实面经,这几个问题把我问懵了
  9. 大数据时代,CRM帮助企业进行升级转型
  10. SurfaceView 之满屏的代码雨效果
  11. log4j的配置文件的位置
  12. Arduino ISP下载接口
  13. 金融信息化及交易管理系统(股票交易系统APP)
  14. 苹果9L0-403测试对于被选入苹果认证支持专家(ACSP)10.6名称
  15. openstack学习笔记六 多节点部署之keystone
  16. java 中session能存什么不能存什么
  17. webpack打包图片资源问题
  18. 2021年中国电力行业境外电力项目签约额分析:实现签约项目536个 签约合同总金额440.6亿美元[图]
  19. 【《RISC-V “V“ Vector Extension Version 1.0》阅读笔记】
  20. 热电阻 热电偶 测量电路_热控宝典之热电偶、热电阻原理及常见故障处理

热门文章

  1. html js控制页面蒙版,javascript实现蒙版与禁止页面滚动
  2. map容器对象插入数据的4种方式讲解
  3. python英雄联盟登录程序,注册用户程序
  4. 量化交易学习4--Python自动画K线
  5. 毕业论文ppt的研究方法及过程计算机专业,计算机毕业论文答辩PPT(完整版)教程文件.ppt...
  6. Editplus 激活码
  7. 图像分割与视频分割方法
  8. 【热门主题:魔法少女奈叶动漫主题】
  9. Andorid之拍照及相册选取照片回显
  10. hive 十六进制转十进制_[转] Hive 内置函数