根据Word模板,使用POI生成文档
突然想起来有个小作业:需要根据提供的Word模板填充数据。这里使用POI写了一个小demo验证下。
测试用模板:

执行结果

1.引入依赖坐标
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency>
2.获取相关数据的方法
private static Object getValueFromData(String key) {// 根据需要实现此方法以从数据源获取值// 例如,从数据库、配置文件或用户输入中获取值Map<String, Object> textMap = new HashMap<String, Object>();textMap.put("title","《模板》");textMap.put("myName","--尉某人--");textMap.put("today","2023-11-02");List<Map> tables = new ArrayList<Map>();Map<String, String> tableMap = new HashMap<String, String>();tableMap.put("name","尉某人");tableMap.put("age","26");tableMap.put("phone","189*******");tables.add(tableMap);tableMap = new HashMap<String, String>();tableMap.put("name","王某人");tableMap.put("age","28");tableMap.put("phone","186*******");tables.add(tableMap);tableMap = new HashMap<String, String>();tableMap.put("name","张某人");tableMap.put("age","24");tableMap.put("phone","130*******");tables.add(tableMap);textMap.put("tables",tables);return textMap.get(key);}
3.解析模板并填充数据
public static void readTemplate() throws Exception {// 读取Word模板文件FileInputStream fis = new FileInputStream("C:\\Users\\Desktop\\template.docx");XWPFDocument document = new XWPFDocument(fis);// 获取所有段落List<XWPFParagraph> paragraphs = document.getParagraphs();for (XWPFParagraph paragraph : paragraphs) {List<XWPFRun> runs = paragraph.getRuns();for (XWPFRun run : runs) {String text = run.getText(0);if (text != null && text.startsWith("${")) {String key = text.substring(2, text.length() - 1);String value = getValueFromData(key).toString(); run.setText(value, 0);}}}// 获取表格List<XWPFTable> rowTables = document.getTables();for (XWPFTable table : rowTables) {// 遍历表格的每一行for (XWPFTableRow row : table.getRows()) {row.getCell(0).setText("尉某人");row.getCell(1).setText("26");row.getCell(2).setText("おひさしぶりだな");}}// 创建表格并填充数据List<Map> tables = (List<Map>) getValueFromData("tables");int size = tables.size();XWPFTable table = document.createTable(size+1, 3);table.getRow(0).getCell(0).setText("姓名");table.getRow(0).getCell(1).setText("年龄");table.getRow(0).getCell(2).setText("联系方式");for (int i = 0; i < tables.size(); i++) {Map<String,String> map = tables.get(i);XWPFTableRow row = table.getRow(i + 1);row.getCell(0).setText(map.get("name"));row.getCell(1).setText(map.get("age"));row.getCell(2).setText(map.get("phone"));}// 保存文件FileOutputStream fos = new FileOutputStream("C:\\Users\\Desktop\\output.docx");document.write(fos);fos.close();document.close();fis.close();}
4.测试结果
public static void main(String[] args){try {readTemplate();System.out.println("执行成功!!!");} catch (Exception e) {e.printStackTrace();}}
相关文章:
根据Word模板,使用POI生成文档
突然想起来有个小作业:需要根据提供的Word模板填充数据。这里使用POI写了一个小demo验证下。 测试用模板: 执行结果 1.引入依赖坐标 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId&…...
大语言模型的学习路线和开源模型的学习材料《一》
文章目录 第一层 LLMs to Natural Language Processing (NLP)第一重 ChatGLM-6B 系列ChatGLM3ChatGLM2-6BChatGLM-6B第十重 BaichuanBaichuan2Baichuan-13Bbaichuan-7B第十一重 Llama2第二重 Stanford Alpaca 7B第三重 Chinese-LLaMA-Alpaca第四重 小羊驼 Vicuna第五重 MOSS第六…...
【案例】3D地球
效果图: 直接放源码 <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><meta name"viewport" content"initial-scale1.0, user-scalableno" …...
安全组问题 访问华为云服务器端口
一些常用的安全组的配置示例,包括远程登录云服务器,对外提供网站访问、不同安全组内实例内网互通等。 通常情况下,安全组默认拒绝所有来自外部的请求。您需要遵循白名单原则添加安全组入方向规则,允许来自外部的特定请求访问安全组…...
音视频常见问题(七):首开慢
本文主要讨论音视频应用中的首开慢问题,文章介绍了首开慢的产生原因:DNS解析耗时、网络传输协议耗时、传输网络调度耗时,并提供了排查方式和解决方案。即构科技的Express SDK和MSDN网络可以有效的解决首开慢问题,且节省开发成本。…...
[SSD综述1.2] SSD 和 HDD(机械硬盘) 区别?
依公知及经验整理,原创保护,禁止转载。 专栏 《SSD入门到精通系列》 <<<< 返回总目录 <<<< 文章目录 前言1. 速度差异多大1.1 常见产品速度1.2 最新产品速度2 机械硬盘和固态硬盘的差异点3 引起速度差异的原因是什么(硬件)?3.1 存储介质不同3.…...
ali sdm docker
当然要先安装docker和docker-compose cd /usr/local mkdir sdm cd sdm touch docker-compose.yml,编辑内容如下: version: "3" services:sdm:image: registry.cn-shanghai.aliyuncs.com/nls-cloud/sdm:latestcontainer_name: nls-cloud-s…...
HCIE-kubernetes(k8s)-Authentication身份验证
1、远程登录 1、kubeconfig方式 在master上都是以kubeconfig方式登录的,并不是说有一个文件叫kubeconfig。 默认使用的配置文件是~/.kube/config 这个配置文件,而这个配置文件是通过这个文件/etc/kubernetes/admin.conf 如果在node上执行命令ÿ…...
uniapp开发小程序接入阿里云TTS语音合成(RESTful API)
流程 首先小程序后台配置白名单 1.1 路径:开发-开发管理-开发设置-服务器域名-request合法域名 1.2 request合法域名参数: https://nls-meta.cn-shanghai.aliyuncs.com https://nls-gateway-cn-shanghai.aliyuncs.com引入alitts.js页面使用…...
稳定性测试—fastboot和monkey区别
一、什么是稳定性测试 稳定性测试是指检验程序在一定时间内能否稳定地运行,在不同的场景下能否正常地工作的过程。主要目的是检测崩溃、内存泄漏、堆栈错误等缺陷。 二、Monkey 1.什么是Monkey 是一个命令行工具,通常在adb安卓调试运行,模…...
Python库Requests的爬虫程序爬取视频通用模版
目录 一、引言 二、Requests库介绍 三、通用视频爬虫模板设计 1、确定目标网站和视频页面结构 2、发送HTTP请求获取页面内容 3、解析HTML内容提取视频链接 4、下载视频文件 四、模板应用与实践 五、注意事项 总结与展望 一、引言 随着互联网的发展,视频内…...
ngx_http_set_response_header阅读
1.关于设置头的一些函数指针初始化 typedef struct {ngx_str_t name;ngx_uint_t offset;// 本文中搜索 h[i].handler(r, &h[i], &value,就是回调函数执行的地方ngx_http_set_header_pt handler; } ngx_http_set_hea…...
词典查询工具django-mdict
什么是 django-mdict ? django-mdict 不是词典软件,是词典查询的脚本工具,主要目的是解决词典数量多,手机容量不足的问题,是对其他词典软件局域网在线查询功能的补充,是用 django 实现的 mdict 词典查询工具…...
Ubuntu20.04搭建RISC-V和qemu环境
1. 前言 risc-v是一个非常有潜力的指令集框架,最近对其产生了浓厚的兴趣,由于之前对于这方面的知识储备很少,在加上网上的教程都是点到为止,所以安装过程异常曲折。好在最后一步一步积累摸索,终于利用源码安装完成。看…...
代码生成器
Easycode Entity ##导入宏定义 $!{define.vm}##保存文件(宏定义) #save("/entity", ".java")##包路径(宏定义) #setPackageSuffix("entity")##自动导入包(全局变量) $!{au…...
AndroidMonitor - 基于AndroidLocalService实现的抓取OKHTTP请求的工具
官网 GitHub - lygttpod/AndroidMonitor: easy show android okhttp request data 项目简介 Demo下载体验 文章介绍---->Android抓包从未如此简单 切记:monitor需要配合monitor-plugin使用 1、monitor接入 添加依赖 debugImplementation io.github.lygttp…...
LuatOS-SOC接口文档(air780E)--nbiot - NB-IOT操作库
nbiot.isReady()# 网络是否就绪 参数 无 返回值 返回值类型 解释 boolean 已联网返回true,否则返回false 例子 -- 判断是否已经联网 if nbiot.isReady() then log.info("nbiot", "net is ready") endnbiot.imsi() 读取IMSI 参数 无 返回值 …...
大数据之LibrA数据库系统告警处理(ALM-12017 磁盘容量不足)
告警解释 系统每30秒周期性检测磁盘使用率,并把磁盘使用率和阈值相比较。磁盘使用率有一个默认阈值,当检测到磁盘使用率超过阈值时产生该告警。 平滑次数为1,主机磁盘某一分区使用率小于或等于阈值时,告警恢复;平滑次…...
Python算法例4 求平方根
1. 问题描述 实现int sqrt(int x)函数,计算并返回x的平方根。 2. 问题示例 sqrt(3)1;sqrt(4)2;sqrt(5)2;sqrt(17&#…...
LVGL_多界面切换
LVGL_多界面切换 1、创建多个界面(create_page1();) 2、加载一个界面显示(lv_scr_load(page1);) 3、切换不同界面显示(lv_scr_load_anim(page2, LV_SCR_LOAD_ANIM_OVER_LEFT, 300, 0, false);) static lv_…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
