getXmlWriter(); $element = $this->getElement(); if (!$element instanceof \PhpOffice\PhpWord\Element\Table) { return; } $rows = $element->getRows(); $rowCount = count($rows); if ($rowCount > 0) { $xmlWriter->startElement('w:tbl'); // Table grid $cellWidths = array(); for ($i = 0; $i < $rowCount; $i++) { $row = $rows[$i]; $cells = $row->getCells(); if (count($cells) <= count($cellWidths)) { continue; } $cellWidths = array(); foreach ($cells as $cell) { $cellWidths[] = $cell->getWidth(); } } $xmlWriter->startElement('w:tblGrid'); foreach ($cellWidths as $width) { $xmlWriter->startElement('w:gridCol'); if (!is_null($width)) { $xmlWriter->writeAttribute('w:w', $width); $xmlWriter->writeAttribute('w:type', 'dxa'); } $xmlWriter->endElement(); } $xmlWriter->endElement(); // w:tblGrid // Table style $tblStyle = $element->getStyle(); $tblWidth = $element->getWidth(); if ($tblStyle instanceof TableStyle) { $styleWriter = new TableStyleWriter($xmlWriter, $tblStyle); $styleWriter->setIsFullStyle(false); $styleWriter->write(); } else { if (!empty($tblStyle)) { $xmlWriter->startElement('w:tblPr'); $xmlWriter->startElement('w:tblStyle'); $xmlWriter->writeAttribute('w:val', $tblStyle); $xmlWriter->endElement(); if (!is_null($tblWidth)) { $xmlWriter->startElement('w:tblW'); $xmlWriter->writeAttribute('w:w', $tblWidth); $xmlWriter->writeAttribute('w:type', 'pct'); $xmlWriter->endElement(); } $xmlWriter->endElement(); } } // Table rows for ($i = 0; $i < $rowCount; $i++) { $this->writeRow($xmlWriter, $rows[$i]); } $xmlWriter->endElement(); } } /** * Write row */ private function writeRow(XMLWriter $xmlWriter, RowElement $row) { $height = $row->getHeight(); $rowStyle = $row->getStyle(); $xmlWriter->startElement('w:tr'); if (!is_null($height) || $rowStyle->isTblHeader() || $rowStyle->isCantSplit()) { $xmlWriter->startElement('w:trPr'); if (!is_null($height)) { $xmlWriter->startElement('w:trHeight'); $xmlWriter->writeAttribute('w:val', $height); $xmlWriter->writeAttribute('w:hRule', ($rowStyle->isExactHeight() ? 'exact' : 'atLeast')); $xmlWriter->endElement(); } if ($rowStyle->isTblHeader()) { $xmlWriter->startElement('w:tblHeader'); $xmlWriter->writeAttribute('w:val', '1'); $xmlWriter->endElement(); } if ($rowStyle->isCantSplit()) { $xmlWriter->startElement('w:cantSplit'); $xmlWriter->writeAttribute('w:val', '1'); $xmlWriter->endElement(); } $xmlWriter->endElement(); } foreach ($row->getCells() as $cell) { $this->writeCell($xmlWriter, $cell); } $xmlWriter->endElement(); // w:tr } /** * Write cell */ private function writeCell(XMLWriter $xmlWriter, CellElement $cell) { $cellStyle = $cell->getStyle(); $xmlWriter->startElement('w:tc'); $xmlWriter->startElement('w:tcPr'); $xmlWriter->startElement('w:tcW'); $xmlWriter->writeAttribute('w:w', $cell->getWidth()); $xmlWriter->writeAttribute('w:type', 'dxa'); $xmlWriter->endElement(); // w:tcW if ($cellStyle instanceof CellStyle) { $styleWriter = new CellStyleWriter($xmlWriter, $cellStyle); $styleWriter->write(); } $xmlWriter->endElement(); // w:tcPr $containerWriter = new Container($xmlWriter, $cell); $containerWriter->write(); $xmlWriter->endElement(); // w:tc } }