使用phpword生成文档有两种方式直接使用代码编写word文档,用代码生成word,但是设置样式,格式,图片非常麻烦,不建议使用。如果客户或产品提供一份word的样式,我们也难以完全复原,调样式很头疼的。

读取原有word模板,替换相关变量。个人感觉这种方式能满足绝大部分需求,实现起来也比较简单,所有的样式,格式直接在word模板里设置好,替换变量就可以了,还可以很方便的切换模板。本文主要介绍这种方式,毕竟我们是为了快速实现客户的需求,让客户提供一份word模板,我们稍微一改就可以了。

开始干活

1,通过composer安装phpword包composer require phpoffice/phpword

2,准备一个word模板(让客户或产品提供吧,docx格式的)

$tpl = 'template/word/display_agreement.docx';

$doc = new TemplateProcessor($tpl);//打开模板

// 简单替换

$doc->setValue('dealer_name', $oneCust->dealer->dealer_name, 2);//替换变量 第二个参数替换次数

$doc->setValue('cust_name', $oneCust->customer->cust_name);//替换变量cust_name

$doc->setValue('start_time', $arrOneCust['start_time_text']);

$doc->setValue('end_time', $arrOneCust['end_time_text']);

$doc->setValue('show_day', $arrOneCust['show_day']);

$doc->setValue('signing_date', date('Y年m月d日', $arrOneCust['create_at']));

// 陈列要求

// 循环替换

$arr = [

['goods_name'=>'苹果手机8','specs'=>'128G','number'=>'2台'],

['goods_name'=>'苹果手机11','specs'=>'128G','number'=>'2台'],

['goods_name'=>'苹果手机12','specs'=>'128G','number'=>'2台'],

]

if (!empty($arr)) {

$j = 1;

$rows = count($arr);

$doc->cloneRow('customergoods_name', $rows);//复制行

foreach ($arr as $oneGoods) {

$dTmp = $oneGoods->toArray();

$doc->setValue("customergoods_name#" . $j, "产品名称:{$oneGoods['goods_name']}");//替换变量

$doc->setValue("customergoods_spce#" . $j, "产品规格:{$oneGoods['specs']}");//替换变量

$doc->setValue("customergoods_num#" . $j, "数量:{$oneGoods['number']}");//替换变量

$j++;

}

}

有时我们需要有“陈列奖励”数据时就显示没有时就不显示,此里需要用到块标签了与html类似

// 陈列奖励

// 循环替换

$arr = [

['goods_name'=>'苹果手机8','time'=>'1606011063','number'=>'2台'],

['goods_name'=>'苹果手机11','time'=>'1606011063','number'=>'2台'],

['goods_name'=>'苹果手机12','time'=>'1606011063','number'=>'2台'],

]

$doc->cloneBlock('WIN_BLOCK',0);

if (!empty($arr)) {

//显示块

$doc->cloneBlock('WIN_BLOCK',1);

$j = 1;

$rows = count($arr);

$doc->cloneRow('customergoods_name', $rows);//复制行

foreach ($onePhase->customerGoodList as $oneGoods) {

$doc->setValue("phase_date#" . $j, date('Y-m-d', $onePhase['time']));//替换变量

$doc->setValue("phase_type#" . $j, '兑付');//替换变量

$doc->setValue("phase_goods#" . $j, $oneGoods['goods_name']);//替换变量

$doc->setValue("phase_num#" . $j, "数量:{$oneGoods['number']}");//替换变量

$j++;

}

}

替换图片// 只渲染

$tmp->setImageValue('header',['path'=>'1.jpeg']);

// 设置图片宽高

$tmp->setImageValue('header', ['path' => '1.jpg','width'=>500,'height'=>500]);

// 设置多次替换

$tmp->setImageValue('header', ['path' => '1.jpg','width'=>500,'height'=>500],3);

一些常用的word符号

换行符

分页符

制表符

html预留字符要替换为实体字符,如&要替换为&,可以使用htmlspecialchars()

使用方式

比如我们数据库存的换行符一般是 \n\r 这个在word中是无效的,要替换为
才行$content = str_replace("\r\n", '
', $content);

$doc->setValue('content', $content); //内容

php完美导出word,PHP使用phpword生成word文档相关推荐

  1. thinkphp3.2集成phpword,生成word文档并下载

    因为工作需要,需要将页面内容导出到word并下载.本文介绍在PHP中如何实现生成word文档并下载. 开发框架: thinkphp3.2 Word插件: PHPWord  一.安装PHPWord 安装 ...

  2. php角colspan=,PHPWord生成word实现table合并(colspan和rowspan)

    PHPWord(http://phpword.codeplex.com/)是一个很好处理和生成WORD文档的工具,但是生成复杂的word,如colspan和rowspan的实现,还是需要你做些修改. ...

  3. php 2003生成word,使用PHPWord生成word文档的方法详解

    使用PHPWord生成word文档的方法详解 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  使用PHPWord生成word文档的方法详解.txt ] (友情提示 ...

  4. php生成 word,使用PHPWord生成word文档的方法详解

    本文实例讲述了使用PHPWord生成word文档的方法.分享给大家供大家参考,具体如下: 有时我们需要把网页内容保存为Word文档格式,以供其他人员查看和编辑.PHPWord是一个用纯PHP编写的库, ...

  5. PHPWord生成word 下载 解决中文乱码

    文章分两部分:一是代码部分,第二是解决中文乱码. 使用PHPWord生成Word文档 下载或保存到服务器 /*生成word文档*/public function makePhpWord(){vendo ...

  6. php colspan,PHPWord生成word实现table合并(colspan和rowspan)

    PHPWord生成word实现table合并(colspan和rowspan) 2019-12-15 251 PHPWord rowspan的使用:$table = $section->addT ...

  7. PowerDesigner创建导出模版,并生成数据库文档(word文档)

    一.创建导出模版 1.Report下点击Report Templates... 2.点击新建 3.配置模版:模版名,简体中文,物理模型 4.配置模版显示项 Available items -- Lis ...

  8. 生成doc文档目录,aspose word技术实现

    生成doc文档目录,比较了Spire.Doc和aspose word两个技术,Spire.Doc生成目录过多的话会出现问题,使用aspose word解决此问题. //输出到文件 String dir ...

  9. Python-生成word、docs文件[生成word文档]

    Python-生成word.docs文件[生成word文档] 方法一:写入新建文档 安装第三方库 实现代码 运行结果 注意 方法二:运用模板写入word文档 安装第三方库 创建模板或修改模板 实现代码 ...

最新文章

  1. Unix / 类 Unix shell 中有哪些很酷很冷门很少用很有用的命令?(转)
  2. 瑞星个人安全产品又添新丁
  3. 点权生成树(gentree)
  4. 5G NGC — N3IWF 非 3GPP 互通功能
  5. python使用字典格式化字符串-4.2.3Python下字典的格式化字符串
  6. P1091 合唱队形(LIS)
  7. 【数据结构与算法】之深入解析“打家劫舍III”的求解思路与算法示例
  8. C博客作业03--函数
  9. oracle重启监听报01106,oracle 监听重启
  10. 【做题记录】统计区间(哈希/扫描线)
  11. FCOS: A Simple and Strong Anchor-free Object Detector
  12. MYSQL 删除二进制日志的 3 个方法
  13. Mysql Sql语句令某字段值等于原值加上一个字符串
  14. 向一个文件中写入字符,可以规定每行字数
  15. Linux vim常用命令
  16. PDF编辑器中文版免费下载哪里可以下载?
  17. 如何给单元格加斜线?
  18. 哈特曼医用音叉行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  19. linux加速访问github
  20. 显卡的结构和工作原理及发展历史与现状

热门文章

  1. android 设置setmultichoiceitems设置初始化勾选_Linux内核启动:虚拟盘空间设置和内存管理结构初始化...
  2. alxctools索引超出了数组界限_[译]V8中的数组类型
  3. oracle 数据导入 mysql_oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)...
  4. sqlserver可视化工具_数据分析之基础分析工具篇(修订版)
  5. Dreamwear如何创建javascript_JavaScript 太糟糕,JVM 有妙招!
  6. html前端页面的基本骨架是,web前端入门到实战:css实现的骨架屏方案
  7. linux系统nginx启动不了,nginx启动不了,求大神帮助!
  8. 深度技术win11 32位全新专业版系统v2021.07
  9. win11 32位官方版原版镜像文件v2021.07
  10. Idea怎么实现画类图