@StreetRacer

Как в PHPWord TemplateProcessor сделать вставку таблицы?

Требуется в Word файле в обозначенном месте ${table} вставить таблицу которая будет генерироваться.
Пытался так:
$phpWord = new \PhpOffice\PhpWord\PhpWord();
function table() {
$section = $phpWord->addSection();
$table = $section->addTable();
for ($r = 1; $r <= 8; $r++) {
    $table->addRow();
    for ($c = 1; $c <= 5; $c++) {
        $table->addCell(1750)->addText("Row {$r}, Cell {$c}");
    }
}
}
$templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor("table.docx");
$templateProcessor->setValue('table', table());
$templateProcessor->saveAs("1111.docx");

но так не получается. Может кто подскажет как быть?
  • Вопрос задан
  • 7236 просмотров
Пригласить эксперта
Ответы на вопрос 3
AlexMaxTM
@AlexMaxTM
$obPHPWord = new PHPWord();
$obPHPWordDocument = $obPHPWord->loadTemplate('template.docx');
$section = $this->obPHPWord->createSection();
$table = $section->addTable();
$table->addRow(900);
// Add cells
$table->addCell(2000)->addText('Col 1');
$table->addCell(2000)->addText('Col 2');
$table->addCell(2000)->addText('Col 3');

$objWriter = PHPWord_IOFactory::createWriter($obPHPWord, 'Word2007');
$sTableText = $objWriter->getWriterPart('document')->getObjectAsText($table);
$obPHPWordDocument->setValue('myTable', $sTableText);
$obPHPWordDocument->save('result.docx');
Ответ написан
@mellivora
Ответ написан
Комментировать
@dimma111
Думаю тут косяк:
$templateProcessor->setValue('table', table());
Нужно через setComplexBlock
$templateProcessor->setComplexBlock('table', $table);


А вообще короче так:
$templateProcessor = new PhpOffice\PhpWord\TemplateProcessor($templateFile);

$table = new \PhpOffice\PhpWord\Element\Table(array('borderSize' => 6, 'borderColor' => 'black', 'unit' => 'pct', 'width' => 100 * 50));
$table->addRow();
$table->addCell(1000)->addText('Колонка 1');
$table->addCell(2000)->addText('Колонка 2');
$table->addCell(1000)->addText('Колонка 3');

$templateProcessor->setComplexBlock('TABLE', $table);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы