php完美导出word,PHP使用phpword生成word文档
使用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文档相关推荐
- thinkphp3.2集成phpword,生成word文档并下载
因为工作需要,需要将页面内容导出到word并下载.本文介绍在PHP中如何实现生成word文档并下载. 开发框架: thinkphp3.2 Word插件: PHPWord 一.安装PHPWord 安装 ...
- php角colspan=,PHPWord生成word实现table合并(colspan和rowspan)
PHPWord(http://phpword.codeplex.com/)是一个很好处理和生成WORD文档的工具,但是生成复杂的word,如colspan和rowspan的实现,还是需要你做些修改. ...
- php 2003生成word,使用PHPWord生成word文档的方法详解
使用PHPWord生成word文档的方法详解 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: 使用PHPWord生成word文档的方法详解.txt ] (友情提示 ...
- php生成 word,使用PHPWord生成word文档的方法详解
本文实例讲述了使用PHPWord生成word文档的方法.分享给大家供大家参考,具体如下: 有时我们需要把网页内容保存为Word文档格式,以供其他人员查看和编辑.PHPWord是一个用纯PHP编写的库, ...
- PHPWord生成word 下载 解决中文乱码
文章分两部分:一是代码部分,第二是解决中文乱码. 使用PHPWord生成Word文档 下载或保存到服务器 /*生成word文档*/public function makePhpWord(){vendo ...
- php colspan,PHPWord生成word实现table合并(colspan和rowspan)
PHPWord生成word实现table合并(colspan和rowspan) 2019-12-15 251 PHPWord rowspan的使用:$table = $section->addT ...
- PowerDesigner创建导出模版,并生成数据库文档(word文档)
一.创建导出模版 1.Report下点击Report Templates... 2.点击新建 3.配置模版:模版名,简体中文,物理模型 4.配置模版显示项 Available items -- Lis ...
- 生成doc文档目录,aspose word技术实现
生成doc文档目录,比较了Spire.Doc和aspose word两个技术,Spire.Doc生成目录过多的话会出现问题,使用aspose word解决此问题. //输出到文件 String dir ...
- Python-生成word、docs文件[生成word文档]
Python-生成word.docs文件[生成word文档] 方法一:写入新建文档 安装第三方库 实现代码 运行结果 注意 方法二:运用模板写入word文档 安装第三方库 创建模板或修改模板 实现代码 ...
最新文章
- Unix / 类 Unix shell 中有哪些很酷很冷门很少用很有用的命令?(转)
- 瑞星个人安全产品又添新丁
- 点权生成树(gentree)
- 5G NGC — N3IWF 非 3GPP 互通功能
- python使用字典格式化字符串-4.2.3Python下字典的格式化字符串
- P1091 合唱队形(LIS)
- 【数据结构与算法】之深入解析“打家劫舍III”的求解思路与算法示例
- C博客作业03--函数
- oracle重启监听报01106,oracle 监听重启
- 【做题记录】统计区间(哈希/扫描线)
- FCOS: A Simple and Strong Anchor-free Object Detector
- MYSQL 删除二进制日志的 3 个方法
- Mysql Sql语句令某字段值等于原值加上一个字符串
- 向一个文件中写入字符,可以规定每行字数
- Linux vim常用命令
- PDF编辑器中文版免费下载哪里可以下载?
- 如何给单元格加斜线?
- 哈特曼医用音叉行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- linux加速访问github
- 显卡的结构和工作原理及发展历史与现状
热门文章
- android 设置setmultichoiceitems设置初始化勾选_Linux内核启动:虚拟盘空间设置和内存管理结构初始化...
- alxctools索引超出了数组界限_[译]V8中的数组类型
- oracle 数据导入 mysql_oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)...
- sqlserver可视化工具_数据分析之基础分析工具篇(修订版)
- Dreamwear如何创建javascript_JavaScript 太糟糕,JVM 有妙招!
- html前端页面的基本骨架是,web前端入门到实战:css实现的骨架屏方案
- linux系统nginx启动不了,nginx启动不了,求大神帮助!
- 深度技术win11 32位全新专业版系统v2021.07
- win11 32位官方版原版镜像文件v2021.07
- Idea怎么实现画类图