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

相关推荐
黑金IT2 小时前
WebSocket与PHP端高效交互处理语音数据方案
websocket·网络协议·php
我是唐青枫8 小时前
Linux ar 命令使用详解
linux·运维·服务器
余华余华9 小时前
计算机等级考试数据库三级(笔记3)
服务器·数据库·oracle
今夜有雨.9 小时前
HTTP---基础知识
服务器·网络·后端·网络协议·学习·tcp/ip·http
Long_poem11 小时前
【自学笔记】PHP语言基础知识点总览-持续更新
android·笔记·php
盛满暮色 风止何安11 小时前
VLAN的高级特性
运维·服务器·开发语言·网络·网络协议·网络安全·php
lemon31062412 小时前
dockerfile制作镜像
linux·运维·服务器·学习
AI享网无代码创作13 小时前
WP Mail 邮件发送:WordPress Mail SMTP设置
运维·服务器·网络
就改了13 小时前
Java进阶——Lombok的使用
java·服务器·前端
黑马源码库miui5208614 小时前
心理咨询法律咨询预约咨询微信小程序系统源码独立部署
微信小程序·小程序·uni-app·php·微信公众平台