Switch iterators to use foreach structure

This commit is contained in:
MarkBaker 2022-05-06 11:43:10 +02:00
parent 7201ddd088
commit 0dc1e9b07a
1 changed files with 8 additions and 10 deletions

View File

@ -8,6 +8,7 @@ use PhpOffice\PhpSpreadsheet\Cell\DataType;
use PhpOffice\PhpSpreadsheet\Shared\XMLWriter; use PhpOffice\PhpSpreadsheet\Shared\XMLWriter;
use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Worksheet\Row; use PhpOffice\PhpSpreadsheet\Worksheet\Row;
use PhpOffice\PhpSpreadsheet\Worksheet\RowCellIterator;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
use PhpOffice\PhpSpreadsheet\Writer\Exception; use PhpOffice\PhpSpreadsheet\Writer\Exception;
use PhpOffice\PhpSpreadsheet\Writer\Ods; use PhpOffice\PhpSpreadsheet\Writer\Ods;
@ -146,10 +147,10 @@ class Content extends WriterPart
$numberRowsRepeated = self::NUMBER_ROWS_REPEATED_MAX; $numberRowsRepeated = self::NUMBER_ROWS_REPEATED_MAX;
$span_row = 0; $span_row = 0;
$rows = $sheet->getRowIterator(); $rows = $sheet->getRowIterator();
while ($rows->valid()) { foreach ($rows as $row) {
$cellIterator = $row->getCellIterator();
--$numberRowsRepeated; --$numberRowsRepeated;
$row = $rows->current(); if ($cellIterator->valid()) {
if ($row->getCellIterator()->valid()) {
if ($span_row) { if ($span_row) {
$objWriter->startElement('table:table-row'); $objWriter->startElement('table:table-row');
if ($span_row > 1) { if ($span_row > 1) {
@ -168,26 +169,23 @@ class Content extends WriterPart
$span_row = 0; $span_row = 0;
} }
$objWriter->startElement('table:table-row'); $objWriter->startElement('table:table-row');
$this->writeCells($objWriter, $row); $this->writeCells($objWriter, $cellIterator);
$objWriter->endElement(); $objWriter->endElement();
} else { } else {
++$span_row; ++$span_row;
} }
$rows->next();
} }
} }
/** /**
* Write cells of the specified row. * 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; $numberColsRepeated = self::NUMBER_COLS_REPEATED_MAX;
$prevColumn = -1; $prevColumn = -1;
$cells = $row->getCellIterator(); foreach ($cells as $cell) {
while ($cells->valid()) {
/** @var \PhpOffice\PhpSpreadsheet\Cell\Cell $cell */ /** @var \PhpOffice\PhpSpreadsheet\Cell\Cell $cell */
$cell = $cells->current();
$column = Coordinate::columnIndexFromString($cell->getColumn()) - 1; $column = Coordinate::columnIndexFromString($cell->getColumn()) - 1;
$this->writeCellSpan($objWriter, $column, $prevColumn); $this->writeCellSpan($objWriter, $column, $prevColumn);
@ -250,8 +248,8 @@ class Content extends WriterPart
Comment::write($objWriter, $cell); Comment::write($objWriter, $cell);
$objWriter->endElement(); $objWriter->endElement();
$prevColumn = $column; $prevColumn = $column;
$cells->next();
} }
$numberColsRepeated = $numberColsRepeated - $prevColumn - 1; $numberColsRepeated = $numberColsRepeated - $prevColumn - 1;
if ($numberColsRepeated > 0) { if ($numberColsRepeated > 0) {
if ($numberColsRepeated > 1) { if ($numberColsRepeated > 1) {