создать объединенную ячейку с PHPWord - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь создать таблицу слов с объединенной ячейкой, используя php 7.4 и PHPWorld 0.17.0 (последняя версия доступна).

Это то, чего я хочу достичь:

----------------
|              |
----------------
|  |  |  |  |  |
----------------

Это мой код:

    // New Word Document
    $phpWord = new \PhpOffice\PhpWord\PhpWord();
    $section = $phpWord->addSection();
    $table = $section->addTable(array('width' => 100 * 100, 'unit' => 'pct', 'align' => 'center'));


    $row = $table->addRow();
    $cell = $row->addCell(null, array('gridSpan'=>5));
    $cell->addText(htmlspecialchars("full row"));

    // row 1       
    $row = $table->addRow();
    $cell = $row->addCell();
    $cell->addText(htmlspecialchars("1"));
    $cell = $row->addCell();
    $cell->addText(htmlspecialchars("2"));
    $cell = $row->addCell();
    $cell->addText(htmlspecialchars("3"));
    $cell = $row->addCell();
    $cell->addText(htmlspecialchars("4"));
    $cell = $row->addCell();
    $cell->addText(htmlspecialchars("5"));

    /*
    // row 2
    $row = $table->addRow();
    $cell = $row->addCell(null, array('gridSpan'=>1));
    $cell->addText(htmlspecialchars("1"));
    $cell = $row->addCell(null, array('gridSpan'=>1));
    $cell->addText(htmlspecialchars("2"));
    $cell = $row->addCell(null, array('gridSpan'=>1));
    $cell->addText(htmlspecialchars("3"));
    $cell = $row->addCell(null, array('gridSpan'=>2));
    $cell->addText(htmlspecialchars("4"));

    // row 3
    $row = $table->addRow();
    $cell = $row->addCell(null, array('gridSpan'=>1));
    $cell->addText(htmlspecialchars("1"));
    $cell = $row->addCell(null, array('gridSpan'=>4));
    $cell->addText(htmlspecialchars("2"));
    */

    header("Content-Description: File Transfer");
    header('Content-Disposition: attachment; filename="text.docx"');
    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");
    exit();

В результате docx не показывает никакой таблицы, только текст !! Ошибка не отображается и не записывается в php файл журнала ошибок!

Если вы попытаетесь прокомментировать раздел «row1» и раздел раскомментирования, создающий «row2» и «row3», он будет работать как положено!

РЕДАКТИРОВАТЬ : Я нашел решение. Добавьте ширину ко всем ячейкам (например, 1), чтобы решить проблему! Ширина измеряется в два раза, кажется, значения ширины используются для расчета пропорций между ячейками. Таким образом, одинаковые значения ширины означают, что каждая ячейка имеет одинаковую ширину.

...