93 public function has($pCoord)
95 if ($pCoord === $this->currentCoordinate) {
100 return isset($this->index[$pCoord]);
120 public function delete($pCoord):
void
122 if ($pCoord === $this->currentCoordinate && $this->currentCell !==
null) {
123 $this->currentCell->detach();
124 $this->currentCoordinate =
null;
125 $this->currentCell =
null;
126 $this->currentCellIsDirty =
false;
129 unset($this->index[$pCoord]);
132 $this->cache->delete($this->cachePrefix . $pCoord);
142 return array_keys($this->index);
156 sscanf($coord,
'%[A-Z]%d', $column,
$row);
157 $sortKeys[sprintf(
'%09d%3s',
$row, $column)] = $coord;
161 return array_values($sortKeys);
172 $col = [
'A' =>
'1A'];
177 sscanf($coord,
'%[A-Z]%d',
$c,
$r);
179 $col[
$c] = strlen(
$c) .
$c;
183 $highestRow = max(
$row);
184 $highestColumn = substr(max($col), 1);
187 'row' => $highestRow,
188 'column' => $highestColumn,
212 sscanf($this->currentCoordinate,
'%[A-Z]%d', $column,
$row);
227 sscanf($this->currentCoordinate,
'%[A-Z]%d', $column,
$row);
245 return $colRow[
'column'];
253 sscanf($coord,
'%[A-Z]%d',
$c,
$r);
273 if ($column ===
null) {
276 return $colRow[
'row'];
284 sscanf($coord,
'%[A-Z]%d',
$c,
$r);
291 return max($rowList);
301 return uniqid(
'phpspreadsheet.',
true) .
'.';
314 $newCollection = clone $this;
316 $newCollection->parent =
$parent;
317 if (($newCollection->currentCell !==
null) && (is_object($newCollection->currentCell))) {
318 $newCollection->currentCell->attach($this);
322 $oldKeys = $newCollection->getAllCacheKeys();
323 $oldValues = $newCollection->cache->getMultiple($oldKeys);
325 $oldCachePrefix = $newCollection->cachePrefix;
328 $newCollection->cachePrefix = $newCollection->getUniqueID();
329 foreach ($oldValues as $oldKey => $value) {
330 $newValues[str_replace($oldCachePrefix, $newCollection->cachePrefix, $oldKey)] = clone $value;
334 $stored = $newCollection->cache->setMultiple($newValues);
336 $newCollection->__destruct();
338 throw new PhpSpreadsheetException(
'Failed to copy cells in cache');
341 return $newCollection;
355 sscanf($coord,
'%[A-Z]%d',
$c,
$r);
357 $this->
delete($coord);
373 sscanf($coord,
'%[A-Z]%d',
$c,
$r);
375 $this->
delete($coord);
386 if ($this->currentCellIsDirty && !empty($this->currentCoordinate)) {
387 $this->currentCell->detach();
389 $stored = $this->cache->set($this->cachePrefix . $this->currentCoordinate, $this->currentCell);
393 throw new PhpSpreadsheetException(
"Failed to store cell {$this->currentCoordinate} in cache");
395 $this->currentCellIsDirty =
false;
398 $this->currentCoordinate =
null;
399 $this->currentCell =
null;
412 if ($pCoord !== $this->currentCoordinate) {
415 $this->index[$pCoord] =
true;
417 $this->currentCoordinate = $pCoord;
418 $this->currentCell = $cell;
419 $this->currentCellIsDirty =
true;
431 public function get($pCoord)
433 if ($pCoord === $this->currentCoordinate) {
439 if (!$this->
has($pCoord)) {
444 $cell = $this->cache->get($this->cachePrefix . $pCoord);
445 if ($cell ===
null) {
446 throw new PhpSpreadsheetException(
"Cell entry {$pCoord} no longer exists in cache. This probably means that the cache was cleared by someone else.");
450 $this->currentCoordinate = $pCoord;
451 $this->currentCell = $cell;
453 $this->currentCell->attach($this);
464 if ($this->currentCell !==
null) {
465 $this->currentCell->detach();
466 $this->currentCell =
null;
467 $this->currentCoordinate =
null;
476 $this->parent =
null;
495 yield $this->cachePrefix . $coordinate;
An exception for terminatinating execution or to throw for unit testing.
getCoordinate()
Get cell coordinate.
Helper class to manipulate cell coordinates.
static columnIndexFromString($pString)
Column index from string.
static stringFromColumnIndex($columnIndex)
String from column index.
add($pCoord, Cell $cell)
Add or update a cell identified by its coordinate into the collection.
getCoordinates()
Get a list of all cell coordinates currently held in the collection.
getHighestRowAndColumn()
Get highest worksheet column and highest row that have cell records.
has($pCoord)
Whether the collection holds a cell for the given coordinate.
update(Cell $cell)
Add or update a cell in the collection.
unsetWorksheetCells()
Clear the cell collection and disconnect from our parent.
cloneCellCollection(Worksheet $parent)
Clone the cell collection.
getHighestColumn($row=null)
Get highest worksheet column.
getHighestRow($column=null)
Get highest worksheet row.
storeCurrentCell()
Store cell data in cache for the current cell object if it's "dirty", and the 'nullify' the current c...
getAllCacheKeys()
Returns all known cache keys.
removeRow($row)
Remove a row, deleting all cells in that row.
getSortedCoordinates()
Get a sorted list of all cell coordinates currently held in the collection by row and column.
removeColumn($column)
Remove a column, deleting all cells in that column.
getUniqueID()
Generate a unique ID for cache referencing.
getParent()
Return the parent worksheet for this cell collection.
getCurrentRow()
Return the row coordinate of the currently active cell object.
__construct(Worksheet $parent, CacheInterface $cache)
Initialise this new cell collection.
__destruct()
Destroy this cell collection.
getCurrentCoordinate()
Return the cell coordinate of the currently active cell object.
getCurrentColumn()
Return the column coordinate of the currently active cell object.