日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php完美导出word,PHP使用phpword生成word文档

發布時間:2025/3/12 php 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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文档的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。