安装PHP依赖 composer require phpoffice/phpword
// 以下代码仅支持字符串与列表形式的一维数组
function fill_template($templatePath, $data = [])
{
//指定事先制作好的模板文件路径
try {
$templateProcessor = new TemplateProcessor(public_path() . $templatePath);
foreach ($data as $k => $datum) {
if (is_string($datum)) {
$templateProcessor->setValue($k, $datum);
} else {
$count = count($datum);
$templateProcessor->cloneRow($k, $count); //复制行
foreach ($datum as $kk => $item) {
// 复制表格行后 #+数字为行号 从1开始
$templateProcessor->setValue($k . '#' . ($kk + 1), ''); // 设置占位标志为空字符串
foreach ($item as $kkk => $value) {
$templateProcessor->setValue($kkk.'#'.($kk + 1), $value);
}
}
}
}
$name = md5(time());
if (!is_dir(public_path("words/" . date('Ymd')))) {
mkdir(public_path("words/" . date('Ymd')), 0755, true);
}
// 将 word 文档保存至 你设置的路径
$full = public_path("words/" . date('Ymd')) . $name . ".docx";
$templateProcessor->saveAs($full);
} catch (CopyFileException $e) {
return $e->getMessage();
} catch (CreateTemporaryFileException $e) {
return $e->getMessage();
}
return $full;
}
测试数据:
// mock 数据
$data['key1']= 'AA';
$data['key2']= 'BB';
$data['key6']= [
[
'name'=>'张三',
'age'=>'12',
],
[
'name'=>'张三',
'age'=>'22',
],
];
echo fill_template('template/template-a.docx',$data);
//返回 E:\code\php\XXXX\public\words/20990101\c813f6bc4dbba4fd62143b3a392fb55.docx
参考:
phpword 模板使用