Я пытаюсь экспортировать данные пользователя в .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'));
}
После загрузки файла документа результат выглядит так:
{"id":1,"name":"Emdadul Huq Shikder","email":"[email protected]","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:
Создать .docx
файл с помощью программы обработки текста (OpenOffice, LibreOffice Writer, MS Word и т. д.), которая будет служить шаблоном вашего «Пользовательского документа» (таким образом, вы можете устанавливать размер, поля, ориентацию и другие атрибуты, а также творчески форматировать документ, используя инструменты, предоставляемые в используемой вами программе обработки текста).
Для динамических значений в вашем документе вы можете использовать переменные в качестве заполнителей. Синтаксис переменной документа: ${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);
Шаг 4:
Создать безопасное имя файла (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'));
}
Других решений пока нет …