使用phpword替换模板内容 在模板追加内容
最近遇到一个需求,需要根据数据生成一份word文档,于是就研究了下phpword。
phpword生成word文档有两种方法
1 直接生成word文档 例如$phpWord = new PHPWord(); 然后可以在新的文档里用代码写所需要的内容 如 表格,图表,图片等。 相信弄过的同学都知道调样式的痛苦,所以这种方法不推荐。
2 使用word模板,在模板里设置变量 然后替换变量就行了。这种方法简单快捷 大力推荐。
下面正式开始
1 安装phpword 我用的laravel框架 所以就用composer安装phpword
composer require phpoffice/phpword 假如报版本冲突的话就忽略版本 composer require phpoffice/phpword --ignore-platform-reqs
2 提供一个模板 如下图所示
然后把里面需要替换的内容用变量代替
如下所示
把模板命名并放到你能找到的位置里。我放的路径是public/fiels/autoload.docx
3 开始撸代码,替换模板中的变量并生成新的word文档
先引入包
use PhpOffice\PhpWord\TemplateProcessor; use PhpOffice\PhpWord\Element\Chart;
引入模板替换变量 $tmp = new TemplateProcessor('files/autoload.docx'); $tmp->setValue('address', '上海市闵行区顾戴路666号'); $tmp->setValue('days', '120'); $tmp->saveAs("aa.docx");//另存为
打开aa.docx发现变量已经被替换了
表格的行数不是固定的 用这个方法不行,那怎么办呢? 很简单 克隆行
//复制行 $arr = [['id' => '1', 'id1' => '10', 'id2' => '11', 'id3' => '12', 'id4' => '13', 'capacity' => '10.2Ah'],['id' => '2', 'id1' => '20', 'id2' => '21', 'id3' => '22', 'id4' => '23', 'capacity' => '11.2Ah'],['id' => '3', 'id1' => '30', 'id2' => '31', 'id3' => '32', 'id4' => '33', 'capacity' => '12.2Ah'],['id' => '4', 'id1' => '40', 'id2' => '41', 'id3' => '42', 'id4' => '43', 'capacity' => '13.2Ah'],['id' => '5', 'id1' => '50', 'id2' => '51', 'id3' => '52', 'id4' => '53', 'capacity' => '14.2Ah'], ]; $rows = count($arr);//总行数 $tmp->cloneRow('id', $rows);//复制行 for ($i = 0; $i < $rows; $i++) {$tmp->setValue("id#" . ($i + 1), $arr[$i]['id']);//替换变量$tmp->setValue("id1#" . ($i + 1), $arr[$i]['id1']);$tmp->setValue("id2#" . ($i + 1), $arr[$i]['id2']);$tmp->setValue("id3#" . ($i + 1), $arr[$i]['id3']);$tmp->setValue("id4#" . ($i + 1), $arr[$i]['id4']);$tmp->setValue("capacity#" . ($i + 1), $arr[$i]['capacity']); }
结果如下
最后是图表 图表的数量也不是固定的 怎么搞?用克隆块
如模板所示
${char_black}
${char}
${/char_black}
和html标签很像 是成对出现 如果没有结束标签则克隆块无效 里面可以放任意的元素,文字,表格,图片等。
首先创建一个chart
$categories = array('3月1日', '3月2日', '3月3日', '3月4日', '3月5日', '3月6日', '3月7日', '3月8日', '3月9日', '3月10日', '3月11日'); $series1 = array(80, 90, 95, 87, 80, 90, 95, 87, 80, 90, 95); $chart = new Chart('column', $categories, $series1,[],'图表'); new Chart方法第一个参数是图表类别一共有十二种 分别是'pie', 'doughnut', 'line', 'bar', 'stacked_bar', 'percent_stacked_bar', 'column', 'stacked_column', 'percent_stacked_column', 'area', 'radar', 'scatter' 第二个参数是x轴数据 第三个参数是y轴数据,第四个参数是图表样式,第五个参数是y轴数据名称
然后复制块
$tmp->cloneBlock('char_black', 3,true,true); $tmp->setChart('char#1', $chart); $tmp->setChart('char#2', $chart);
看效果
虽然图表出来了但效果显然不能让人满意 那就调样式
$dataLabel=['showCatName'=>false]; $chart->getStyle()->setTitle('图表示例')->setShowAxisLabels()->setWidth(Converter::inchToEmu(6))->setHeight(Converter::inchToEmu(3))->setShowGridY()->setDataLabelOptions($dataLabel);
在看效果
OK 收工
下面说下图表样式setDataLabelOptions 默认的数据标签是这样,假如我们不行让x轴的数据显示则需要设置下数据标签默认的数据标签数据为
'showVal' => true, // value
'showCatName' => true, // category name
'showLegendKey' => false, //show the cart legend
'showSerName' => false, // series name
'showPercent' => false,
'showLeaderLines' => false,
'showBubbleSize' => false,
所以我们需要设置下数据标签 $dataLabel=['showCatName'=>false]; 然后 setDataLabelOptions($dataLabel);要记的这个属性要放在设置样式的最后一行不然会报错。
使用phpword替换模板内容 在模板追加内容相关推荐
- MFC开发IM-第十九篇、获取编辑框内容,并且追加内容
//获得当前文本 CEdit* pEdit = (CEdit*)GetDlgItem(IDC_E_CONTENT); CString chat_content = _T(& ...
- PHPWord替换word模板内容时,存在表格,且不确定表格行数的处理方式
PHPWord替换word模板内容时,存在表格,且不确定表格行数的处理方式 想得到的目标表格 表格可能存在若干行,需要循环生成,插入到word模板中 word模板 实现过程 1.Composer安装 ...
- php 操作word模板,phpword替换模板内容和解决中文乱码
本篇文章给大家分享的内容是phpword替换模板内容和解决中文乱码的问题,有需要的朋友可以看一下. 好吧 先下载吧: 下载地址:https://pan.baidu.com/s/1upup2rpLTVX ...
- phpword替换模板内容+解决中文乱码
好吧 先下载吧: 下载地址:https://pan.baidu.com/s/1upup2rpLTVXIdJpGi9kK6A 密码:qxsd 手册 http://phpword.readthedocs. ...
- 【PHPWord】基于Word模板替换生成输出表格动态生成内容、合并单元格、设置单元格背景颜色
文章目录 一.前言 二.业务需求 三.功能实现 1.处理数据 2.Word模板 3.输出动态数据 四.完整代码和模板 1.Word模板 2.完整代码 五.总结 一.前言 在之前的文章中,我们做了直接生 ...
- php 模板替换,使用PHPWord对Word文件做模板替换
因工作需要,使用了版本比较旧的PHPWord项目 官方已不见维护更新,上次版本更新是在Fri Jul 8, 2011 at 8:00 AM 如果PHP版本>=5.3.3,强烈推荐使用PHPOff ...
- php读取word模板文件,使用PHPWord对Word文件做模板替换
文章排版有点乱,建议点击左下角的"阅读原文"查看. 因工作需要,使用了版本比较旧的 PHPWord项目 官方已不见维护更新,上次版本更新是在 Fri Jul 8, 2011 at ...
- PHPWord 替换 Word文件内容
PHPWord 替换 Word文件内容 // 引入扩展 composer require phpoffice/phpword //模板内 默认的搜索模式宏 ${search-pattern}$form ...
- 传智播客PHP笔记05-thinkphp框架-视图渲染、display,fetch,模板替换,模板变量的赋值与实现,系统变量,模板函数,模板运算符,foreach,if,比较标签,volist标签
1.视图概述 将具体的视图模板进行输出显示,有两个方法 display:获取具体要输出的内容,然后直接输出 fetch:获取具体要输出的内容,但不会自动输出 2.display的使用(输出模板内容) ...
- 织梦?php?调用栏目,dedecms列表页内容页模板调用上一个栏目下一个栏目方法
织梦CMS内容页有上一篇下一篇文章,没有上一个栏目下一个栏目,我们可以不用修改程序内核文件,直接在模板里用"runphp"输出上一个栏目和下一个栏目. 上一个栏目下一个栏目标签写法 ...
最新文章
- 每天写的叫工作日志,每周写的总结叫周报,每月写的叫月报
- KNN 分类算法原理代码解析
- svnserve.conf: Option expected的问题解决方法
- Linux上安装Bugfree系统
- python 列表中的数字转字符串_python 将列表中的字符串转为数字
- HDU 1088 Write a simple HTML Browser
- 以“数”赋能驱动企业转型 美的集团秘诀都在这里
- php-5.6.26源代码 - opcode处理器,“函数调用opcode”处理器,如何调用扩展模块的函数...
- 三数之和,去除重复。
- MOON.ORM 3.0 具体使用方法及下载
- Windows注册表内容详解
- SRP Batch合批失败
- 宏基台式计算机设置硬盘启动,Acer宏碁台式电脑bios设置u盘启动详细步骤
- wind7计算机控制面板在哪,Win7控制面板在哪打开|win7打开控制面板的小技巧
- 【CityHunter】Unity3D设计AR探索模式
- Java微服务开发指南-集群管理、失败转移和负载均衡的实践(下)
- iOS 视频、图片翻转问题
- java eclipse生成apk,将Eclipse Android项目打包成APK文件
- 香港计算机专业硕士学制几年,想读香港一年计算机硕士,懂行老哥来指导一下我这个迷茫的five...
- Mysql碎片恢复_mysql数据库碎片整理
热门文章
- 关于自动化测试的前期发展历史及未来发展趋势
- 2019第三季度UWA STAR:解答亦是学习
- el-collapse用法
- 1156针最强cpu,1156的CPU什么最好?
- 调制深度(modulation depth)是什么?
- 无法支持计算机上的硬件,win7“不支持的硬件,你的电脑使用的处理器专为最新版win...
- hihoCoder 1498 Diligent Robots
- 解决前端 js 中使用 append 动态追加元素标签后,事件和css样式异常问题
- 如何烧写Bubblegum-96 board
- gmail 邮件客户端设置