ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

在Laravel中使用PHPWord导出到docx时传递动态值

2019-10-25 09:32:46  阅读:418  来源: 互联网

标签:export-to-word laravel phpword php phpdocx


我正在尝试将用户详细信息导出到.docx文件.该文件已成功导出,但是正在提供对象. phpword格式不起作用.如何编写代码以正确导出动态值,请有人帮我吗?

在AdminController.php中-

public function exportUserToDoc(Request $request, $id)
{
    $wordTest = new \PhpOffice\PhpWord\PhpWord();
    $newSection = $wordTest->addSection();

    $desc1 = User::find($id);

    $newSection->addText($desc1, array('name' => $desc1->name, 'email' => $desc1->email, 'phone' => $desc1->phone, 'address' => $desc1->address));
    $objectWriter = \PhpOffice\PhpWord\IOFactory::createWriter($wordTest, 'Word2007');
    try{
        $objectWriter->save(storage_path('TestWordFile.docx'));
    }catch (Exception $e){

    }
    return response()->download(storage_path('TestWordFile.docx'));
}

下载doc文件后,结果类似于-

{"id":1,"name":"Emdadul Huq Shikder","email":"emdadulshikder@gmail.com","phone":"+8801674338411","address":"59\/6\/1 West Razabazar, Dhaka","status":0,"created_at":"2018-03-13 05:18:32","updated_at":"2018-03-13 05:35:51"}

我想获取格式正确的结果,例如标头“名称”,“电子邮件”等.

解决方法:

第1步:
使用文字处理程序(OpenOffice,LibreOffice Writer,MS Word等)创建一个.docx文件,该文件将用作“用户文档”的模板(通过这种方法,您可以设置大小,边距,方向和其他属性,还可以设置格式使用您所使用的文字处理程序中提供的工具创造性地创建您的文档).

对于文档中的动态值,可以将变量用作占位符.文档变量的语法为${variable}.确保变量名是唯一的.

这是带有文档变量的示例文档模板的屏幕截图.
enter image description here

第2步:
将文档模板上载到服务器的存储路径.

第三步:
创建一个新的TemplateProcessor并将值分配给您放置在文档模板中的变量.

$desc1 = User::find($id);   

$my_template = new \PhpOffice\PhpWord\TemplateProcessor(storage_path('user_template.docx'));

$my_template->setValue('name', $desc1->name);
$my_template->setValue('email', $desc1->email);
$my_template->setValue('phone', $desc1->phone);
$my_template->setValue('address', $desc1->address); 

第四步:
生成一个安全的文件名(即user_1.docx)

步骤5:
使用上一步中生成的安全文件名从模板中创建一个.docx文件.

try{
    $my_template->saveAs(storage_path('user_1.docx'));
}catch (Exception $e){
    //handle exception
}

步骤6:
下载已保存文件的完整代码段.

public function exportUserToDoc(Request $request, $id)
{
    $desc1 = User::find($id);

    $my_template = new \PhpOffice\PhpWord\TemplateProcessor(storage_path('user_template.docx'));

    $my_template->setValue('name', $desc1->name);
    $my_template->setValue('email', $desc1->email);
    $my_template->setValue('phone', $desc1->phone);
    $my_template->setValue('address', $desc1->address);      

    try{
        $my_template->saveAs(storage_path('user_1.docx'));
    }catch (Exception $e){
        //handle exception
    }

    return response()->download(storage_path('user_1.docx'));
}

标签:export-to-word,laravel,phpword,php,phpdocx
来源: https://codeday.me/bug/20191025/1927583.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有