我正在尝试使用下面的代码从模板创建一个.docx文件。
$phpWord = new \PhpOffice\PhpWord\TemplateProcessor(storage_path().'\app\public\sample\sample.docx');
$phpWord->setValue('days', '365');
$phpWord->setValue('what', 'Benchmark');
$phpWord->setValue('test', 'KKKK');
$phpWord->setValue('best', 'MMMM');
$phpWord->saveAs(storage_path().'\app\public\sample\final.docx');
sample.docs文件类似于。
但是,当我运行上述代码时,生成的final.docx如下所示。
、测试、和最好的变量被更新,但是、days、和--什么是--没有更新。days和在.docx文档的标题中是什么?但是我不知道如何使用PHPWord更新它。
示例sample.doc文件链接是这里。
发布于 2022-10-19 14:48:15
重新格式化文档.
您提供的模板在标题中有一个“内容控件”,它似乎与库或代码不兼容。突出显示标题,删除内容控件,如下所示:
..and voila!
不需要对代码进行重大更改。为了简单起见,我重写了它。
$in = storage_path()."\app\public\sample\sample.docx";
$out = storage_path().'\app\public\sample\final.docx';
$phpWord = new \PhpOffice\PhpWord\TemplateProcessor($in);
$templateVars = [
'days'=>'365',
'what'=>'Benchmark',
'test'=>'KKKK',
'best'=> 'MMMM'
];
$phpWord->setValues($templateVars);
$phpWord->saveAs($out);
发布于 2022-10-12 15:37:52
尝试使用replaceBlock函数将整个标题块替换为已配置的标题。为了做到这一点,您需要在word文件中声明这样的块:
${block_name}
The text you want to replace.
${/block_name}
要用另一个代码块替换该块,请将这一行代码实现到PHP中:
$phpWord->replaceBlock('block_name', "CIS Microsoft {$days} Foundations {$what}");
不是最干净的解决方案,但总比没有好。希望我能帮^
附带说明:
您可以通过以下方法更改多个值:
$phpWord->setValues(array('test' => 'KKKK', 'best' => 'MMMM'));
https://stackoverflow.com/questions/74014334
复制相似问题