From 29c4b1db5fe93776d9c34a1b9414dab4e2bd006b Mon Sep 17 00:00:00 2001 From: Mark Baker Date: Mon, 22 Nov 2010 18:00:22 +0000 Subject: [PATCH] Some general performance tweaks, and some specific to the Excel2007 Writer git-svn-id: https://phpexcel.svn.codeplex.com/svn/trunk@64159 2327b42d-5241-43d6-9e2a-de5ac946f064 --- Classes/PHPExcel/Calculation.php | 6 +- Classes/PHPExcel/Cell.php | 14 +- Classes/PHPExcel/HashTable.php | 278 ++++++++++++++++--------------- 3 files changed, 157 insertions(+), 141 deletions(-) diff --git a/Classes/PHPExcel/Calculation.php b/Classes/PHPExcel/Calculation.php index a5e3efb7..d47a872f 100644 --- a/Classes/PHPExcel/Calculation.php +++ b/Classes/PHPExcel/Calculation.php @@ -3222,8 +3222,10 @@ class PHPExcel_Calculation { // print_r($args); // echo '
'; if ($functionName != 'MKMATRIX') { - krsort($argArrayVals); - $this->_writeDebug('Evaluating '. self::_localeFunc($functionName).'( '.implode(self::$_localeArgumentSeparator.' ',$argArrayVals).' )'); + if ($this->writeDebugLog) { + krsort($argArrayVals); + $this->_writeDebug('Evaluating '. self::_localeFunc($functionName).'( '.implode(self::$_localeArgumentSeparator.' ',PHPExcel_Calculation_Functions::flattenArray($argArrayVals)).' )'); + } } // Process each argument in turn, building the return value as an array // if (($argCount == 1) && (is_array($args[1])) && ($functionName != 'MKMATRIX')) { diff --git a/Classes/PHPExcel/Cell.php b/Classes/PHPExcel/Cell.php index 00be5427..9c76e6c0 100644 --- a/Classes/PHPExcel/Cell.php +++ b/Classes/PHPExcel/Cell.php @@ -192,6 +192,18 @@ class PHPExcel_Cell return $this->_value; } + /** + * Get cell value with formatting + * + * @return string + */ + public function getFormattedValue() + { + return PHPExcel_Style_NumberFormat::toFormattedString( $this->getCalculatedValue(), + $this->_parent->getParent()->getCellXfByIndex($this->getXfIndex())->getNumberFormat()->getFormatCode() + ); + } + /** * Set cell value * @@ -486,7 +498,7 @@ class PHPExcel_Cell } elseif ($pCoordinateString == '') { throw new Exception('Cell coordinate can not be zero-length string.'); } else { - throw new Exception('Invalid cell coordinate.'); + throw new Exception('Invalid cell coordinate '.$pCoordinateString); } } diff --git a/Classes/PHPExcel/HashTable.php b/Classes/PHPExcel/HashTable.php index 23824d85..2ff05941 100644 --- a/Classes/PHPExcel/HashTable.php +++ b/Classes/PHPExcel/HashTable.php @@ -19,10 +19,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * @category PHPExcel - * @package PHPExcel + * @package PHPExcel * @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel) - * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL - * @version ##VERSION##, ##DATE## + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version ##VERSION##, ##DATE## */ @@ -30,161 +30,163 @@ * PHPExcel_HashTable * * @category PHPExcel - * @package PHPExcel + * @package PHPExcel * @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel) */ class PHPExcel_HashTable { - /** - * HashTable elements - * - * @var array - */ - public $_items = array(); + /** + * HashTable elements + * + * @var array + */ + public $_items = array(); - /** - * HashTable key map - * - * @var array - */ - public $_keyMap = array(); + /** + * HashTable key map + * + * @var array + */ + public $_keyMap = array(); - /** - * Create a new PHPExcel_HashTable - * - * @param PHPExcel_IComparable[] $pSource Optional source array to create HashTable from - * @throws Exception - */ - public function __construct($pSource = null) - { - if (!is_null($pSource)) { - // Create HashTable - $this->addFromSource($pSource); - } - } + /** + * Create a new PHPExcel_HashTable + * + * @param PHPExcel_IComparable[] $pSource Optional source array to create HashTable from + * @throws Exception + */ + public function __construct($pSource = null) + { + if (!is_null($pSource)) { + // Create HashTable + $this->addFromSource($pSource); + } + } - /** - * Add HashTable items from source - * - * @param PHPExcel_IComparable[] $pSource Source array to create HashTable from - * @throws Exception - */ - public function addFromSource($pSource = null) { - // Check if an array was passed - if ($pSource == null) { - return; - } else if (!is_array($pSource)) { - throw new Exception('Invalid array parameter passed.'); - } + /** + * Add HashTable items from source + * + * @param PHPExcel_IComparable[] $pSource Source array to create HashTable from + * @throws Exception + */ + public function addFromSource($pSource = null) { + // Check if an array was passed + if ($pSource == null) { + return; + } else if (!is_array($pSource)) { + throw new Exception('Invalid array parameter passed.'); + } - foreach ($pSource as $item) { - $this->add($item); - } - } + foreach ($pSource as $item) { + $this->add($item); + } + } - /** - * Add HashTable item - * - * @param PHPExcel_IComparable $pSource Item to add - * @throws Exception - */ - public function add(PHPExcel_IComparable $pSource = null) { - if (!isset($this->_items[ $pSource->getHashCode() ])) { - $this->_items[ $pSource->getHashCode() ] = $pSource; - $this->_keyMap[ count($this->_items) - 1 ] = $pSource->getHashCode(); - } - } + /** + * Add HashTable item + * + * @param PHPExcel_IComparable $pSource Item to add + * @throws Exception + */ + public function add(PHPExcel_IComparable $pSource = null) { + $hash = $pSource->getHashCode(); + if (!isset($this->_items[$hash])) { + $this->_items[$hash] = $pSource; + $this->_keyMap[count($this->_items) - 1] = $hash; + } + } - /** - * Remove HashTable item - * - * @param PHPExcel_IComparable $pSource Item to remove - * @throws Exception - */ - public function remove(PHPExcel_IComparable $pSource = null) { - if (isset($this->_items[ $pSource->getHashCode() ])) { - unset($this->_items[ $pSource->getHashCode() ]); + /** + * Remove HashTable item + * + * @param PHPExcel_IComparable $pSource Item to remove + * @throws Exception + */ + public function remove(PHPExcel_IComparable $pSource = null) { + $hash = $pSource->getHashCode(); + if (isset($this->_items[$hash])) { + unset($this->_items[$hash]); - $deleteKey = -1; - foreach ($this->_keyMap as $key => $value) { - if ($deleteKey >= 0) { - $this->_keyMap[$key - 1] = $value; - } + $deleteKey = -1; + foreach ($this->_keyMap as $key => $value) { + if ($deleteKey >= 0) { + $this->_keyMap[$key - 1] = $value; + } - if ($value == $pSource->getHashCode()) { - $deleteKey = $key; - } - } - unset($this->_keyMap[ count($this->_keyMap) - 1 ]); - } - } + if ($value == $hash) { + $deleteKey = $key; + } + } + unset($this->_keyMap[count($this->_keyMap) - 1]); + } + } - /** - * Clear HashTable - * - */ - public function clear() { - $this->_items = array(); - $this->_keyMap = array(); - } + /** + * Clear HashTable + * + */ + public function clear() { + $this->_items = array(); + $this->_keyMap = array(); + } - /** - * Count - * - * @return int - */ - public function count() { - return count($this->_items); - } + /** + * Count + * + * @return int + */ + public function count() { + return count($this->_items); + } - /** - * Get index for hash code - * - * @param string $pHashCode - * @return int Index - */ - public function getIndexForHashCode($pHashCode = '') { - return array_search($pHashCode, $this->_keyMap); - } + /** + * Get index for hash code + * + * @param string $pHashCode + * @return int Index + */ + public function getIndexForHashCode($pHashCode = '') { + return array_search($pHashCode, $this->_keyMap); + } - /** - * Get by index - * - * @param int $pIndex - * @return PHPExcel_IComparable - * - */ - public function getByIndex($pIndex = 0) { - if (isset($this->_keyMap[$pIndex])) { - return $this->getByHashCode( $this->_keyMap[$pIndex] ); - } + /** + * Get by index + * + * @param int $pIndex + * @return PHPExcel_IComparable + * + */ + public function getByIndex($pIndex = 0) { + if (isset($this->_keyMap[$pIndex])) { + return $this->getByHashCode( $this->_keyMap[$pIndex] ); + } - return null; - } + return null; + } - /** - * Get by hashcode - * - * @param string $pHashCode - * @return PHPExcel_IComparable - * - */ - public function getByHashCode($pHashCode = '') { - if (isset($this->_items[$pHashCode])) { - return $this->_items[$pHashCode]; - } + /** + * Get by hashcode + * + * @param string $pHashCode + * @return PHPExcel_IComparable + * + */ + public function getByHashCode($pHashCode = '') { + if (isset($this->_items[$pHashCode])) { + return $this->_items[$pHashCode]; + } - return null; - } + return null; + } - /** - * HashTable to array - * - * @return PHPExcel_IComparable[] - */ - public function toArray() { - return $this->_items; - } + /** + * HashTable to array + * + * @return PHPExcel_IComparable[] + */ + public function toArray() { + return $this->_items; + } /** * Implement PHP __clone to create a deep clone, not just a shallow copy.