ThinkPhp使用PHPWord模板类生成动态表格 您所在的位置:网站首页 如何在PHPOfficePHPWord模板上添加设置图像 ThinkPhp使用PHPWord模板类生成动态表格

ThinkPhp使用PHPWord模板类生成动态表格

2024-07-11 03:29| 来源: 网络整理| 查看: 265

    本文简单介绍如何在ThinkPHP3.2中使用PHPWord根据表格内容,动态生成多行表格。

    有关在ThinkPHP3.2中使用PHPWord,可以参考“thinkphp3.2集成phpword,生成word文档并下载”这篇文章。实际开发中会遇到表格有多少行,数据是动态的,有几行数据就显示几行。使用模板创建word动态表格,步骤如下:

    一、新建word模板

    首先我们创建表格模板,只需要创建一行就行,然后我们在代码中根据实际情况进行复制,有多少行就复制多少行。模板的格式如下图,在模板中需要替换的内容,使用${替换内容}代替内容。本文示例模板名称为“template.docx”。

    1-201104110212b3.png

    二、装载word模板    

    可以初始化“PhpOffice\PhpWord\TemplateProcessor”类或使用“PhpOffice\PhpWord\PhpWord”的loadTemplate方法,装载word模板。代码如下:

$document = new TemplateProcessor('wordfile/template.docx'); //载入模板文件 // $document = $PHPWord->loadTemplate('wordfile/temp.doc');

    三、复制模板行

    根据实际的记录数,复制模板行。复制时,只需提供模板行中随便一个变量,并指定复制的数量即可。代码如下(本文使用的mysql数据表为member表):

// 人员信息 $members = M('member')->select(); $memCount = count($members); // 复制表格模板行 $document->cloneRow('name', $memCount);

    四、生成多行表格数据

    循环记录数据,依次替换模板中的内容。第一行就是 原变量名#1,第二行就是  原变量名#2 ,以此类推,代码如下:

// 填充表格内容 foreach ($members as $k => $v) {     $document->setValue('name#' . ($k + 1), $v['name']);     $document->setValue('sex#' . ($k + 1), $v['sex']);     $document->setValue('age#' . ($k + 1), $v['age']);     $document->setValue('addr#' . ($k + 1), $v['addr']); }

    五、生成word文档

    通过以上步骤,设置完参数后,调用模板文档类的saveAs方法,生成word文件。代码如下:

$path = 'wordfile/report.docx'; $document->saveAs($path);

    六、效果图

    1-201104110T31Y.png   

    注意:

        word模板和导出需使用docx,用doc会报错:Could not close zip file。    

    完整代码如下:   

function createDoc() {     // word使用docx,用doc会报错:Could not close zip file     $document = new TemplateProcessor('wordfile/template.docx');     //载入模板文件     // $document = $PHPWord->loadTemplate('wordfile/temp.doc');     // 标题     $document->setValue('reportTitle', '人员信息表');     // 人员信息     $members = M('member')->select();     $memCount = count($members);     // 复制表格模板行     $document->cloneRow('name', $memCount);     // 填充表格内容     foreach ($members as $k => $v) {         $document->setValue('name#' . ($k + 1), $v['name']);         $document->setValue('sex#' . ($k + 1), $v['sex']);         $document->setValue('age#' . ($k + 1), $v['age']);         $document->setValue('addr#' . ($k + 1), $v['addr']);     }     $path = 'wordfile/report.docx';     $document->saveAs($path);     die(); }

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有