当前位置: 首页 > news >正文

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

 1.安装phpword包composer require phpoffice/phpword

2.模板文件结构

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

实现代码

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

http://www.dtcms.com/a/48647.html

相关文章:

  • SparkSQL全之RDD、DF、DS ,UDF、架构、资源划分、sql执行计划、调优......
  • 开放鸿蒙OpenHarmony 5.0.0 Release 兼容性测试实战经验分享
  • 【Vue.js 中的生命周期钩子有哪些?】
  • 探秘基带算法:从原理到5G时代的通信变革【四】Polar 编解码(一)
  • 批量提取 Word 文档中的图片
  • vite创建vue项目
  • 【GraphQL API 漏洞简介】
  • 蓝桥杯 2022 Java 研究生省赛 3 题 质因数个数
  • 深度学习transfomer架构的职业匹配系统
  • 完全背包变体-排列和组合的循环顺序问题
  • 【Linux学习笔记】Linux基本指令及其发展史分析
  • C++(三)类与对象 中
  • Spring MVC 处理请求
  • MRI学习笔记-Meta分析
  • Eureka Server 数据同步原理解析
  • NodeJS服务器 + Vue3框架 从搭建服务器 定义接口 到请求数据页面展示
  • 【杂谈】-Meta AI的可扩展内存层
  • 养老小程序方案详解居家养老小程序系统
  • 第十章 数据库恢复技术
  • 我的AI工具箱Tauri版-通用音频转文本
  • 智能图像处理平台:RabbitMQ配置
  • Unclutter for Mac v2.2.12 剪贴板/文件暂存/笔记三合一 支持M、Intel芯片
  • 安卓基础组件Looper - 03 java层面的剖析
  • Spring Cloud Gateway 网关的使用
  • Stiring-PDF:开源免费的PDF文件处理软件
  • 记一次误禁用USB导致键盘鼠标失灵的修复过程
  • 【鸿蒙Next】鸿蒙与flutter使用自定义iconfont的ttf字体库对比总结
  • 大模型分布式训练和优化
  • 游戏引擎学习第133天
  • nuxt常用组件库html-validator、@nuxtjs/i18n、@nuxt/image、@unocss/nuxt使用解析