最近遇到一个需求,需要根据数据生成一份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替换模板内容 在模板追加内容相关推荐

  1. MFC开发IM-第十九篇、获取编辑框内容,并且追加内容

    //获得当前文本   CEdit* pEdit = (CEdit*)GetDlgItem(IDC_E_CONTENT);             CString chat_content = _T(& ...

  2. PHPWord替换word模板内容时,存在表格,且不确定表格行数的处理方式

    PHPWord替换word模板内容时,存在表格,且不确定表格行数的处理方式 想得到的目标表格 表格可能存在若干行,需要循环生成,插入到word模板中 word模板 实现过程 1.Composer安装 ...

  3. php 操作word模板,phpword替换模板内容和解决中文乱码

    本篇文章给大家分享的内容是phpword替换模板内容和解决中文乱码的问题,有需要的朋友可以看一下. 好吧 先下载吧: 下载地址:https://pan.baidu.com/s/1upup2rpLTVX ...

  4. phpword替换模板内容+解决中文乱码

    好吧 先下载吧: 下载地址:https://pan.baidu.com/s/1upup2rpLTVXIdJpGi9kK6A 密码:qxsd 手册 http://phpword.readthedocs. ...

  5. 【PHPWord】基于Word模板替换生成输出表格动态生成内容、合并单元格、设置单元格背景颜色

    文章目录 一.前言 二.业务需求 三.功能实现 1.处理数据 2.Word模板 3.输出动态数据 四.完整代码和模板 1.Word模板 2.完整代码 五.总结 一.前言 在之前的文章中,我们做了直接生 ...

  6. php 模板替换,使用PHPWord对Word文件做模板替换

    因工作需要,使用了版本比较旧的PHPWord项目 官方已不见维护更新,上次版本更新是在Fri Jul 8, 2011 at 8:00 AM 如果PHP版本>=5.3.3,强烈推荐使用PHPOff ...

  7. php读取word模板文件,使用PHPWord对Word文件做模板替换

    文章排版有点乱,建议点击左下角的"阅读原文"查看. 因工作需要,使用了版本比较旧的 PHPWord项目 官方已不见维护更新,上次版本更新是在 Fri Jul 8, 2011 at ...

  8. PHPWord 替换 Word文件内容

    PHPWord 替换 Word文件内容 // 引入扩展 composer require phpoffice/phpword //模板内 默认的搜索模式宏 ${search-pattern}$form ...

  9. 传智播客PHP笔记05-thinkphp框架-视图渲染、display,fetch,模板替换,模板变量的赋值与实现,系统变量,模板函数,模板运算符,foreach,if,比较标签,volist标签

    1.视图概述 将具体的视图模板进行输出显示,有两个方法 display:获取具体要输出的内容,然后直接输出 fetch:获取具体要输出的内容,但不会自动输出 2.display的使用(输出模板内容) ...

  10. 织梦?php?调用栏目,dedecms列表页内容页模板调用上一个栏目下一个栏目方法

    织梦CMS内容页有上一篇下一篇文章,没有上一个栏目下一个栏目,我们可以不用修改程序内核文件,直接在模板里用"runphp"输出上一个栏目和下一个栏目. 上一个栏目下一个栏目标签写法 ...

最新文章

  1. 每天写的叫工作日志,每周写的总结叫周报,每月写的叫月报
  2. KNN 分类算法原理代码解析
  3. svnserve.conf: Option expected的问题解决方法
  4. Linux上安装Bugfree系统
  5. python 列表中的数字转字符串_python 将列表中的字符串转为数字
  6. HDU 1088 Write a simple HTML Browser
  7. 以“数”赋能驱动企业转型 美的集团秘诀都在这里
  8. php-5.6.26源代码 - opcode处理器,“函数调用opcode”处理器,如何调用扩展模块的函数...
  9. 三数之和,去除重复。
  10. MOON.ORM 3.0 具体使用方法及下载
  11. Windows注册表内容详解
  12. SRP Batch合批失败
  13. 宏基台式计算机设置硬盘启动,Acer宏碁台式电脑bios设置u盘启动详细步骤
  14. wind7计算机控制面板在哪,Win7控制面板在哪打开|win7打开控制面板的小技巧
  15. 【CityHunter】Unity3D设计AR探索模式
  16. Java微服务开发指南-集群管理、失败转移和负载均衡的实践(下)
  17. iOS 视频、图片翻转问题
  18. java eclipse生成apk,将Eclipse Android项目打包成APK文件
  19. 香港计算机专业硕士学制几年,想读香港一年计算机硕士,懂行老哥来指导一下我这个迷茫的five...
  20. Mysql碎片恢复_mysql数据库碎片整理

热门文章

  1. 关于自动化测试的前期发展历史及未来发展趋势
  2. 2019第三季度UWA STAR:解答亦是学习
  3. el-collapse用法
  4. 1156针最强cpu,1156的CPU什么最好?
  5. 调制深度(modulation depth)是什么?
  6. 无法支持计算机上的硬件,win7“不支持的硬件,你的电脑使用的处理器专为最新版win...
  7. hihoCoder 1498 Diligent Robots
  8. 解决前端 js 中使用 append 动态追加元素标签后,事件和css样式异常问题
  9. 如何烧写Bubblegum-96 board
  10. gmail 邮件客户端设置