From 13a98ef631b3d2d4c1a251477c56885f58e3ab9b Mon Sep 17 00:00:00 2001 From: Mark Baker Date: Sat, 9 Nov 2013 00:40:59 +0000 Subject: [PATCH] General: (dresenhista) Work Item GH-242 - Functionality to getHighestRow() for a specified column, and getHighestColumn() for a specified row --- .../CachedObjectStorage/CacheBase.php | 47 +++++++++++++++---- changelog.txt | 1 + 2 files changed, 39 insertions(+), 9 deletions(-) diff --git a/Classes/PHPExcel/CachedObjectStorage/CacheBase.php b/Classes/PHPExcel/CachedObjectStorage/CacheBase.php index b04f44a4..81afb7ac 100644 --- a/Classes/PHPExcel/CachedObjectStorage/CacheBase.php +++ b/Classes/PHPExcel/CachedObjectStorage/CacheBase.php @@ -254,23 +254,52 @@ abstract class PHPExcel_CachedObjectStorage_CacheBase { /** * Get highest worksheet column * - * @return string Highest column name + * @param string $row Return the highest column for the specified row, + * or the highest column of any row if no row number is passed + * @return string Highest column name */ - public function getHighestColumn() + public function getHighestColumn($row = null) { - $colRow = $this->getHighestRowAndColumn(); - return $colRow['column']; - } + if ($row == null) { + $colRow = $this->getHighestRowAndColumn(); + return $colRow['column']; + } + + $columnList = array(1); + foreach ($this->getCellList() as $coord) { + sscanf($coord,'%[A-Z]%d', $c, $r); + if ($r != $row) { + continue; + } + $columnList[] = PHPExcel_Cell::columnIndexFromString($c); + } + return PHPExcel_Cell::stringFromColumnIndex(max($columnList) - 1); + } /** * Get highest worksheet row * - * @return int Highest row number + * @param string $column Return the highest row for the specified column, + * or the highest row of any column if no column letter is passed + * @return int Highest row number */ - public function getHighestRow() + public function getHighestRow($column = null) { - $colRow = $this->getHighestRowAndColumn(); - return $colRow['row']; + if ($column == null) { + $colRow = $this->getHighestRowAndColumn(); + return $colRow['row']; + } + + $rowList = array(0); + foreach ($this->getCellList() as $coord) { + sscanf($coord,'%[A-Z]%d', $c, $r); + if ($c != $column) { + continue; + } + $rowList[] = $r; + } + + return max($rowList); } diff --git a/changelog.txt b/changelog.txt index 471a8cda..7c322733 100644 --- a/changelog.txt +++ b/changelog.txt @@ -41,6 +41,7 @@ Fixed in develop branch for release v1.8.0: - General: (MBaker) - Fix to calculation properties for Excel2007 so that the opening application will only recalculate on load if it's actually required - General: (MBaker) - Modified Excel2007 Writer to default preCalculateFormulas to false Note that autosize columns will still recalculate affected formulae internally +- General: (dresenhista) Work Item GH-242 - Functionality to getHighestRow() for a specified column, and getHighestColumn() for a specified row Fixed in develop branch for release v1.7.9: