[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как в phpword вставить в шаблон таблицу?
SOkolov
как в phpword вставить в шаблон не простой текст, а целую таблицу, созданную в том же phpword?
у меня есть рабочий пример кода, где в phpword создаётся новый файл с таблицей
require_once("vendor/autoload.php");

/* Start to develop here. Best regards https://php-download.com/ */

// Creating the new document...

$phpWord = new \PhpOffice\PhpWord\PhpWord();


// Adding an empty Section to the document...
$section = $phpWord->addSection();

// своя таблица

$fancyTableStyle = array('borderColor' => 'gray', 'borderSize' => 1, 'cellMargin' => 80,'cellSpacing'=>1); // стили для таблицы
$fancyTableFontStyle = array('size' => 10, 'bold' => true); // стили для заголовка таблицы (thead)
$myFontStyle = array('size' => 8, 'bold' => false, 'italic' => true); // стили для заголовка таблицы (thead)
$fancyTableStyleItalicRight = array('align' => 'right'); // стили для выполнено/не выполнено

$myTable = $section->addTable($fancyTableStyle);
// шапка
$myTable->addRow();
$myTable->addCell(1500, ['valign' => 'center'])->addText("Дата, время", $fancyTableFontStyle);
$myTable->addCell(7000, ['valign' => 'center'])->addText("Содержание сообщений в течение смены, подписи о сдаче и приемке смены смены", $fancyTableFontStyle);
$myTable->addCell(1500, ['valign' => 'center'])->addText("Визы, замечания", $fancyTableFontStyle);

// инфа

$myTableCellStyle = array('valign' => 'top'); // стили для всех ячеек таблицы
$curDate = ''; // дата/время по дефолту пустые

$myTable->addRow();
$myTable->addCell(1500, $myTableCellStyle)->addText("", $myFontStyle);
$myTable->addCell(7000, $myTableCellStyle)->addText("За время дежурства АО и ТН не было", $myFontStyle);
$myTable->addCell(1500, $myTableCellStyle)->addText("", $myFontStyle);

$footer = $section->addFooter();
$footer->addPreserveText('{PAGE} из {NUMPAGES}', null, array('align' => 'right'));

$file = 'Журнал от '.date('d.m.Y').'.docx';
header("Content-Description: File Transfer");
header('Content-Disposition: attachment; filename="' . $file . '"');
header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
$xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
$xmlWriter->save("php://output");

я решил его интегрировать в другой код, где в существующий файл подставляются значения. по моей задумке вместо одного из значений должна подставиться созданная таблица.
require_once($_SERVER['DOCUMENT_ROOT'] . '/phpword/vendor/autoload.php');

$document = new \PhpOffice\PhpWord\TemplateProcessor($_SERVER['DOCUMENT_ROOT'] . '/development_mr/word_table/template.docx');

$phpWord = new \PhpOffice\PhpWord\PhpWord();

$section = $phpWord->addSection();

$fancyTableStyle = array('borderColor' => 'gray', 'borderSize' => 1, 'cellMargin' => 80,'cellSpacing'=>1); // стили для таблицы
$fancyTableFontStyle = array('size' => 10, 'bold' => true); // стили для заголовка таблицы (thead)
$myFontStyle = array('size' => 8, 'bold' => false, 'italic' => true); // стили для заголовка таблицы (thead)
$fancyTableStyleItalicRight = array('align' => 'right'); // стили для выполнено/не выполнено

$myTable = $section->addTable($fancyTableStyle);
// шапка
$myTable->addRow();
$myTable->addCell(1500, ['valign' => 'center'])->addText("Дата, время", $fancyTableFontStyle);
$myTable->addCell(7000, ['valign' => 'center'])->addText("Содержание сообщений в течение смены, подписи о сдаче и приемке смены смены", $fancyTableFontStyle);
$myTable->addCell(1500, ['valign' => 'center'])->addText("Визы, замечания", $fancyTableFontStyle);

// инфа

$myTableCellStyle = array('valign' => 'top'); // стили для всех ячеек таблицы
$curDate = ''; // дата/время по дефолту пустые

$myTable->addRow();
$myTable->addCell(1500, $myTableCellStyle)->addText("", $myFontStyle);
$myTable->addCell(7000, $myTableCellStyle)->addText("За время дежурства АО и ТН не было", $myFontStyle);
$myTable->addCell(1500, $myTableCellStyle)->addText("", $myFontStyle);

$arResultDocOutfit = [];
$arResultDocOutfit['table'] = $section;
$arResultDocOutfit['company'] = $companyName;
$arResultDocOutfit['gendir'] = $companyGenDir;

$document->setValues($arResultDocOutfit);
$document->saveAs($_SERVER['DOCUMENT_ROOT'] . '/upload/outfitBlank/contract_.docx');

header('Location: /upload/outfitBlank/contract_.docx');

и ничего не подставляется. Как сделать правильно? Как альтернатива подойдёт способ таблицу в формате html перевести в подходящий формат и вставить в шаблон word.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.