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:
parent
606f43a086
commit
29c4b1db5f
|
@ -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')) {
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Reference in New Issue