假如有如下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文件已经生成了

打开看一下相应的信息也填进去了
