ThinkPHP使用phpword读取模板word文件并添加表格

devtools/2025/3/3 4:10:33/

 1.安装phpword包composer require phpoffice/phpword

2.模板文件结构

如上图框住的是要替换的文本和要复制表格样式

实现代码

php"><?phpnamespace app\api\logic;use PhpOffice\PhpWord\Element\Table;
use PhpOffice\PhpWord\SimpleType\TblWidth;
use PhpOffice\PhpWord\TemplateProcessor;
class Word
{public static function test($arr,$title,$stu_name){//多行数据参考<w:br/>用于换行
//        $arr = [
//            ['id' => '1', 'value' => '单词内容<w:br/>单词内容<w:br/>单词内容单词内容单词内容单<w:br/>词内容单词内容单词内容单词内容单词内容单<w:br/>词内容单词内容单词内容单词内容单词内容单词内容单词内容单词内容单词内容单词内容单词内容单词内容单词内容单词内容单词内容'],
//            ['id' => '2', 'value' => '单词内容单词内容单词内<w:br/>容单词内容单词内容'],
//            ['id' => '3', 'value' => '单词内容单词<w:br/>内容单词内容单词内容单词内容'],
//            ['id' => '4', 'value' => '单词内容单词内容单<w:br/>词内容单词内容单词内容单词内容单词内容单<w:br/>词内容单词内容单词内容<w:br/>单词内容单词内容单词内容单词内容单词内容'],
//            ['id' => '5', 'value' => '单<w:br/>词<w:br/>内<w:br/>容'],
//        ];//新文件名$filename = date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8).".docx";$date = date('Y-m-d');$path = "export/word/$date/";if (!file_exists($path)) {mkdir($path, 0777, true);}//实例化, 参数传入模板文件地址$word_template = ROOT_PATH.'public/export/test.docx'; // 使用绝对路径// 检查模板文件是否存在if (!file_exists($word_template)) {throw new \Exception("模板文件不存在: " . $word_template);}$templateProcessor = new TemplateProcessor($word_template);//替换(设置)变量值$array_title = ['title' => $title,'date' => $date,'num' => count($arr),'name' => $stu_name,];$templateProcessor->setValues($array_title);//生成表格$table = new Table(['borderSize' => 12, 'width' => 6000, 'unit' => TblWidth::TWIP, 'alignMent' => 'center']);$rows = count($arr);//总行数$templateProcessor->cloneRow('id', $rows);//$arr条数复制行for ($i = 0; $i < $rows; $i++) {$templateProcessor->setValue("id#" . ($i + 1), $arr[$i]['id']);//替换变量$templateProcessor->setValue("value#" . ($i + 1), $arr[$i]['value']);//替换变量}$templateProcessor->setComplexBlock('table', $table);//保存文件$templateProcessor->saveAs($path . $filename);return "/" . $path . $filename;}}

上图是最终生成的word文件


http://www.ppmy.cn/devtools/163782.html

相关文章

10.前端部分|首页index.html|题库all_questions.html|指定题目one_question.html(html)

index.html 所谓的对样式进行调整&#xff0c;本质是对html中的标签的样式做调整 标签的样式做调整 选中标签设置样式 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible&…

matlab2023a下载和安装教程

软件硬件已经系统环境要求&#xff1a; matlab 20G大小左右&#xff0c;配置差的电脑就不要安装了&#xff01; 内存&#xff1a;8G以上&#xff0c;推荐8G以上 硬盘&#xff1a;预留50G空间&#xff0c;推荐100G以上 操作系统&#xff1a;推荐win10、11 安装过程&#xff…

Web自动化之Selenium添加网站Cookies实现免登录

在使用Selenium进行Web自动化时&#xff0c;添加网站Cookies是实现免登录的一种高效方法。通过模拟浏览器行为&#xff0c;我们可以将已登录状态的Cookies存储起来&#xff0c;并在下次自动化测试或爬虫任务中直接加载这些Cookies&#xff0c;从而跳过登录步骤。 Cookies简介 …

歌曲分类和流行度预测

1. 项目介绍 本项目从kaggle平台上下载了数据集&#xff0c;该数据集包含了3万多首来自Spotify API 的歌曲&#xff0c;共有23个特征。首先对数据集进行预处理&#xff0c;如重复行、缺失值、标准化处理等。再对预处理后的数据进行探索性分析&#xff0c;观察各变量的分布情况&…

【深入理解JWT】从认证授权到网关安全

最近的项目学习中&#xff0c;在进行登陆模块的用户信息验证这一部分又用到了JWT的一些概念和相关知识&#xff0c;特在此写了这篇文章、方便各位笔者理解JWT相关概念 目录 先来理解JWT是什么&#xff1f; 区分有状态认证和无状态认证 有状态认证 VS 无状态认证 JWT令牌的…

【探寻C++之旅】第六章:STL

请君浏览 前言1. STL简介2. auto和范围for2.1 auto关键字2.2 范围for 3. string类3.1 string类对象的常见构造3.2 string类对象的容量操作3.3 string类对象的访问及遍历操作3.4 string类对象的修改操作3.4 string类非成员函数3.6 vs下string的结构 4. vector4.1 vector的构造4.…

PyCharm怎么集成DeepSeek

PyCharm怎么集成DeepSeek 在PyCharm中集成DeepSeek等大语言模型(LLM)可以借助一些插件或通过代码调用API的方式实现,以下为你详细介绍两种方法: 方法一:使用JetBrains AI插件(若支持DeepSeek) JetBrains推出了AI插件来集成大语言模型,不过截至2024年7月,官方插件主要…

使用 Selenium 和 Requests 自动化获取动态 Referer 和 Sign 的完整指南

在现代网络爬虫和自动化任务中&#xff0c;动态生成的参数&#xff08;如 Referer 和 Sign&#xff09;常常是绕过反爬虫机制的关键。本文将详细介绍如何使用 Python 的 Selenium 和 Requests 库&#xff0c;从目标网页中提取动态 Referer 和 Sign&#xff0c;并完成后续的请求…