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

ops/2025/3/1 10:39:03/

 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/ops/162216.html

相关文章

家政一城一店融合小程序怎么开通,需要哪些资质?

手把手教你开通洗衣洗鞋团购上门融合小程序&#xff01; ⚠️ 抖音新规重大调整&#xff01;2025年起家政洗护必须"一城一店" &#xff08;全国仅限365家连锁资质&#xff0c;地级市单店垄断&#xff01;&#xff09; &#x1f4a1; 开通秘籍三步走&#xff1a; ✅…

【 实战案例篇三】【某金融信息系统项目管理案例分析】

大家好,今天咱们来聊聊金融行业的信息系统项目管理。这个话题听起来可能有点专业,但别担心,我会尽量用大白话给大家讲清楚。金融行业的信息系统项目管理,说白了就是如何高效地管理那些复杂的IT项目,确保它们按时、按预算、按质量完成。咱们今天不仅会聊到一些理论,还会通…

小白向-用python实现选择排序

一、选择排序的定义 选择排序&#xff08;Selection Sort&#xff09;是一种不稳定的原地比较排序&#xff0c;它的核心思想是每轮遍历选择最小&#xff08;或最大&#xff09;元素放入合适位置&#xff0c;最终完成排序。该算法适用于小规模数据排序&#xff0c;尤其是在对数…

iOS自归因详细介绍

iOS自归因详细介绍 自归因&#xff08;Self-Attribution&#xff09;是指应用或广告平台通过分析用户行为数据&#xff0c;确定用户安装应用的来源渠道。在iOS生态中&#xff0c;由于隐私政策的限制&#xff08;如App Tracking Transparency&#xff0c;ATT&#xff09;&#…

计算机网络-双绞线制作

实验步骤 知识准备&#xff1a; 568A的排线顺序从左到右依次为&#xff1a;绿白、绿、橙白、蓝、蓝白、橙、棕白、棕。568B的排线顺序从左到右依次为&#xff1a;橙白、橙、绿白、蓝、蓝白、绿、棕白、棕。交叉线是指&#xff1a;一端是568A标准&#xff0c;另一端是568B标准…

04、Hadoop3.x从入门到放弃,第四章:Hdfs基本概念与操作

Hadoop3.x从入门到放弃&#xff0c;第四章&#xff1a;Hdfs基本概念与操作 一、Hdfs概述 1、Hdfs产生背景与定义 随着数据量越来越大&#xff0c; 在一个操作系统存不下所有的数据&#xff0c; 那么就分配到更多的操作系统管理的磁盘中&#xff0c; 但是不方便管理和维护&am…

Vue中引入bootstrap框架

方式一&#xff1a;CDN引入: 所谓cdn引入&#xff0c;本人理解是在当前界面中引用远程服务器中的bootstrap文件夹中的css/js文件&#xff0c;那么在第一次加载的时候会非常慢&#xff0c;因为它依赖于网络速度去下载文件&#xff0c;然而第二次运行界面的时候加载非常的快&…

基于ArcGIS Pro、Python、USLE、INVEST模型等多技术融合的生态系统服务构建生态安全格局高阶应用

文字目录 前言第一章、生态安全评价理论及方法介绍一、生态安全评价简介二、生态服务能力简介三、生态安全格局构建研究方法简介 第二章、平台基础一、ArcGIS Pro介绍二、Python环境配置 第三章、数据获取与清洗一、数据获取&#xff1a;二、数据预处理&#xff08;ArcGIS Pro及…