ThinkPhp使⽤PHPWord模板类⽣成动态表格
有关在ThinkPHP3.2中使⽤PHPWord,可以参考“thinkphp3.2集成phpword,⽣成word⽂档并下载”这篇⽂章。实际开发中会遇到表格有多少⾏,数据是动态的,有⼏⾏数据就显⽰⼏⾏。使⽤模板创建word动态表格,步骤如下:
⼀、新建word模板
⾸先我们创建表格模板,只需要创建⼀⾏就⾏,然后我们在代码中根据实际情况进⾏复制,有多少⾏就复制多少⾏。模板的格式如下图,在模板中需要替换的内容,使⽤${替换内容}代替内容。本⽂⽰例模板名称为“template.docx”。
⼆、装载word模板
可以初始化“PhpOffice\PhpWord\TemplateProcessor”类或使⽤“PhpOffice\PhpWord\PhpWord”的loadTemplate⽅法,装载word模板。代码如下:
$document = new TemplateProcessor('wordfile/template.docx');
//载⼊模板⽂件表格网站php源码
// $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);
六、效果图
注意:
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();
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。