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
This commit is contained in:
Mark Baker 2010-11-22 18:00:22 +00:00
parent 606f43a086
commit 29c4b1db5f
3 changed files with 157 additions and 141 deletions

View File

@ -3222,8 +3222,10 @@ class PHPExcel_Calculation {
// print_r($args); // print_r($args);
// echo '<br />'; // echo '<br />';
if ($functionName != 'MKMATRIX') { if ($functionName != 'MKMATRIX') {
krsort($argArrayVals); if ($this->writeDebugLog) {
$this->_writeDebug('Evaluating '. self::_localeFunc($functionName).'( '.implode(self::$_localeArgumentSeparator.' ',$argArrayVals).' )'); 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 // Process each argument in turn, building the return value as an array
// if (($argCount == 1) && (is_array($args[1])) && ($functionName != 'MKMATRIX')) { // if (($argCount == 1) && (is_array($args[1])) && ($functionName != 'MKMATRIX')) {

View File

@ -192,6 +192,18 @@ class PHPExcel_Cell
return $this->_value; 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 * Set cell value
* *
@ -486,7 +498,7 @@ class PHPExcel_Cell
} elseif ($pCoordinateString == '') { } elseif ($pCoordinateString == '') {
throw new Exception('Cell coordinate can not be zero-length string.'); throw new Exception('Cell coordinate can not be zero-length string.');
} else { } else {
throw new Exception('Invalid cell coordinate.'); throw new Exception('Invalid cell coordinate '.$pCoordinateString);
} }
} }

View File

@ -19,10 +19,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel * @package PHPExcel
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/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 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE## * @version ##VERSION##, ##DATE##
*/ */
@ -30,161 +30,163 @@
* PHPExcel_HashTable * PHPExcel_HashTable
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel * @package PHPExcel
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_HashTable class PHPExcel_HashTable
{ {
/** /**
* HashTable elements * HashTable elements
* *
* @var array * @var array
*/ */
public $_items = array(); public $_items = array();
/** /**
* HashTable key map * HashTable key map
* *
* @var array * @var array
*/ */
public $_keyMap = array(); public $_keyMap = array();
/** /**
* Create a new PHPExcel_HashTable * Create a new PHPExcel_HashTable
* *
* @param PHPExcel_IComparable[] $pSource Optional source array to create HashTable from * @param PHPExcel_IComparable[] $pSource Optional source array to create HashTable from
* @throws Exception * @throws Exception
*/ */
public function __construct($pSource = null) public function __construct($pSource = null)
{ {
if (!is_null($pSource)) { if (!is_null($pSource)) {
// Create HashTable // Create HashTable
$this->addFromSource($pSource); $this->addFromSource($pSource);
} }
} }
/** /**
* Add HashTable items from source * Add HashTable items from source
* *
* @param PHPExcel_IComparable[] $pSource Source array to create HashTable from * @param PHPExcel_IComparable[] $pSource Source array to create HashTable from
* @throws Exception * @throws Exception
*/ */
public function addFromSource($pSource = null) { public function addFromSource($pSource = null) {
// Check if an array was passed // Check if an array was passed
if ($pSource == null) { if ($pSource == null) {
return; return;
} else if (!is_array($pSource)) { } else if (!is_array($pSource)) {
throw new Exception('Invalid array parameter passed.'); throw new Exception('Invalid array parameter passed.');
} }
foreach ($pSource as $item) { foreach ($pSource as $item) {
$this->add($item); $this->add($item);
} }
} }
/** /**
* Add HashTable item * Add HashTable item
* *
* @param PHPExcel_IComparable $pSource Item to add * @param PHPExcel_IComparable $pSource Item to add
* @throws Exception * @throws Exception
*/ */
public function add(PHPExcel_IComparable $pSource = null) { public function add(PHPExcel_IComparable $pSource = null) {
if (!isset($this->_items[ $pSource->getHashCode() ])) { $hash = $pSource->getHashCode();
$this->_items[ $pSource->getHashCode() ] = $pSource; if (!isset($this->_items[$hash])) {
$this->_keyMap[ count($this->_items) - 1 ] = $pSource->getHashCode(); $this->_items[$hash] = $pSource;
} $this->_keyMap[count($this->_items) - 1] = $hash;
} }
}
/** /**
* Remove HashTable item * Remove HashTable item
* *
* @param PHPExcel_IComparable $pSource Item to remove * @param PHPExcel_IComparable $pSource Item to remove
* @throws Exception * @throws Exception
*/ */
public function remove(PHPExcel_IComparable $pSource = null) { public function remove(PHPExcel_IComparable $pSource = null) {
if (isset($this->_items[ $pSource->getHashCode() ])) { $hash = $pSource->getHashCode();
unset($this->_items[ $pSource->getHashCode() ]); if (isset($this->_items[$hash])) {
unset($this->_items[$hash]);
$deleteKey = -1; $deleteKey = -1;
foreach ($this->_keyMap as $key => $value) { foreach ($this->_keyMap as $key => $value) {
if ($deleteKey >= 0) { if ($deleteKey >= 0) {
$this->_keyMap[$key - 1] = $value; $this->_keyMap[$key - 1] = $value;
} }
if ($value == $pSource->getHashCode()) { if ($value == $hash) {
$deleteKey = $key; $deleteKey = $key;
} }
} }
unset($this->_keyMap[ count($this->_keyMap) - 1 ]); unset($this->_keyMap[count($this->_keyMap) - 1]);
} }
} }
/** /**
* Clear HashTable * Clear HashTable
* *
*/ */
public function clear() { public function clear() {
$this->_items = array(); $this->_items = array();
$this->_keyMap = array(); $this->_keyMap = array();
} }
/** /**
* Count * Count
* *
* @return int * @return int
*/ */
public function count() { public function count() {
return count($this->_items); return count($this->_items);
} }
/** /**
* Get index for hash code * Get index for hash code
* *
* @param string $pHashCode * @param string $pHashCode
* @return int Index * @return int Index
*/ */
public function getIndexForHashCode($pHashCode = '') { public function getIndexForHashCode($pHashCode = '') {
return array_search($pHashCode, $this->_keyMap); return array_search($pHashCode, $this->_keyMap);
} }
/** /**
* Get by index * Get by index
* *
* @param int $pIndex * @param int $pIndex
* @return PHPExcel_IComparable * @return PHPExcel_IComparable
* *
*/ */
public function getByIndex($pIndex = 0) { public function getByIndex($pIndex = 0) {
if (isset($this->_keyMap[$pIndex])) { if (isset($this->_keyMap[$pIndex])) {
return $this->getByHashCode( $this->_keyMap[$pIndex] ); return $this->getByHashCode( $this->_keyMap[$pIndex] );
} }
return null; return null;
} }
/** /**
* Get by hashcode * Get by hashcode
* *
* @param string $pHashCode * @param string $pHashCode
* @return PHPExcel_IComparable * @return PHPExcel_IComparable
* *
*/ */
public function getByHashCode($pHashCode = '') { public function getByHashCode($pHashCode = '') {
if (isset($this->_items[$pHashCode])) { if (isset($this->_items[$pHashCode])) {
return $this->_items[$pHashCode]; return $this->_items[$pHashCode];
} }
return null; return null;
} }
/** /**
* HashTable to array * HashTable to array
* *
* @return PHPExcel_IComparable[] * @return PHPExcel_IComparable[]
*/ */
public function toArray() { public function toArray() {
return $this->_items; return $this->_items;
} }
/** /**
* Implement PHP __clone to create a deep clone, not just a shallow copy. * Implement PHP __clone to create a deep clone, not just a shallow copy.