From 75160b12821f7f4299cce7f0b69c83c1502ae071 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anton=20Luka=20=C5=A0ijanec?= Date: Mon, 27 May 2024 13:08:29 +0200 Subject: 2024-02-19 upstream --- .../PhpSpreadsheet/Worksheet/RowCellIterator.php | 195 +++++++++++++++++++++ 1 file changed, 195 insertions(+) create mode 100644 vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/RowCellIterator.php (limited to 'vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/RowCellIterator.php') diff --git a/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/RowCellIterator.php b/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/RowCellIterator.php new file mode 100644 index 0000000..1ac758a --- /dev/null +++ b/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/RowCellIterator.php @@ -0,0 +1,195 @@ +worksheet = $worksheet; + $this->rowIndex = $rowIndex; + $this->resetEnd($endColumn); + $this->resetStart($startColumn); + } + + /** + * (Re)Set the start column and the current column pointer. + * + * @param string $startColumn The column address at which to start iterating + * + * @return $this + */ + public function resetStart($startColumn = 'A') + { + $this->startColumnIndex = Coordinate::columnIndexFromString($startColumn); + $this->adjustForExistingOnlyRange(); + $this->seek(Coordinate::stringFromColumnIndex($this->startColumnIndex)); + + return $this; + } + + /** + * (Re)Set the end column. + * + * @param string $endColumn The column address at which to stop iterating + * + * @return $this + */ + public function resetEnd($endColumn = null) + { + $endColumn = $endColumn ? $endColumn : $this->worksheet->getHighestColumn(); + $this->endColumnIndex = Coordinate::columnIndexFromString($endColumn); + $this->adjustForExistingOnlyRange(); + + return $this; + } + + /** + * Set the column pointer to the selected column. + * + * @param string $column The column address to set the current pointer at + * + * @return $this + */ + public function seek($column = 'A') + { + $column = Coordinate::columnIndexFromString($column); + if (($column < $this->startColumnIndex) || ($column > $this->endColumnIndex)) { + throw new PhpSpreadsheetException("Column $column is out of range ({$this->startColumnIndex} - {$this->endColumnIndex})"); + } elseif ($this->onlyExistingCells && !($this->worksheet->cellExistsByColumnAndRow($column, $this->rowIndex))) { + throw new PhpSpreadsheetException('In "IterateOnlyExistingCells" mode and Cell does not exist'); + } + $this->currentColumnIndex = $column; + + return $this; + } + + /** + * Rewind the iterator to the starting column. + */ + public function rewind(): void + { + $this->currentColumnIndex = $this->startColumnIndex; + } + + /** + * Return the current cell in this worksheet row. + * + * @return \PhpOffice\PhpSpreadsheet\Cell\Cell + */ + public function current() + { + return $this->worksheet->getCellByColumnAndRow($this->currentColumnIndex, $this->rowIndex); + } + + /** + * Return the current iterator key. + * + * @return string + */ + public function key() + { + return Coordinate::stringFromColumnIndex($this->currentColumnIndex); + } + + /** + * Set the iterator to its next value. + */ + public function next(): void + { + do { + ++$this->currentColumnIndex; + } while (($this->onlyExistingCells) && (!$this->worksheet->cellExistsByColumnAndRow($this->currentColumnIndex, $this->rowIndex)) && ($this->currentColumnIndex <= $this->endColumnIndex)); + } + + /** + * Set the iterator to its previous value. + */ + public function prev(): void + { + do { + --$this->currentColumnIndex; + } while (($this->onlyExistingCells) && (!$this->worksheet->cellExistsByColumnAndRow($this->currentColumnIndex, $this->rowIndex)) && ($this->currentColumnIndex >= $this->startColumnIndex)); + } + + /** + * Indicate if more columns exist in the worksheet range of columns that we're iterating. + * + * @return bool + */ + public function valid() + { + return $this->currentColumnIndex <= $this->endColumnIndex && $this->currentColumnIndex >= $this->startColumnIndex; + } + + /** + * Return the current iterator position. + * + * @return int + */ + public function getCurrentColumnIndex() + { + return $this->currentColumnIndex; + } + + /** + * Validate start/end values for "IterateOnlyExistingCells" mode, and adjust if necessary. + */ + protected function adjustForExistingOnlyRange(): void + { + if ($this->onlyExistingCells) { + while ((!$this->worksheet->cellExistsByColumnAndRow($this->startColumnIndex, $this->rowIndex)) && ($this->startColumnIndex <= $this->endColumnIndex)) { + ++$this->startColumnIndex; + } + if ($this->startColumnIndex > $this->endColumnIndex) { + throw new PhpSpreadsheetException('No cells exist within the specified range'); + } + while ((!$this->worksheet->cellExistsByColumnAndRow($this->endColumnIndex, $this->rowIndex)) && ($this->endColumnIndex >= $this->startColumnIndex)) { + --$this->endColumnIndex; + } + if ($this->endColumnIndex < $this->startColumnIndex) { + throw new PhpSpreadsheetException('No cells exist within the specified range'); + } + } + } +} -- cgit v1.2.3