diff --git a/src/Spout/Common/Entity/Row.php b/src/Spout/Common/Entity/Row.php index 0cc49c7..3e60851 100644 --- a/src/Spout/Common/Entity/Row.php +++ b/src/Spout/Common/Entity/Row.php @@ -6,6 +6,12 @@ use Box\Spout\Common\Entity\Style\Style; class Row { + /** + * The extended attributes in this row + * @var string[] + */ + protected $attributes = []; + /** * The cells in this row * @var Cell[] @@ -30,6 +36,26 @@ class Row ->setStyle($style); } + /** + * @return array + */ + public function getAttributes() + { + return $this->attributes; + } + + /** + * @param string $name + * @param $value + * @return Row + */ + public function setAttribute(string $name, $value) + { + $this->attributes[$name] = (string) $value; + + return $this; + } + /** * @return Cell[] $cells */ diff --git a/src/Spout/Writer/XLSX/Manager/WorksheetManager.php b/src/Spout/Writer/XLSX/Manager/WorksheetManager.php index 6025442..694c387 100644 --- a/src/Spout/Writer/XLSX/Manager/WorksheetManager.php +++ b/src/Spout/Writer/XLSX/Manager/WorksheetManager.php @@ -151,7 +151,12 @@ EOD; $rowIndexOneBased = $worksheet->getLastWrittenRowIndex() + 1; $numCells = $row->getNumCells(); - $rowXML = ''; + $defaultAttributes = [ + 'r' => $rowIndexOneBased, + 'spans' => '1:' . $numCells, + ]; + + $rowXML = $this->getRowXML(array_merge($row->getAttributes(), $defaultAttributes)); foreach ($row->getCells() as $columnIndexZeroBased => $cell) { $registeredStyle = $this->applyStyleAndRegister($cell, $rowStyle); @@ -275,6 +280,20 @@ EOD; return $cellXMLFragment; } + /** + * @param array $attributes + * @return string + */ + private function getRowXML(array $attributes) + { + $attributes = array_map(function($key) use ($attributes) + { + return $key . '="' . $this->stringsEscaper->escape($attributes[$key]) . '"'; + }, array_keys($attributes)); + + return ''; + } + /** * {@inheritdoc} */