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

真实工作项目Java使用apache.poi生成word

加油,新时代打工人!

将实体类利用poi转成Word文件
demo示例

package com.fqpais.util;import com.fqpais.business.domain.TestReportTemplate;
import com.fqpais.common.utils.StringUtils;
import org.apache.poi.xwpf.usermodel.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;/**
*@author wh
*@date 2024年05月24日8:59* 获取数据填充到word模板
*/
public class ReaderWord {private static final Logger log = LoggerFactory.getLogger(ReaderWord.class);public static void generateWordFromTemplate(String templatePath, String outputPath, List<TestReportTemplate> testReportTemplate) throws IOException {FileInputStream fis = new FileInputStream(templatePath);XWPFDocument doc = new XWPFDocument(fis);int userIndex = 0; // 用来追踪当前处理的用户索引for (XWPFParagraph p : doc.getParagraphs()) {for (XWPFRun r : p.getRuns()) {String text = r.getText(0);if (text != null) {text = replaceUserData(text, testReportTemplate.get(userIndex));r.setText(text, 0);}}}// 处理表格for (XWPFTable table : doc.getTables()) {for (XWPFTableRow row : table.getRows()) {for (XWPFTableCell cell : row.getTableCells()) {for (XWPFParagraph para : cell.getParagraphs()) {for (XWPFRun run : para.getRuns()) {String text = run.getText(0);if (text != null) {text = replaceUserData(text, testReportTemplate.get(userIndex));run.setText(text, 0);}}}}}// 同样,处理完一个表格后可能需要切换到下一个用户的数据userIndex++;
//            if (userIndex >= testReportTemplate.size()) break; // 防止数组越界}FileOutputStream out = new FileOutputStream(outputPath);doc.write(out);out.close();doc.close();fis.close();log.info("Word生成完成");}// 简化的替换逻辑,实际应用可能需要更复杂的正则表达式匹配private static String replaceUserData(String text, TestReportTemplate testReportTemplate) {NumberFormat numberFormat = NumberFormat.getNumberInstance();String square = numberFormat.format(testReportTemplate.getFieldsSquare());Date getDate = testReportTemplate.getGetDate();Date realTestTime = testReportTemplate.getRealTestTime();SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");String strDate1 = sdf1.format(realTestTime);String strDate2 = sdf1.format(getDate);if(StringUtils.isNull(testReportTemplate.getFarmerName())){testReportTemplate.setFarmerName("/");}if(StringUtils.isNull(testReportTemplate.getCode())){testReportTemplate.setCode("/");}if(StringUtils.isNull(testReportTemplate.getFieldsSquare())){testReportTemplate.setFieldsSquare(0L);}if(StringUtils.isNull(testReportTemplate.getTestEnvironment())){testReportTemplate.setTestEnvironment("/");}if(StringUtils.isNull(testReportTemplate.getFarmerContact())){testReportTemplate.setFarmerContact("/");}if(StringUtils.isNull(testReportTemplate.getTadminRegion().getName())){testReportTemplate.getTadminRegion().setName("/");}if(StringUtils.isNull(testReportTemplate.getTestItems())){testReportTemplate.setTestItems("/");}if(StringUtils.isNull(testReportTemplate.getTestBasis())){testReportTemplate.setTestBasis("/");}if(StringUtils.isNull(testReportTemplate.getTestUseDevice())){testReportTemplate.setTestUseDevice("/");}if(StringUtils.isNull(testReportTemplate.getConclusion())){testReportTemplate.setConclusion("不作结论。");}return text.replace("{{farmerName}}", testReportTemplate.getFarmerName()).replace("{{code}}", testReportTemplate.getCode()).replace("{{fieldsSquare}}",square).replace("{{getDate}}",strDate2).replace("{{realTestTime}}",strDate1).replace("{{farmerContact}}",testReportTemplate.getFarmerContact()).replace("{{name}}",testReportTemplate.getTadminRegion().getName()).replace("{{testEnvironment}}",testReportTemplate.getTestEnvironment()).replace("{{testItems}}",testReportTemplate.getTestItems()).replace("{{testBasis}}",testReportTemplate.getTestBasis()).replace("{{testUseDevice}}",testReportTemplate.getTestUseDevice()).replace("{{conclusion}}",testReportTemplate.getConclusion());}}
http://www.lryc.cn/news/396562.html

相关文章:

  • [Python自动化办公]--从网页登录网易邮箱进行邮件搜索并下载邮件附件
  • mysql8多值索引
  • MT3055 交换排列
  • Zkeys三方登录模块支持QQ、支付宝登录
  • 数字探秘:用神经网络解密MNIST数据集中的数字!
  • 11个IT运维领域必考证书,每一个都含金量极高
  • VScode 常用插件
  • 299k stars利用Public APIs提升开发效率:探索APILayer提供的开源资源
  • 在目标检测数据集上微调Florence-2
  • AI提示词:AI辅导「数学作业」
  • odoo文档的安装
  • 02STM32软件安装新建工程
  • 社区6月月报 | Apache DolphinScheduler重要修复和优化记录
  • Docker 使用基础(2)—镜像
  • Docker学习笔记(三)Dockerfile
  • 学懂C#编程:C# 索引器(Indexer)的概念及用法
  • 汇川CodeSysPLC教程03-2-14 与HMI通信
  • centos部署jar包
  • CSS相对定位和绝对定位的区别
  • SpringCloud之nacos共享配置文件实现多数据源灵活切换
  • 原生小程序生成二维码方法之一
  • Kubernetes k8s Pod容器 探针 健康探测
  • Conformal low power-2.电源感知等效性检查
  • 【密码学】从有限状态自动机到密钥流生成器
  • 3.相机标定原理及代码实现(opencv)
  • Centos7 安装Docker步骤及报错信息(不敢说最全,但是很全)
  • 【C语言】符号优先级详解
  • 天翼云高级运维工程师202407回忆题库 最新出炉
  • 在Python中什么是上下文管理器以及如何使用with语句来管理资源
  • (四)、python程序--贪吃蛇游戏