3

我正在尝试将用户详细信息导出到.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"}

我想得到格式正确的结果,例如标题“名称”、“电子邮件”等。

4

2 回答 2

11

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

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

这是带有文档变量的示例文档模板的屏幕截图。 在此处输入图像描述

第 2 步: 将您的文档模板上传到服务器的存储路径。

第 3 步: 创建一个新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'));
}
于 2018-03-13T12:52:39.557 回答
0
public function wordExport($id){
    $doc = Doc::find($id);

    $templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor('word-template/document.docx');

    $title = $doc->title;
    $reg = $doc->reg;

    $templateProcessor->setValue('title', $title);
    $templateProcessor->setValue('reg', $reg);

    $fileName = $title;
    $templateProcessor->saveAs($fileName . '.docx');
    return response()->download($fileName . '.docx')->deleteFileAfterSend(true);
}
于 2020-08-21T11:32:46.577 回答