PHPWord中setValue函数无法使用的问题及解决求助
解决PHPWord调用setValue报错的问题
错误原因
setValue方法并非PhpOffice\PhpWord\PhpWord类的成员方法,它是PHPWord专门用于模板变量替换的TemplateProcessor类的方法。直接在加载文档得到的PhpWord实例上调用该方法,会触发未定义方法的错误。
另外需要注意:PHPWord的TemplateProcessor仅支持处理.docx格式的模板文档,.doc格式无法直接使用模板替换功能,需先转换为.docx格式。
修正方案
1. 针对docx格式模板的修正代码
若文档可转换为.docx格式,直接使用TemplateProcessor加载并替换变量:
<?php use PhpOffice\PhpWord\TemplateProcessor; require_once 'vendor/autoload.php'; // 使用docx格式的模板文件 $source = 'test/sample-doc-file-for-testing-1.docx'; $templateProcessor = new TemplateProcessor($source); // 替换模板中的变量${Lorem}为John $templateProcessor->setValue('Lorem', 'John'); // 保存修改后的文档 $templateProcessor->saveAs('test/modified-document.docx'); ?>
2. 针对doc格式文档的处理
若必须处理.doc格式,需先将其转换为.docx格式(可通过LibreOffice命令行工具或其他文档转换工具完成),再使用上述TemplateProcessor的方式进行变量替换。
Linux环境下使用LibreOffice命令行转换的示例:
libreoffice --headless --convert-to docx test/sample-doc-file-for-testing-1.doc
转换完成后,加载生成的docx文件进行替换操作即可。
内容的提问来源于stack exchange,提问作者savegramer
相关产品推荐
相关产品推荐

