当前位置:   article > 正文

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

javahutool导出word

目录

实现方式一、通过原生的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依赖

  1. <dependencies>
  2. <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
  3. <dependency>
  4. <groupId>cn.hutool</groupId>
  5. <artifactId>hutool-all</artifactId>
  6. <version>4.6.1</version>
  7. </dependency>
  8. <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
  9. <dependency>
  10. <groupId>org.apache.poi</groupId>
  11. <artifactId>poi</artifactId>
  12. <version>4.1.2</version>
  13. </dependency>
  14. <!--说明 hutool-4.x的poi-ooxml 版本需高于 3.17(别问我3.8版本为啥不行,
  15. 因为3.17 > 3.8 ) hutool-5.x的poi-ooxml 版本需高于 4.1.2 xercesImpl版本高于2.12.0-->
  16. <dependency>
  17. <groupId>org.apache.poi</groupId>
  18. <artifactId>poi-ooxml</artifactId>
  19. <version>4.1.2</version>
  20. </dependency>
  21. </dependencies>

步骤2、编写几行代码

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

使用例子

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

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

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

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

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

  1. public RestResponse word(Integer examId) {
  2. Word07Writer word07Writer = new Word07Writer();
  3. // 1、得到当前试卷信息
  4. Exam exam = this.getById(examId);
  5. // 1.1 保存试卷名称
  6. word07Writer.addText(new Font("方正小标宋简体", Font.PLAIN, 22), "试卷名称:" + exam.getTitle());
  7. // 2、得到当前试卷的题目列表
  8. List<Integer> quIds = quExamService.listByExamId(examId);
  9. // 题目列表用
  10. int count = 1;
  11. for (Integer quId : quIds) {
  12. // 3、得到当前题目信息
  13. Question question = questionMapper.selectById(quId);
  14. // 4、保存到文件中:题目 格式为( 题目2. 多选题测试(20分))
  15. word07Writer.addText(new Font("宋体", Font.PLAIN, 15),
  16. "题目" + (count++) + ". " + question.getContent() + "(" + (question.getQuScore()) + "分)");
  17. // 5、得到每个题目的选项列表
  18. List<QuAnswerDTO> quAnswerDTOList = quAnswerService.listByQu(quId);
  19. // 6、答案和解析
  20. StringBuilder answers = new StringBuilder();
  21. // 题目类型 1 单选题 2 多选题 3 判断题 4 简答题 5 填空题
  22. Integer quType = question.getQuType();
  23. for (QuAnswerDTO quAnswerDTO : quAnswerDTOList) {
  24. // 添加题目选项
  25. word07Writer.addText(new Font("宋体", Font.PLAIN, 10),
  26. quAnswerDTO.getAbc() + "、" + quAnswerDTO.getContent());
  27. // 得到题目选项的答案 1 正确答案,0 错误答案
  28. Integer isRight = quAnswerDTO.getIsRight();
  29. String dtoAbc = quAnswerDTO.getAbc();
  30. // 得到正确答案
  31. this.getAnswers(quType, isRight, answers, dtoAbc);
  32. }
  33. // 7、得到答案并保存到文件中
  34. word07Writer.addText(new Font("宋体", Font.PLAIN, 10), "答案:" + answers);
  35. // 8、得到题目整体解析
  36. String analysis = question.getAnalysis();
  37. word07Writer.addText(new Font("宋体", Font.PLAIN, 10),
  38. "解析:" + (Objects.isNull(analysis) ? "暂无解析" : analysis));
  39. }
  40. // 9、写出到文件(试卷名称.docx)
  41. word07Writer.flush(FileUtil.file("G:/" + Math.round(Math.random() * 100) + exam.getTitle() + ".docx"));
  42. // 10、关闭
  43. word07Writer.close();
  44. return RestResponse.ok();
  45. }
  46. /**
  47. * 得到答案
  48. *
  49. * @param quType 题目类型 1 单选题 2 多选题 3 判断题 4 简答题 5 填空题
  50. * @param isRight 是否为正确答案 1 正确答案,0 错误答案
  51. * @param answers 得到的答案
  52. * @param dtoAbc 选项ABC
  53. */
  54. private void getAnswers(Integer quType, Integer isRight, StringBuilder answers, String dtoAbc) {
  55. if (quType == Constants.QU_TYPE_SINGLE && isRight == Constants.NUMBER_ONE) {
  56. answers.append(dtoAbc);
  57. }
  58. if (quType == Constants.QU_TYPE_MULTI && isRight == Constants.NUMBER_ONE) {
  59. answers.append(dtoAbc);
  60. }
  61. if (quType == Constants.QU_TYPE_JUDGE && isRight == Constants.NUMBER_ONE) {
  62. answers.append(dtoAbc);
  63. }
  64. if (quType == Constants.QU_TYPE_SHORT && isRight == Constants.NUMBER_ONE) {
  65. answers.append(dtoAbc);
  66. }
  67. if (quType == Constants.QU_TYPE_FILL && isRight == Constants.NUMBER_ONE) {
  68. answers.append(dtoAbc);
  69. }
  70. }

实现的效果

 

 

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

 

完结!

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/43568
推荐阅读
相关标签
  

闽ICP备14008679号