1717
1818namespace PhpOffice \PhpWord \Writer \ODText \Element ;
1919
20+ use PhpOffice \Common \XMLWriter ;
21+ use PhpOffice \PhpWord \Element \Row as RowElement ;
22+ use PhpOffice \PhpWord \Element \Table as TableElement ;
23+
2024/**
2125 * Table element writer
2226 *
@@ -36,32 +40,59 @@ public function write()
3640 }
3741 $ rows = $ element ->getRows ();
3842 $ rowCount = count ($ rows );
39- $ colCount = $ element ->countColumns ();
4043
4144 if ($ rowCount > 0 ) {
4245 $ xmlWriter ->startElement ('table:table ' );
4346 $ xmlWriter ->writeAttribute ('table:name ' , $ element ->getElementId ());
4447 $ xmlWriter ->writeAttribute ('table:style ' , $ element ->getElementId ());
4548
46- $ xmlWriter ->startElement ('table:table-column ' );
47- $ xmlWriter ->writeAttribute ('table:number-columns-repeated ' , $ colCount );
48- $ xmlWriter ->endElement (); // table:table-column
49+ // Write columns
50+ $ this ->writeColumns ($ xmlWriter , $ element );
4951
52+ // Write rows
5053 foreach ($ rows as $ row ) {
51- $ xmlWriter ->startElement ('table:table-row ' );
52- /** @var $row \PhpOffice\PhpWord\Element\Row Type hint */
53- foreach ($ row ->getCells () as $ cell ) {
54- $ xmlWriter ->startElement ('table:table-cell ' );
55- $ xmlWriter ->writeAttribute ('office:value-type ' , 'string ' );
56-
57- $ containerWriter = new Container ($ xmlWriter , $ cell );
58- $ containerWriter ->write ();
59-
60- $ xmlWriter ->endElement (); // table:table-cell
61- }
62- $ xmlWriter ->endElement (); // table:table-row
54+ $ this ->writeRow ($ xmlWriter , $ row );
6355 }
6456 $ xmlWriter ->endElement (); // table:table
6557 }
6658 }
59+
60+ /**
61+ * Write column.
62+ *
63+ * @param \PhpOffice\Common\XMLWriter $xmlWriter
64+ * @param \PhpOffice\PhpWord\Element\Table $element
65+ */
66+ private function writeColumns (XMLWriter $ xmlWriter , TableElement $ element )
67+ {
68+ $ colCount = $ element ->countColumns ();
69+
70+ for ($ i = 0 ; $ i < $ colCount ; $ i ++) {
71+ $ xmlWriter ->startElement ('table:table-column ' );
72+ $ xmlWriter ->writeAttribute ('table:style-name ' , $ element ->getElementId () . '. ' . $ i );
73+ $ xmlWriter ->endElement ();
74+ }
75+ }
76+
77+ /**
78+ * Write row.
79+ *
80+ * @param \PhpOffice\Common\XMLWriter $xmlWriter
81+ * @param \PhpOffice\PhpWord\Element\Row $row
82+ */
83+ private function writeRow (XMLWriter $ xmlWriter , RowElement $ row )
84+ {
85+ $ xmlWriter ->startElement ('table:table-row ' );
86+ /** @var $row \PhpOffice\PhpWord\Element\Row Type hint */
87+ foreach ($ row ->getCells () as $ cell ) {
88+ $ xmlWriter ->startElement ('table:table-cell ' );
89+ $ xmlWriter ->writeAttribute ('office:value-type ' , 'string ' );
90+
91+ $ containerWriter = new Container ($ xmlWriter , $ cell );
92+ $ containerWriter ->write ();
93+
94+ $ xmlWriter ->endElement (); // table:table-cell
95+ }
96+ $ xmlWriter ->endElement (); // table:table-row
97+ }
6798}
0 commit comments