diff --git a/src/PhpSpreadsheet/Writer/Html.php b/src/PhpSpreadsheet/Writer/Html.php index 629e3c0c..555f4dc7 100644 --- a/src/PhpSpreadsheet/Writer/Html.php +++ b/src/PhpSpreadsheet/Writer/Html.php @@ -477,12 +477,8 @@ class Html extends BaseWriter $column = $minCol; while ($column <= $maxCol) { // Cell exists? - if ($sheet->cellExistsByColumnAndRow($column, $row)) { - $rowData[$column] = Coordinate::stringFromColumnIndex($column) . $row; - } else { - $rowData[$column] = ''; - } - ++$column; + $cellAddress = Coordinate::stringFromColumnIndex($column) . $row; + $rowData[$column++] = ($sheet->getCellCollection()->has($cellAddress)) ? $cellAddress : ''; } $html .= $this->generateRow($sheet, $rowData, $row - 1, $cellType); } @@ -1232,7 +1228,7 @@ class Html extends BaseWriter private function generateRowCellCss(Worksheet $worksheet, $cellAddress, $row, $columnNumber) { - $cell = ($cellAddress > '') ? $worksheet->getCell($cellAddress) : ''; + $cell = ($cellAddress > '') ? $worksheet->getCellCollection()->get($cellAddress) : ''; $coordinate = Coordinate::stringFromColumnIndex($columnNumber + 1) . ($row + 1); if (!$this->useInlineCss) { $cssClass = 'column' . $columnNumber; diff --git a/src/PhpSpreadsheet/Writer/Ods/Content.php b/src/PhpSpreadsheet/Writer/Ods/Content.php index 5d227c84..7e02fc51 100644 --- a/src/PhpSpreadsheet/Writer/Ods/Content.php +++ b/src/PhpSpreadsheet/Writer/Ods/Content.php @@ -8,6 +8,7 @@ use PhpOffice\PhpSpreadsheet\Cell\DataType; use PhpOffice\PhpSpreadsheet\Shared\XMLWriter; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Worksheet\Row; +use PhpOffice\PhpSpreadsheet\Worksheet\RowCellIterator; use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; use PhpOffice\PhpSpreadsheet\Writer\Exception; use PhpOffice\PhpSpreadsheet\Writer\Ods; @@ -146,10 +147,10 @@ class Content extends WriterPart $numberRowsRepeated = self::NUMBER_ROWS_REPEATED_MAX; $span_row = 0; $rows = $sheet->getRowIterator(); - while ($rows->valid()) { + foreach ($rows as $row) { + $cellIterator = $row->getCellIterator(); --$numberRowsRepeated; - $row = $rows->current(); - if ($row->getCellIterator()->valid()) { + if ($cellIterator->valid()) { if ($span_row) { $objWriter->startElement('table:table-row'); if ($span_row > 1) { @@ -168,26 +169,23 @@ class Content extends WriterPart $span_row = 0; } $objWriter->startElement('table:table-row'); - $this->writeCells($objWriter, $row); + $this->writeCells($objWriter, $cellIterator); $objWriter->endElement(); } else { ++$span_row; } - $rows->next(); } } /** * Write cells of the specified row. */ - private function writeCells(XMLWriter $objWriter, Row $row): void + private function writeCells(XMLWriter $objWriter, RowCellIterator $cells): void { $numberColsRepeated = self::NUMBER_COLS_REPEATED_MAX; $prevColumn = -1; - $cells = $row->getCellIterator(); - while ($cells->valid()) { + foreach ($cells as $cell) { /** @var \PhpOffice\PhpSpreadsheet\Cell\Cell $cell */ - $cell = $cells->current(); $column = Coordinate::columnIndexFromString($cell->getColumn()) - 1; $this->writeCellSpan($objWriter, $column, $prevColumn); @@ -250,8 +248,8 @@ class Content extends WriterPart Comment::write($objWriter, $cell); $objWriter->endElement(); $prevColumn = $column; - $cells->next(); } + $numberColsRepeated = $numberColsRepeated - $prevColumn - 1; if ($numberColsRepeated > 0) { if ($numberColsRepeated > 1) {