See Release Notes
Long Term Support Release
Differences Between: [Versions 401 and 402] [Versions 401 and 403]
1 <?php 2 3 namespace PhpOffice\PhpSpreadsheet\Writer\Xlsx; 4 5 use PhpOffice\PhpSpreadsheet\Cell\Coordinate; 6 use PhpOffice\PhpSpreadsheet\Shared\XMLWriter; 7 use PhpOffice\PhpSpreadsheet\Worksheet\Table as WorksheetTable; 8 9 class Table extends WriterPart 10 { 11 /** 12 * Write Table to XML format. 13 * 14 * @param int $tableRef Table ID 15 * 16 * @return string XML Output 17 */ 18 public function writeTable(WorksheetTable $table, $tableRef): string 19 { 20 // Create XML writer 21 $objWriter = null; 22 if ($this->getParentWriter()->getUseDiskCaching()) { 23 $objWriter = new XMLWriter(XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); 24 } else { 25 $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); 26 } 27 28 // XML header 29 $objWriter->startDocument('1.0', 'UTF-8', 'yes'); 30 31 // Table 32 $name = 'Table' . $tableRef; 33 $range = $table->getRange(); 34 35 $objWriter->startElement('table'); 36 $objWriter->writeAttribute('xml:space', 'preserve'); 37 $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'); 38 $objWriter->writeAttribute('id', (string) $tableRef); 39 $objWriter->writeAttribute('name', $name); 40 $objWriter->writeAttribute('displayName', $table->getName() ?: $name); 41 $objWriter->writeAttribute('ref', $range); 42 $objWriter->writeAttribute('headerRowCount', $table->getShowHeaderRow() ? '1' : '0'); 43 $objWriter->writeAttribute('totalsRowCount', $table->getShowTotalsRow() ? '1' : '0'); 44 45 // Table Boundaries 46 [$rangeStart, $rangeEnd] = Coordinate::rangeBoundaries($table->getRange()); 47 48 // Table Auto Filter 49 if ($table->getShowHeaderRow()) { 50 $objWriter->startElement('autoFilter'); 51 $objWriter->writeAttribute('ref', $range); 52 foreach (range($rangeStart[0], $rangeEnd[0]) as $offset => $columnIndex) { 53 $column = $table->getColumnByOffset($offset); 54 55 if (!$column->getShowFilterButton()) { 56 $objWriter->startElement('filterColumn'); 57 $objWriter->writeAttribute('colId', (string) $offset); 58 $objWriter->writeAttribute('hiddenButton', '1'); 59 $objWriter->endElement(); 60 } 61 } 62 $objWriter->endElement(); 63 } 64 65 // Table Columns 66 $objWriter->startElement('tableColumns'); 67 $objWriter->writeAttribute('count', (string) ($rangeEnd[0] - $rangeStart[0] + 1)); 68 foreach (range($rangeStart[0], $rangeEnd[0]) as $offset => $columnIndex) { 69 $worksheet = $table->getWorksheet(); 70 if (!$worksheet) { 71 continue; 72 } 73 74 $column = $table->getColumnByOffset($offset); 75 $cell = $worksheet->getCellByColumnAndRow($columnIndex, $rangeStart[1]); 76 77 $objWriter->startElement('tableColumn'); 78 $objWriter->writeAttribute('id', (string) ($offset + 1)); 79 $objWriter->writeAttribute('name', $table->getShowHeaderRow() ? $cell->getValue() : 'Column' . ($offset + 1)); 80 81 if ($table->getShowTotalsRow()) { 82 if ($column->getTotalsRowLabel()) { 83 $objWriter->writeAttribute('totalsRowLabel', $column->getTotalsRowLabel()); 84 } 85 if ($column->getTotalsRowFunction()) { 86 $objWriter->writeAttribute('totalsRowFunction', $column->getTotalsRowFunction()); 87 } 88 } 89 if ($column->getColumnFormula()) { 90 $objWriter->writeElement('calculatedColumnFormula', $column->getColumnFormula()); 91 } 92 93 $objWriter->endElement(); 94 } 95 $objWriter->endElement(); 96 97 // Table Styles 98 $objWriter->startElement('tableStyleInfo'); 99 $objWriter->writeAttribute('name', $table->getStyle()->getTheme()); 100 $objWriter->writeAttribute('showFirstColumn', $table->getStyle()->getShowFirstColumn() ? '1' : '0'); 101 $objWriter->writeAttribute('showLastColumn', $table->getStyle()->getShowLastColumn() ? '1' : '0'); 102 $objWriter->writeAttribute('showRowStripes', $table->getStyle()->getShowRowStripes() ? '1' : '0'); 103 $objWriter->writeAttribute('showColumnStripes', $table->getStyle()->getShowColumnStripes() ? '1' : '0'); 104 $objWriter->endElement(); 105 106 $objWriter->endElement(); 107 108 // Return 109 return $objWriter->getData(); 110 } 111 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body