当前位置: 首页 > news >正文

Java使用easypoi填充数据到word

需要引入的Maven依赖

<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.4.0</version>
</dependency>
<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>4.4.0</version>
</dependency>
<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>4.4.0</version>
</dependency>
<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>

工具类(可直接使用或适当修改)


import cn.afterturn.easypoi.word.WordExportUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Map;public class FileUtil {public static void exportWordByModel(HttpServletResponse response, Map<String, Object> map, String modelFileName, String outFileName) {try {// 1.获取模板文件路径 - 重点//XWPFDocument word = WordExportUtil.exportWord07(modelFileName, map);有时候这种方式可以找到有时候找不到(不太清楚)String templatePath = filePath(modelFileName).getAbsolutePath();// 打印出模板文件的完整路径 - 校验路径是否存在File templateFile = new File(templatePath);if (templateFile.exists()) {System.out.println("模板文件存在: " + templateFile.getAbsolutePath());} else {System.out.println("模板文件不存在: " + templateFile.getAbsolutePath());}// 2.映射模板,替换数据XWPFDocument word = WordExportUtil.exportWord07(templatePath, map);// 3.设置返回参数的字符集response.reset();response.setHeader("Access-Control-Allow-Origin", "*");response.setContentType("application/msexcel");response.setContentType("text/html; charset=UTF-8");// 4.设置响应类型为Word文档response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");// 5.中文文件名处理,否则报错String encodedFileName = URLEncoder.encode(outFileName, "UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + encodedFileName + ".docx");// 6.将Word文档发送到浏览器word.write(response.getOutputStream());} catch (Exception e) {e.printStackTrace();}}/*** 根据文件名获取文件对象* @param modelFileName* @return*/public static File filePath(String modelFileName) {// 获取类加载器ClassLoader classLoader = FileUtil.class.getClassLoader();// 尝试从类路径中加载资源URL resource = classLoader.getResource(modelFileName);return new File(resource.getFile());}
}

导出和填充接口实现

import cn.afterturn.easypoi.entity.ImageEntity;
import com.etoak.system.model.ExamInfo;
import com.etoak.system.model.StuInfoBase;
import com.etoak.system.model.TeaOfStuInfo;
import com.etoak.system.service.StuService;
import com.etoak.system.utils.FileUtil;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.List;@RestController
@RequestMapping("/stu")
public class StuController {@AutowiredStuService stuService;@GetMapping("/exportWord")public void exportWord(@RequestParam String stuNo, HttpServletResponse response){HashMap<String,Object> map = new HashMap<>();String picPath1 = "https://tse2-mm.cn.bing.net/th/id/OIP-C.o3n2zlSej1hWPJkQPJ9l1AHaE8?w=274&h=183&c=7&r=0&o=7&dpr=1.1&pid=1.7&rm=3";ImageEntity imageEntity1 = new ImageEntity();imageEntity1.setUrl(picPath1);imageEntity1.setWidth(50);imageEntity1.setHeight(60);imageEntity1.setType(ImageEntity.URL);map.put("pictureVar1", imageEntity1);String picPath2 = "D:\\upload\\et2503\\9be44def628648b398205190a09979a9.png";ImageEntity imageEntity2 = new ImageEntity();imageEntity2.setUrl(picPath2);imageEntity2.setWidth(50);imageEntity2.setHeight(60);imageEntity2.setType(ImageEntity.URL);map.put("pictureVar2", imageEntity2);StuInfoBase stuInfoBase = stuService.getStuInfoByStuNo(stuNo);map.put("name",stuInfoBase.getName());map.put("stuNo",stuInfoBase.getStuNo());map.put("gender",stuInfoBase.getGender()==0?"男":"女");map.put("height",stuInfoBase.getHeight());map.put("weight",stuInfoBase.getWeight());map.put("bloodType",stuInfoBase.getBloodType());List<ExamInfo> examInfos = stuService.getExamInfoListByStuNo(stuNo);map.put("examInfos",examInfos);FileUtil.exportWordByModel(response,map,"templates/word.docx","学生信息统计");}}

word导出前后对比

---
![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=!%5B%E5%9C%A8%E8%BF%99%E9%87%8C%E6%8F%92%E5%85%A5%E5%9B%BE%E7%89%87%E6%8F%8F%E8%BF%B0%5D(https%3A%2F%2Fi-blog.csdnimg.cn%2Fdirect%2Fc935d2c1b2894bec813f342f8a55596b.png&pos_id=img-H4JO39WN-1759395564111))


在这里插入图片描述

http://www.dtcms.com/a/434505.html

相关文章:

  • 位运算题3:将整数奇偶位互换
  • 计算机毕业设计 基于EChants的海洋气象数据可视化平台设计与实现 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
  • 卡盟网站顶图怎么做西安知名的集团门户网站建设公司
  • Python基础入门例程84-NP84 列表中第一次出现的位置
  • 基于腾讯CODING Maven的Android库发布
  • 郑州官方发布班级优化大师
  • 10.2 刷题知识点总结(1) ---- 正则表达式
  • SPI总线介绍
  • 【LeetCode_206】反转链表
  • 品牌网站建设 磐石网络的确好沈阳唐朝网络的服务内容
  • LeetCode 215. 数组中的第K个最大元素
  • 老年实训室建设:筑牢老年护理专业学员的实操能力基础
  • 【深度学习新浪潮】基于Qwen3-8B入门LoRA完整指南
  • 数据库设计与UML图
  • 影视网站的设计与实现新泰程序开发
  • 阿里pdf解析方案Logics-Parsing如何用RL攻克复杂文档解析
  • MySQL 索引失效的常见场景与原因分析
  • 四川省建设厅网站川北医学院网页制作员工作厂家
  • 从直线到环形:解锁栈、队列背后的空间与效率平衡术
  • 操作系统全解析:Windows、macOS与Linux的深度对比与选择指南(AI)
  • 网站建设推广ppt模板网站模版防被偷
  • [创业之路-647]:互联网行业的产业链
  • 甘肃省省经合局网站建设的通知知乎app开发公司
  • 计算机视觉与深度学习 | MASt3R 前馈视觉模型:原理、公式与代码实现全解析
  • 作品展示网站源码贵阳企业网站设计制作
  • 【Linux 系统】命令行参数和环境变量
  • 如何用wordpress建一个网站太原建站模板搭建
  • DNS优选 2.6.3 |解锁专业版,优选最快DNS,享受快速且私密的互联网浏览体验
  • 云浮源峰网站建设工作室地址百度免费咨询
  • wordpress 公司网站有赞分销模式佣金