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

1.安装phpword包composer require phpoffice/phpword

2.模板文件结构

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

实现代码

php 复制代码
<?php

namespace 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文件

相关推荐
Soneswy3 分钟前
Linux系统篇--用户切换与文件权限
linux·服务器
Ruiery6 分钟前
Linux 6.6内核内存管理深度解析(三·补):页表项(PTE)结构与地址翻译
linux·运维·服务器
云飞云共享云桌面10 分钟前
苏州半导体工厂研发部门多个SolidWorks 如何共享服务器来进行研发设计
运维·服务器·3d·自动化·制造
honsor14 分钟前
机房动环实战:H-THDRJ45 双网口温湿度变送器 Modbus RTU RS485 冗余组网方案
运维·服务器·网络
快乐的韭菜根根22 分钟前
Slurm 指定 GPU 卡:`File=/dev/nvidiaX` 映射的坑与修复
java·服务器·网络
叼烟扛炮23 分钟前
Linux 学习笔记(三十四):线程同步——条件变量与生产消费者模型
linux·运维·服务器·笔记·学习·1024程序员节
软件技术NINI29 分钟前
基于PHP和MySQL的快递代收点管理系统的设计与实现
开发语言·javascript·数据库·mysql·毕业设计·php·毕设
Logic1011 小时前
Excel信息+照片文件夹,自动合成word格式化文档
word·excel·办公自动化·邮件合并·office技巧·自动插入图片·插入域
国际云,接待1 小时前
云服务器 WebSocket 空闲后频繁断开:查 Nginx 超时、心跳与负载均衡,再评估扩容
服务器·websocket·nginx
Linux界最忧郁之人1 小时前
OpenStack Victoria双节点实战|Packstack一键部署(CentOS‑Stream‑8)+华为云ECS实操
linux·运维·服务器·centos·华为云·openstack