Fix colspan and rowspan for tables in HTML Writer. Syntax improved.
This commit is contained in:
parent
557af99a6d
commit
a95c3f83bc
|
|
@ -40,21 +40,22 @@ class Table extends AbstractElement
|
||||||
$rowCount = count($rows);
|
$rowCount = count($rows);
|
||||||
if ($rowCount > 0) {
|
if ($rowCount > 0) {
|
||||||
$content .= '<table>' . PHP_EOL;
|
$content .= '<table>' . PHP_EOL;
|
||||||
for ($i = 0; $i < count($rows); $i++) {
|
for ($i = 0; $i < $rowCount; $i++) {
|
||||||
/** @var $row \PhpOffice\PhpWord\Element\Row Type hint */
|
/** @var $row \PhpOffice\PhpWord\Element\Row Type hint */
|
||||||
$rowStyle = $rows[$i]->getStyle();
|
$rowStyle = $rows[$i]->getStyle();
|
||||||
// $height = $row->getHeight();
|
// $height = $row->getHeight();
|
||||||
$tblHeader = $rowStyle->isTblHeader();
|
$tblHeader = $rowStyle->isTblHeader();
|
||||||
$content .= '<tr>' . PHP_EOL;
|
$content .= '<tr>' . PHP_EOL;
|
||||||
$rowCells = $rows[$i]->getCells();
|
$rowCells = $rows[$i]->getCells();
|
||||||
for ($j = 0; $j < count($rowCells); $j++) {
|
$rowCellCount = count($rowCells);
|
||||||
|
for ($j = 0; $j < $rowCellCount; $j++) {
|
||||||
$cellStyle = $rowCells[$j]->getStyle();
|
$cellStyle = $rowCells[$j]->getStyle();
|
||||||
$cellColSpan = $cellStyle->getGridSpan();
|
$cellColSpan = $cellStyle->getGridSpan();
|
||||||
$cellRowSpan = 1;
|
$cellRowSpan = 1;
|
||||||
$cellVMerge = $cellStyle->getVMerge();
|
$cellVMerge = $cellStyle->getVMerge();
|
||||||
// If this is the first cell of the vertical merge, find out how man rows it spans
|
// If this is the first cell of the vertical merge, find out how man rows it spans
|
||||||
if ($cellVMerge === 'restart') {
|
if ($cellVMerge === 'restart') {
|
||||||
for ($k = $i + 1; $k < count($rows); $k++) {
|
for ($k = $i + 1; $k < $rowCount; $k++) {
|
||||||
$kRowCells = $rows[$k]->getCells();
|
$kRowCells = $rows[$k]->getCells();
|
||||||
if (isset($kRowCells[$j])) {
|
if (isset($kRowCells[$j])) {
|
||||||
if ($kRowCells[$j]->getStyle()->getVMerge() === 'continue') {
|
if ($kRowCells[$j]->getStyle()->getVMerge() === 'continue') {
|
||||||
|
|
@ -70,14 +71,14 @@ class Table extends AbstractElement
|
||||||
// Ignore cells that are merged vertically with previous rows
|
// Ignore cells that are merged vertically with previous rows
|
||||||
if ($cellVMerge !== 'continue') {
|
if ($cellVMerge !== 'continue') {
|
||||||
$cellTag = $tblHeader ? 'th' : 'td';
|
$cellTag = $tblHeader ? 'th' : 'td';
|
||||||
$cellColSpanAttr = (is_numeric($cellColSpan) && ($cellColSpan > 1) ? " colspan=\"{$cellColSpan}\"" : "");
|
$cellColSpanAttr = (is_numeric($cellColSpan) && ($cellColSpan > 1) ? " colspan=\"{$cellColSpan}\"" : '');
|
||||||
$cellRowSpanAttr = ($cellRowSpan > 1 ? " rowspan=\"{$cellRowSpan}\"" : "");
|
$cellRowSpanAttr = ($cellRowSpan > 1 ? " rowspan=\"{$cellRowSpan}\"" : '');
|
||||||
$content .= "<{$cellTag}{$cellColSpanAttr}{$cellRowSpanAttr}>" . PHP_EOL;
|
$content .= "<{$cellTag}{$cellColSpanAttr}{$cellRowSpanAttr}>" . PHP_EOL;
|
||||||
$writer = new Container($this->parentWriter, $rowCells[$j]);
|
$writer = new Container($this->parentWriter, $rowCells[$j]);
|
||||||
$content .= $writer->write();
|
$content .= $writer->write();
|
||||||
if ($cellRowSpan > 1) {
|
if ($cellRowSpan > 1) {
|
||||||
// There shouldn't be any content in the subsequent merged cells, but lets check anyway
|
// There shouldn't be any content in the subsequent merged cells, but lets check anyway
|
||||||
for ($k = $i + 1; $k < count($rows); $k++) {
|
for ($k = $i + 1; $k < $rowCount; $k++) {
|
||||||
$kRowCells = $rows[$k]->getCells();
|
$kRowCells = $rows[$k]->getCells();
|
||||||
if (isset($kRowCells[$j])) {
|
if (isset($kRowCells[$j])) {
|
||||||
if ($kRowCells[$j]->getStyle()->getVMerge() === 'continue') {
|
if ($kRowCells[$j]->getStyle()->getVMerge() === 'continue') {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue