假如有如下excel表格
需求是把每一行的个人信息填写到word文件里,并且每个人生成一个word文档,就像下面这样
使用php,这个需求很好实现,大约20几行代码,之前我写过一篇博客关于php解析word文档的,是用的正则表达式解析的,这次直接用个成品,phpoffice,只需要简单的引入就可以使用了,这次主要用了两个包,phpword和phpexcel,下面还是上代码,很简单都有注释,在thinkphp框架里写的,不用框架的话直接include就行。
<?php
namespace Home\Controller;
use Think\Controller;
set_time_limit(1800);
class IndexController extends Controller {
public function docx(){
vendor("PhpOffice.PHPExcel.IOFactory");//导入phpexcel输入输出类
vendor("PhpOffice.PhpWord.TemplateProcessor");//导入phpword模板类
$sheet=\PHPExcel_IOFactory::createReader("Excel2007")->load("data.xlsx")->getActiveSheet();
$row=$sheet->getHighestRow();//取得总行数
$col=$sheet->getHighestColumn();//取得总列数
$data=[];
for($i=0;$i<$row;$i++){
for($j=0;$j<=4;$j++){
$data[$i][$j]=$sheet->getCellByColumnAndRow($j, $i+1)->getValue();
}
}
foreach ($data as $key => &$value) {
$tmp=new \PhpOffice\PhpWord\TemplateProcessor('tmp.docx');//word模板句柄
$tmp->setValue('name',$value[0]);//设置需要替换的值
$tmp->setValue('sex',$value[1]);
$tmp->setValue('nation',$value[2]);
$tmp->setValue('birthday',$value[3]);
$tmp->setValue('school',$value[4]);
if(!is_dir(iconv("utf-8","gbk","生成/"))){
mkdir(iconv("utf-8","gbk","生成/"),0777,true);//生成文件夹,iconv为转换编码防止文件夹乱码
}
$tmp->saveAs(iconv("utf-8","gbk","生成/").$value[0].".docx");//生成文件
unset($tmp);
}
die("success!");
}
}
首先还得准备相应的excel表格和word模板,word模板如下
运行了下,效果如下
然后可以看到相应的word文件已经生成了
打开看一下相应的信息也填进去了