Files
crm.twinpol.com/include/PHPExcel/PHPExcel/Calculation.php
2025-05-12 15:44:39 +00:00

904 lines
71 KiB
PHP
Executable File

<?php
/**
* PHPExcel
*
* Copyright (c) 2006 - 2009 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2009 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.6.6, 2009-03-02
*/
/** PHPExcel_Worksheet */
require_once 'PHPExcel/Worksheet.php';
/** PHPExcel_Cell */
require_once 'PHPExcel/Cell.php';
/** PHPExcel_Cell_DataType */
require_once 'PHPExcel/Cell/DataType.php';
/** PHPExcel_RichText */
require_once 'PHPExcel/RichText.php';
/** PHPExcel_NamedRange */
require_once 'PHPExcel/NamedRange.php';
/** PHPExcel_Calculation_FormulaParser */
require_once 'PHPExcel/Calculation/FormulaParser.php';
/** PHPExcel_Calculation_FormulaToken */
require_once 'PHPExcel/Calculation/FormulaToken.php';
/** PHPExcel_Calculation_Functions */
require_once 'PHPExcel/Calculation/Functions.php';
/** PHPExcel_Calculation_Function */
require_once 'PHPExcel/Calculation/Function.php';
/** PHPExcel_Calculation_ExceptionHandler */
require_once 'PHPExcel/Calculation/ExceptionHandler.php';
/**
* PHPExcel_Calculation (Singleton)
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2009 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_Calculation {
/** constants */
const RETURN_ARRAY_AS_VALUE = 'value';
const RETURN_ARRAY_AS_ARRAY = 'array';
private static $returnArrayAsType = self::RETURN_ARRAY_AS_ARRAY;
/**
* Function mappings (from Excel to PHPExcel)
*
* @var array
*/
private $_functionMappings = null;
/**
* Calculation cache
*
* @var array
*/
private $_calculationCache = array ( );
/**
* Calculation cache enabled
*
* @var boolean
*/
private $_calculationCacheEnabled = true;
/**
* Calculation cache expiration time
*
* @var float
*/
private $_calculationCacheExpirationTime = 0.01;
/**
* Instance of this class
*
* @var PHPExcel_Calculation
*/
private static $_instance;
/**
* Get an instance of this class
*
* @return PHPExcel_Calculation
*/
public static function getInstance() {
if (! isset ( self::$_instance ) || is_null ( self::$_instance )) {
self::$_instance = new PHPExcel_Calculation ( );
}
return self::$_instance;
}
/**
* Set the Array Return Type (Array or Value of first element in the array)
*
* @param string $returnType Array return type
* @return boolean Success or failure
*/
public static function setArrayReturnType($returnType) {
if (($returnType == self::RETURN_ARRAY_AS_VALUE) ||
($returnType == self::RETURN_ARRAY_AS_ARRAY)) {
self::$returnArrayAsType = $returnType;
return True;
}
return False;
} // function setExcelCalendar()
/**
* Return the Array Return Type (Array or Value of first element in the array)
*
* @return string $returnType Array return type
*/
public static function getArrayReturnType() {
return self::$returnArrayAsType;
} // function getExcelCalendar()
/**
* Create a new PHPExcel_Calculation
*/
protected function __construct() {
// Assign function mappings
if (is_null($this->_functionMappings)) {
$this->_functionMappings = array(
'ABS' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'ABS', 'abs'),
'ACCRINT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'ACCRINT', 'PHPExcel_Calculation_Functions::DUMMY'),
'ACCRINTM' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'ACCRINTM', 'PHPExcel_Calculation_Functions::ACCRINTM'),
'ACOS' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'ACOS', 'acos'),
'ACOSH' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'ACOSH', 'acosh'),
'ADDRESS' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, 'ADDRESS', 'PHPExcel_Calculation_Functions::CELL_ADDRESS'),
'AMORDEGRC' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'AMORDEGRC', 'PHPExcel_Calculation_Functions::DUMMY'),
'AMORLINC' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'AMORLINC', 'PHPExcel_Calculation_Functions::DUMMY'),
'AND' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOGICAL, 'AND', 'PHPExcel_Calculation_Functions::LOGICAL_AND'),
'AREAS' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, 'AREAS', 'PHPExcel_Calculation_Functions::DUMMY'),
'ASC' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'ASC', 'PHPExcel_Calculation_Functions::DUMMY'),
'ASIN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'ASIN', 'asin'),
'ASINH' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'ASINH', 'asinh'),
'ATAN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'ATAN', 'atan'),
'ATAN2' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'ATAN2', 'PHPExcel_Calculation_Functions::REVERSE_ATAN2'),
'ATANH' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'ATANH', 'atanh'),
'AVEDEV' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'AVEDEV', 'PHPExcel_Calculation_Functions::AVEDEV'),
'AVERAGE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'AVERAGE', 'PHPExcel_Calculation_Functions::AVERAGE'),
'AVERAGEA' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'AVERAGEA', 'PHPExcel_Calculation_Functions::AVERAGEA'),
'AVERAGEIF' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'AVERAGEIF', 'PHPExcel_Calculation_Functions::DUMMY'),
'AVERAGEIFS' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'AVERAGEIFS', 'PHPExcel_Calculation_Functions::DUMMY'),
'BAHTTEXT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'BAHTTEXT', 'PHPExcel_Calculation_Functions::DUMMY'),
'BESSELI' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'BESSELI', 'PHPExcel_Calculation_Functions::BESSELI'),
'BESSELJ' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'BESSELJ', 'PHPExcel_Calculation_Functions::BESSELJ'),
'BESSELK' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'BESSELK', 'PHPExcel_Calculation_Functions::BESSELK'),
'BESSELY' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'BESSELY', 'PHPExcel_Calculation_Functions::BESSELY'),
'BETADIST' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'BETADIST', 'PHPExcel_Calculation_Functions::BETADIST'),
'BETAINV' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'BETAINV', 'PHPExcel_Calculation_Functions::BETAINV'),
'BIN2DEC' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'BIN2DEC', 'PHPExcel_Calculation_Functions::BINTODEC'),
'BIN2HEX' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'BIN2HEX', 'PHPExcel_Calculation_Functions::BINTOHEX'),
'BIN2OCT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'BIN2OCT', 'PHPExcel_Calculation_Functions::BINTOOCT'),
'BINOMDIST' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'BINOMDIST', 'PHPExcel_Calculation_Functions::BINOMDIST'),
'CEILING' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'CEILING', 'PHPExcel_Calculation_Functions::CEILING'),
'CELL' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION, 'CELL', 'PHPExcel_Calculation_Functions::DUMMY'),
'CHAR' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'CHAR', 'chr'),
'CHIDIST' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'CHIDIST', 'PHPExcel_Calculation_Functions::CHIDIST'),
'CHIINV' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'CHIINV', 'PHPExcel_Calculation_Functions::CHIINV'),
'CHITEST' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'CHITEST', 'PHPExcel_Calculation_Functions::DUMMY'),
'CHOOSE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, 'CHOOSE', 'PHPExcel_Calculation_Functions::CHOOSE'),
'CLEAN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'CLEAN', 'PHPExcel_Calculation_Functions::TRIMNONPRINTABLE'),
'CODE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'CODE', 'PHPExcel_Calculation_Functions::ASCIICODE'),
'COLUMN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, 'COLUMN', 'PHPExcel_Calculation_Functions::COLUMN'),
'COLUMNS' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, 'COLUMNS', 'PHPExcel_Calculation_Functions::DUMMY'),
'COMBIN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'COMBIN', 'PHPExcel_Calculation_Functions::COMBIN'),
'COMPLEX' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'COMPLEX', 'PHPExcel_Calculation_Functions::COMPLEX'),
'CONCATENATE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'CONCATENATE', 'PHPExcel_Calculation_Functions::CONCATENATE'),
'CONFIDENCE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'CONFIDENCE', 'PHPExcel_Calculation_Functions::CONFIDENCE'),
'CONVERT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'CONVERT', 'PHPExcel_Calculation_Functions::CONVERTUOM'),
'CORREL' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'CORREL', 'PHPExcel_Calculation_Functions::CORREL'),
'COS' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'COS', 'cos'),
'COSH' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'COSH', 'cosh'),
'COUNT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'COUNT', 'PHPExcel_Calculation_Functions::COUNT'),
'COUNTA' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'COUNTA', 'PHPExcel_Calculation_Functions::COUNTA'),
'COUNTBLANK' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'COUNTBLANK', 'PHPExcel_Calculation_Functions::COUNTBLANK'),
'COUNTIF' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'COUNTIF', 'PHPExcel_Calculation_Functions::DUMMY'),
'COUNTIFS' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'COUNTIFS', 'PHPExcel_Calculation_Functions::DUMMY'),
'COUPDAYBS' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'COUPDAYBS', 'PHPExcel_Calculation_Functions::DUMMY'),
'COUPDAYSNC' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'COUPDAYSNC', 'PHPExcel_Calculation_Functions::DUMMY'),
'COUPNCD' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'COUPNCD', 'PHPExcel_Calculation_Functions::DUMMY'),
'COUPNUM' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'COUPNUM', 'PHPExcel_Calculation_Functions::DUMMY'),
'COUPPCD' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'COUPPCD', 'PHPExcel_Calculation_Functions::DUMMY'),
'COVAR' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'COVAR', 'PHPExcel_Calculation_Functions::COVAR'),
'CRITBINOM' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'CRITBINOM', 'PHPExcel_Calculation_Functions::CRITBINOM'),
'CUBEKPIMEMBER' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_CUBE, 'CUBEKPIMEMBER', 'PHPExcel_Calculation_Functions::DUMMY'),
'CUBEMEMBER' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_CUBE, 'CUBEMEMBER', 'PHPExcel_Calculation_Functions::DUMMY'),
'CUBEMEMBERPROPERTY' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_CUBE, 'CUBEMEMBERPROPERTY', 'PHPExcel_Calculation_Functions::DUMMY'),
'CUBERANKEDMEMBER' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_CUBE, 'CUBERANKEDMEMBER', 'PHPExcel_Calculation_Functions::DUMMY'),
'CUBESET' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_CUBE, 'CUBESET', 'PHPExcel_Calculation_Functions::DUMMY'),
'CUBESETCOUNT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_CUBE, 'CUBESETCOUNT', 'PHPExcel_Calculation_Functions::DUMMY'),
'CUBEVALUE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_CUBE, 'CUBEVALUE', 'PHPExcel_Calculation_Functions::DUMMY'),
'CUMIPMT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'CUMIPMT', 'PHPExcel_Calculation_Functions::CUMIPMT'),
'CUMPRINC' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'CUMPRINC', 'PHPExcel_Calculation_Functions::CUMPRINC'),
'DATE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, 'DATE', 'PHPExcel_Calculation_Functions::DATE'),
'DATEDIF' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, 'DATEDIF', 'PHPExcel_Calculation_Functions::DATEDIF'),
'DATEVALUE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, 'DATEVALUE', 'PHPExcel_Calculation_Functions::DATEVALUE'),
'DAVERAGE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE, 'DAVERAGE', 'PHPExcel_Calculation_Functions::DUMMY'),
'DAY' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, 'DAY', 'PHPExcel_Calculation_Functions::DAYOFMONTH'),
'DAYS360' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, 'DAYS360', 'PHPExcel_Calculation_Functions::DAYS360'),
'DB' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'DB', 'PHPExcel_Calculation_Functions::DB'),
'DCOUNT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE, 'DCOUNT', 'PHPExcel_Calculation_Functions::DUMMY'),
'DCOUNTA' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE, 'DCOUNTA', 'PHPExcel_Calculation_Functions::DUMMY'),
'DDB' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'DDB', 'PHPExcel_Calculation_Functions::DDB'),
'DEC2BIN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'DEC2BIN', 'PHPExcel_Calculation_Functions::DECTOBIN'),
'DEC2HEX' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'DEC2HEX', 'PHPExcel_Calculation_Functions::DECTOHEX'),
'DEC2OCT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'DEC2OCT', 'PHPExcel_Calculation_Functions::DECTOOCT'),
'DEGREES' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'DEGREES', 'rad2deg'),
'DELTA' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'DELTA', 'PHPExcel_Calculation_Functions::DELTA'),
'DEVSQ' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'DEVSQ', 'PHPExcel_Calculation_Functions::DEVSQ'),
'DGET' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE, 'DGET', 'PHPExcel_Calculation_Functions::DUMMY'),
'DISC' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'DISC', 'PHPExcel_Calculation_Functions::DISC'),
'DMAX' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE, 'DMAX', 'PHPExcel_Calculation_Functions::DUMMY'),
'DMIN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE, 'DMIN', 'PHPExcel_Calculation_Functions::DUMMY'),
'DOLLAR' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'DOLLAR', 'PHPExcel_Calculation_Functions::DOLLAR'),
'DOLLARDE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'DOLLARDE', 'PHPExcel_Calculation_Functions::DOLLARDE'),
'DOLLARFR' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'DOLLARFR', 'PHPExcel_Calculation_Functions::DOLLARFR'),
'DPRODUCT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE, 'DPRODUCT', 'PHPExcel_Calculation_Functions::DUMMY'),
'DSTDEV' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE, 'DSTDEV', 'PHPExcel_Calculation_Functions::DUMMY'),
'DSTDEVP' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE, 'DSTDEVP', 'PHPExcel_Calculation_Functions::DUMMY'),
'DSUM' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE, 'DSUM', 'PHPExcel_Calculation_Functions::DUMMY'),
'DURATION' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'DURATION', 'PHPExcel_Calculation_Functions::DUMMY'),
'DVAR' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE, 'DVAR', 'PHPExcel_Calculation_Functions::DUMMY'),
'DVARP' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE, 'DVARP', 'PHPExcel_Calculation_Functions::DUMMY'),
'EDATE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, 'EDATE', 'PHPExcel_Calculation_Functions::EDATE'),
'EFFECT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'EFFECT', 'PHPExcel_Calculation_Functions::EFFECT'),
'EOMONTH' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, 'EOMONTH', 'PHPExcel_Calculation_Functions::EOMONTH'),
'ERF' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'ERF', 'PHPExcel_Calculation_Functions::ERF'),
'ERFC' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'ERFC', 'PHPExcel_Calculation_Functions::ERFC'),
'ERROR.TYPE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION, 'ERROR.TYPE', 'PHPExcel_Calculation_Functions::ERROR_TYPE'),
'EVEN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'EVEN', 'PHPExcel_Calculation_Functions::EVEN'),
'EXACT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'EXACT', 'PHPExcel_Calculation_Functions::DUMMY'),
'EXP' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'EXP', 'exp'),
'EXPONDIST' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'EXPONDIST', 'PHPExcel_Calculation_Functions::EXPONDIST'),
'FACT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'FACT', 'PHPExcel_Calculation_Functions::FACT'),
'FACTDOUBLE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'FACTDOUBLE', 'PHPExcel_Calculation_Functions::FACTDOUBLE'),
'FALSE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOGICAL, 'FALSE', 'PHPExcel_Calculation_Functions::LOGICAL_FALSE'),
'FDIST' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'FDIST', 'PHPExcel_Calculation_Functions::DUMMY'),
'FIND' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'FIND', 'PHPExcel_Calculation_Functions::SEARCHSENSITIVE'),
'FINDB' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'FINDB', 'PHPExcel_Calculation_Functions::DUMMY'),
'FINV' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'FINV', 'PHPExcel_Calculation_Functions::DUMMY'),
'FISHER' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'FISHER', 'PHPExcel_Calculation_Functions::FISHER'),
'FISHERINV' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'FISHERINV', 'PHPExcel_Calculation_Functions::FISHERINV'),
'FIXED' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'FIXED', 'PHPExcel_Calculation_Functions::DUMMY'),
'FLOOR' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'FLOOR', 'PHPExcel_Calculation_Functions::FLOOR'),
'FORECAST' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'FORECAST', 'PHPExcel_Calculation_Functions::FORECAST'),
'FREQUENCY' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'FREQUENCY', 'PHPExcel_Calculation_Functions::DUMMY'),
'FTEST' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'FTEST', 'PHPExcel_Calculation_Functions::DUMMY'),
'FV' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'FV', 'PHPExcel_Calculation_Functions::FV'),
'FVSCHEDULE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'FVSCHEDULE', 'PHPExcel_Calculation_Functions::DUMMY'),
'GAMMADIST' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'GAMMADIST', 'PHPExcel_Calculation_Functions::GAMMADIST'),
'GAMMAINV' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'GAMMAINV', 'PHPExcel_Calculation_Functions::GAMMAINV'),
'GAMMALN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'GAMMALN', 'PHPExcel_Calculation_Functions::GAMMALN'),
'GCD' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'GCD', 'PHPExcel_Calculation_Functions::GCD'),
'GEOMEAN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'GEOMEAN', 'PHPExcel_Calculation_Functions::GEOMEAN'),
'GESTEP' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'GESTEP', 'PHPExcel_Calculation_Functions::GESTEP'),
'GETPIVOTDATA' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, 'GETPIVOTDATA', 'PHPExcel_Calculation_Functions::DUMMY'),
'GROWTH' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'GROWTH', 'PHPExcel_Calculation_Functions::GROWTH'),
'HARMEAN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'HARMEAN', 'PHPExcel_Calculation_Functions::HARMEAN'),
'HEX2BIN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'HEX2BIN', 'PHPExcel_Calculation_Functions::HEXTOBIN'),
'HEX2DEC' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'HEX2DEC', 'PHPExcel_Calculation_Functions::HEXTODEC'),
'HEX2OCT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'HEX2OCT', 'PHPExcel_Calculation_Functions::HEXTOOCT'),
'HLOOKUP' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, 'HLOOKUP', 'PHPExcel_Calculation_Functions::DUMMY'),
'HOUR' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, 'HOUR', 'PHPExcel_Calculation_Functions::HOUROFDAY'),
'HYPERLINK' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, 'HYPERLINK', 'PHPExcel_Calculation_Functions::DUMMY'),
'HYPGEOMDIST' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'HYPGEOMDIST', 'PHPExcel_Calculation_Functions::HYPGEOMDIST'),
'IF' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOGICAL, 'IF', 'PHPExcel_Calculation_Functions::STATEMENT_IF'),
'IFERROR' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOGICAL, 'IFERROR', 'PHPExcel_Calculation_Functions::STATEMENT_IFERROR'),
'IMABS' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'IMABS', 'PHPExcel_Calculation_Functions::IMABS'),
'IMAGINARY' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'IMAGINARY', 'PHPExcel_Calculation_Functions::IMAGINARY'),
'IMARGUMENT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'IMARGUMENT', 'PHPExcel_Calculation_Functions::IMARGUMENT'),
'IMCONJUGATE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'IMCONJUGATE', 'PHPExcel_Calculation_Functions::IMCONJUGATE'),
'IMCOS' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'IMCOS', 'PHPExcel_Calculation_Functions::IMCOS'),
'IMDIV' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'IMDIV', 'PHPExcel_Calculation_Functions::IMDIV'),
'IMEXP' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'IMEXP', 'PHPExcel_Calculation_Functions::IMEXP'),
'IMLN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'IMLN', 'PHPExcel_Calculation_Functions::IMLN'),
'IMLOG10' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'IMLOG10', 'PHPExcel_Calculation_Functions::IMLOG10'),
'IMLOG2' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'IMLOG2', 'PHPExcel_Calculation_Functions::IMLOG2'),
'IMPOWER' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'IMPOWER', 'PHPExcel_Calculation_Functions::IMPOWER'),
'IMPRODUCT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'IMPRODUCT', 'PHPExcel_Calculation_Functions::IMPRODUCT'),
'IMREAL' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'IMREAL', 'PHPExcel_Calculation_Functions::IMREAL'),
'IMSIN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'IMSIN', 'PHPExcel_Calculation_Functions::IMSIN'),
'IMSQRT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'IMSQRT', 'PHPExcel_Calculation_Functions::IMSQRT'),
'IMSUB' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'IMSUB', 'PHPExcel_Calculation_Functions::IMSUB'),
'IMSUM' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'IMSUM', 'PHPExcel_Calculation_Functions::IMSUM'),
'INDEX' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, 'INDEX', 'PHPExcel_Calculation_Functions::INDEX'),
'INDIRECT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, 'INDIRECT', 'PHPExcel_Calculation_Functions::DUMMY'),
'INFO' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION, 'INFO', 'PHPExcel_Calculation_Functions::DUMMY'),
'INT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'INT', 'intval'),
'INTERCEPT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'INTERCEPT', 'PHPExcel_Calculation_Functions::INTERCEPT'),
'INTRATE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'INTRATE', 'PHPExcel_Calculation_Functions::INTRATE'),
'IPMT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'IPMT', 'PHPExcel_Calculation_Functions::IPMT'),
'IRR' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'IRR', 'PHPExcel_Calculation_Functions::DUMMY'),
'ISBLANK' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION, 'ISBLANK', 'PHPExcel_Calculation_Functions::IS_BLANK'),
'ISERR' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION, 'ISERR', 'PHPExcel_Calculation_Functions::IS_ERR'),
'ISERROR' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION, 'ISERROR', 'PHPExcel_Calculation_Functions::IS_ERROR'),
'ISEVEN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION, 'ISEVEN', 'PHPExcel_Calculation_Functions::IS_EVEN'),
'ISLOGICAL' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION, 'ISLOGICAL', 'PHPExcel_Calculation_Functions::IS_LOGICAL'),
'ISNA' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION, 'ISNA', 'PHPExcel_Calculation_Functions::IS_NA'),
'ISNONTEXT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION, 'ISNONTEXT', '!PHPExcel_Calculation_Functions::IS_TEXT'),
'ISNUMBER' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION, 'ISNUMBER', 'PHPExcel_Calculation_Functions::IS_NUMBER'),
'ISODD' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION, 'ISODD', '!PHPExcel_Calculation_Functions::IS_EVEN'),
'ISPMT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION, 'ISPMT', 'PHPExcel_Calculation_Functions::DUMMY'),
'ISREF' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION, 'ISREF', 'PHPExcel_Calculation_Functions::DUMMY'),
'ISTEXT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION, 'ISTEXT', 'PHPExcel_Calculation_Functions::IS_TEXT'),
'JIS' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'JIS', 'PHPExcel_Calculation_Functions::DUMMY'),
'KURT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'KURT', 'PHPExcel_Calculation_Functions::KURT'),
'LARGE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'LARGE', 'PHPExcel_Calculation_Functions::LARGE'),
'LCM' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'LCM', 'PHPExcel_Calculation_Functions::LCM'),
'LEFT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'LEFT', 'PHPExcel_Calculation_Functions::LEFT'),
'LEFTB' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'LEFTB', 'PHPExcel_Calculation_Functions::DUMMY'),
'LEN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'LEN', 'strlen'),
'LENB' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'LENB', 'PHPExcel_Calculation_Functions::DUMMY'),
'LINEST' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'LINEST', 'PHPExcel_Calculation_Functions::LINEST'),
'LN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'LN', 'log'),
'LOG' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'LOG', 'log'),
'LOG10' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'LOG10', 'log10'),
'LOGEST' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'LOGEST', 'PHPExcel_Calculation_Functions::LOGEST'),
'LOGINV' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'LOGINV', 'PHPExcel_Calculation_Functions::LOGINV'),
'LOGNORMDIST' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'LOGNORMDIST', 'PHPExcel_Calculation_Functions::LOGNORMDIST'),
'LOOKUP' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, 'LOOKUP', 'PHPExcel_Calculation_Functions::LOOKUP'),
'LOWER' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'LOWER', 'strtolower'),
'MATCH' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, 'MATCH', 'PHPExcel_Calculation_Functions::MATCH'),
'MAX' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'MAX', 'PHPExcel_Calculation_Functions::MAX'),
'MAXA' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'MAXA', 'PHPExcel_Calculation_Functions::MAXA'),
'MDETERM' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'MDETERM', 'PHPExcel_Calculation_Functions::MDETERM'),
'MDURATION' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'MDURATION', 'PHPExcel_Calculation_Functions::DUMMY'),
'MEDIAN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'MEDIAN', 'PHPExcel_Calculation_Functions::MEDIAN'),
'MID' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'MID', 'PHPExcel_Calculation_Functions::MID'),
'MIDB' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'MIDB', 'PHPExcel_Calculation_Functions::DUMMY'),
'MIN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'MIN', 'PHPExcel_Calculation_Functions::MIN'),
'MINA' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'MINA', 'PHPExcel_Calculation_Functions::MINA'),
'MINUTE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, 'MINUTE', 'PHPExcel_Calculation_Functions::MINUTEOFHOUR'),
'MINVERSE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'MINVERSE', 'PHPExcel_Calculation_Functions::MINVERSE'),
'MIRR' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'MIRR', 'PHPExcel_Calculation_Functions::DUMMY'),
'MMULT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'MMULT', 'PHPExcel_Calculation_Functions::MMULT'),
'MOD' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'MOD', 'PHPExcel_Calculation_Functions::MOD'),
'MODE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'MODE', 'PHPExcel_Calculation_Functions::MODE'),
'MONTH' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, 'MONTH', 'PHPExcel_Calculation_Functions::MONTHOFYEAR'),
'MROUND' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'MROUND', 'PHPExcel_Calculation_Functions::MROUND'),
'MULTINOMIAL' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'MULTINOMIAL', 'PHPExcel_Calculation_Functions::MULTINOMIAL'),
'N' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION, 'N', 'PHPExcel_Calculation_Functions::DUMMY'),
'NA' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION, 'NA', 'PHPExcel_Calculation_Functions::NA'),
'NEGBINOMDIST' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'NEGBINOMDIST', 'PHPExcel_Calculation_Functions::NEGBINOMDIST'),
'NETWORKDAYS' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, 'NETWORKDAYS', 'PHPExcel_Calculation_Functions::NETWORKDAYS'),
'NOMINAL' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'NOMINAL', 'PHPExcel_Calculation_Functions::NOMINAL'),
'NORMDIST' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'NORMDIST', 'PHPExcel_Calculation_Functions::NORMDIST'),
'NORMINV' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'NORMINV', 'PHPExcel_Calculation_Functions::NORMINV'),
'NORMSDIST' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'NORMSDIST', 'PHPExcel_Calculation_Functions::NORMSDIST'),
'NORMSINV' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'NORMSINV', 'PHPExcel_Calculation_Functions::NORMSINV'),
'NOT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOGICAL, 'NOT', '!'),
'NOW' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, 'NOW', 'PHPExcel_Calculation_Functions::DATETIMENOW'),
'NPER' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'NPER', 'PHPExcel_Calculation_Functions::NPER'),
'NPV' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'NPV', 'PHPExcel_Calculation_Functions::NPV'),
'OCT2BIN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'OCT2BIN', 'PHPExcel_Calculation_Functions::OCTTOBIN'),
'OCT2DEC' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'OCT2DEC', 'PHPExcel_Calculation_Functions::OCTTODEC'),
'OCT2HEX' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, 'OCT2HEX', 'PHPExcel_Calculation_Functions::OCTTOHEX'),
'ODD' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'ODD', 'PHPExcel_Calculation_Functions::ODD'),
'ODDFPRICE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'ODDFPRICE', 'PHPExcel_Calculation_Functions::DUMMY'),
'ODDFYIELD' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'ODDFYIELD', 'PHPExcel_Calculation_Functions::DUMMY'),
'ODDLPRICE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'ODDLPRICE', 'PHPExcel_Calculation_Functions::DUMMY'),
'ODDLYIELD' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'ODDLYIELD', 'PHPExcel_Calculation_Functions::DUMMY'),
'OFFSET' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, 'OFFSET', 'PHPExcel_Calculation_Functions::OFFSET'),
'OR' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOGICAL, 'OR', 'PHPExcel_Calculation_Functions::LOGICAL_OR'),
'PEARSON' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'PEARSON', 'PHPExcel_Calculation_Functions::CORREL'),
'PERCENTILE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'PERCENTILE', 'PHPExcel_Calculation_Functions::PERCENTILE'),
'PERCENTRANK' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'PERCENTRANK', 'PHPExcel_Calculation_Functions::PERCENTRANK'),
'PERMUT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'PERMUT', 'PHPExcel_Calculation_Functions::PERMUT'),
'PHONETIC' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'PHONETIC', 'PHPExcel_Calculation_Functions::DUMMY'),
'PI' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'PI', 'pi'),
'PMT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'PMT', 'PHPExcel_Calculation_Functions::PMT'),
'POISSON' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'POISSON', 'PHPExcel_Calculation_Functions::POISSON'),
'POWER' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'POWER', 'PHPExcel_Calculation_Functions::POWER'),
'PPMT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'PPMT', 'PHPExcel_Calculation_Functions::PPMT'),
'PRICE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'PRICE', 'PHPExcel_Calculation_Functions::DUMMY'),
'PRICEDISC' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'PRICEDISC', 'PHPExcel_Calculation_Functions::PRICEDISC'),
'PRICEMAT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'PRICEMAT', 'PHPExcel_Calculation_Functions::PRICEMAT'),
'PROB' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'PROB', 'PHPExcel_Calculation_Functions::DUMMY'),
'PRODUCT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'PRODUCT', 'PHPExcel_Calculation_Functions::PRODUCT'),
'PROPER' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'PROPER', 'ucwords'),
'PV' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'PV', 'PHPExcel_Calculation_Functions::PV'),
'QUARTILE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'QUARTILE', 'PHPExcel_Calculation_Functions::QUARTILE'),
'QUOTIENT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'QUOTIENT', 'PHPExcel_Calculation_Functions::QUOTIENT'),
'RADIANS' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'RADIANS', 'deg2rad'),
'RAND' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'RAND', 'PHPExcel_Calculation_Functions::RAND'),
'RANDBETWEEN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'RANDBETWEEN', 'PHPExcel_Calculation_Functions::RAND'),
'RANK' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'RANK', 'PHPExcel_Calculation_Functions::RANK'),
'RATE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'RATE', 'PHPExcel_Calculation_Functions::DUMMY'),
'RECEIVED' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'RECEIVED', 'PHPExcel_Calculation_Functions::RECEIVED'),
'REPLACE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'REPLACE', 'PHPExcel_Calculation_Functions::DUMMY'),
'REPLACEB' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'REPLACEB', 'PHPExcel_Calculation_Functions::DUMMY'),
'REPT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'REPT', 'str_repeat'),
'RIGHT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'RIGHT', 'PHPExcel_Calculation_Functions::RIGHT'),
'RIGHTB' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'RIGHTB', 'PHPExcel_Calculation_Functions::DUMMY'),
'ROMAN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'ROMAN', 'PHPExcel_Calculation_Functions::ROMAN'),
'ROUND' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'ROUND', 'round'),
'ROUNDDOWN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'ROUNDDOWN', 'PHPExcel_Calculation_Functions::ROUNDDOWN'),
'ROUNDUP' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'ROUNDUP', 'PHPExcel_Calculation_Functions::ROUNDUP'),
'ROW' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, 'ROW', 'PHPExcel_Calculation_Functions::ROW'),
'ROWS' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, 'ROWS', 'PHPExcel_Calculation_Functions::DUMMY'),
'RSQ' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'RSQ', 'PHPExcel_Calculation_Functions::RSQ'),
'RTD' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, 'RTD', 'PHPExcel_Calculation_Functions::DUMMY'),
'SEARCH' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'SEARCH', 'PHPExcel_Calculation_Functions::SEARCHINSENSITIVE'),
'SEARCHB' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'SEARCHB', 'PHPExcel_Calculation_Functions::DUMMY'),
'SECOND' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, 'SECOND', 'PHPExcel_Calculation_Functions::SECONDOFMINUTE'),
'SERIESSUM' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'SERIESSUM', 'PHPExcel_Calculation_Functions::SERIESSUM'),
'SIGN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'SIGN', 'PHPExcel_Calculation_Functions::SIGN'),
'SIN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'SIN', 'sin'),
'SINH' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'SINH', 'sinh'),
'SKEW' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'SKEW', 'PHPExcel_Calculation_Functions::SKEW'),
'SLN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'SLN', 'PHPExcel_Calculation_Functions::SLN'),
'SLOPE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'SLOPE', 'PHPExcel_Calculation_Functions::SLOPE'),
'SMALL' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'SMALL', 'PHPExcel_Calculation_Functions::SMALL'),
'SQRT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'SQRT', 'sqrt'),
'SQRTPI' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'SQRTPI', 'PHPExcel_Calculation_Functions::SQRTPI'),
'STANDARDIZE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'STANDARDIZE', 'PHPExcel_Calculation_Functions::STANDARDIZE'),
'STDEV' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'STDEV', 'PHPExcel_Calculation_Functions::STDEV'),
'STDEVA' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'STDEVA', 'PHPExcel_Calculation_Functions::STDEVA'),
'STDEVP' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'STDEVP', 'PHPExcel_Calculation_Functions::STDEVP'),
'STDEVPA' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'STDEVPA', 'PHPExcel_Calculation_Functions::STDEVPA'),
'STEYX' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'STEYX', 'PHPExcel_Calculation_Functions::STEYX'),
'SUBSTITUTE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'SUBSTITUTE', 'PHPExcel_Calculation_Functions::DUMMY'),
'SUBTOTAL' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'SUBTOTAL', 'PHPExcel_Calculation_Functions::SUBTOTAL'),
'SUM' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'SUM', 'PHPExcel_Calculation_Functions::SUM'),
'SUMIF' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'SUMIF', 'PHPExcel_Calculation_Functions::DUMMY'),
'SUMIFS' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'SUMIFS', 'PHPExcel_Calculation_Functions::DUMMY'),
'SUMPRODUCT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'SUMPRODUCT', 'PHPExcel_Calculation_Functions::DUMMY'),
'SUMSQ' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'SUMSQ', 'PHPExcel_Calculation_Functions::SUMSQ'),
'SUMX2MY2' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'SUMX2MY2', 'PHPExcel_Calculation_Functions::SUMX2MY2'),
'SUMX2PY2' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'SUMX2PY2', 'PHPExcel_Calculation_Functions::SUMX2PY2'),
'SUMXMY2' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'SUMXMY2', 'PHPExcel_Calculation_Functions::SUMXMY2'),
'SYD' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'SYD', 'PHPExcel_Calculation_Functions::SYD'),
'T' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'T', 'PHPExcel_Calculation_Functions::RETURNSTRING'),
'TAN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'TAN', 'tan'),
'TANH' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'TANH', 'tanh'),
'TBILLEQ' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'TBILLEQ', 'PHPExcel_Calculation_Functions::TBILLEQ'),
'TBILLPRICE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'TBILLPRICE', 'PHPExcel_Calculation_Functions::TBILLPRICE'),
'TBILLYIELD' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'TBILLYIELD', 'PHPExcel_Calculation_Functions::TBILLYIELD'),
'TDIST' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'TDIST', 'PHPExcel_Calculation_Functions::TDIST'),
'TEXT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'TEXT', 'PHPExcel_Calculation_Functions::DUMMY'),
'TIME' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, 'TIME', 'PHPExcel_Calculation_Functions::TIME'),
'TIMEVALUE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, 'TIMEVALUE', 'PHPExcel_Calculation_Functions::TIMEVALUE'),
'TINV' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'TINV', 'PHPExcel_Calculation_Functions::TINV'),
'TODAY' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, 'TODAY', 'PHPExcel_Calculation_Functions::DATENOW'),
'TRANSPOSE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, 'TRANSPOSE', 'PHPExcel_Calculation_Functions::TRANSPOSE'),
'TREND' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'TREND', 'PHPExcel_Calculation_Functions::TREND'),
'TRIM' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'TRIM', 'PHPExcel_Calculation_Functions::TRIMSPACES'),
'TRIMMEAN' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'TRIMMEAN', 'PHPExcel_Calculation_Functions::TRIMMEAN'),
'TRUE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOGICAL, 'TRUE', 'PHPExcel_Calculation_Functions::LOGICAL_TRUE'),
'TRUNC' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, 'TRUNC', 'PHPExcel_Calculation_Functions::TRUNC'),
'TTEST' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'TTEST', 'PHPExcel_Calculation_Functions::DUMMY'),
'TYPE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION, 'TYPE', 'PHPExcel_Calculation_Functions::DUMMY'),
'UPPER' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'UPPER', 'strtoupper'),
'USDOLLAR' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'USDOLLAR', 'PHPExcel_Calculation_Functions::DUMMY'),
'VALUE' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, 'VALUE', 'PHPExcel_Calculation_Functions::DUMMY'),
'VAR' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'VAR', 'PHPExcel_Calculation_Functions::VARFunc'),
'VARA' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'VARA', 'PHPExcel_Calculation_Functions::VARA'),
'VARP' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'VARP', 'PHPExcel_Calculation_Functions::VARP'),
'VARPA' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'VARPA', 'PHPExcel_Calculation_Functions::VARPA'),
'VDB' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'VDB', 'PHPExcel_Calculation_Functions::DUMMY'),
'VERSION' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION, 'VERSION', 'PHPExcel_Calculation_Functions::VERSION'),
'VLOOKUP' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, 'VLOOKUP', 'PHPExcel_Calculation_Functions::VLOOKUP'),
'WEEKDAY' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, 'WEEKDAY', 'PHPExcel_Calculation_Functions::DAYOFWEEK'),
'WEEKNUM' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, 'WEEKNUM', 'PHPExcel_Calculation_Functions::WEEKOFYEAR'),
'WEIBULL' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'WEIBULL', 'PHPExcel_Calculation_Functions::WEIBULL'),
'WORKDAY' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, 'WORKDAY', 'PHPExcel_Calculation_Functions::WORKDAY'),
'XIRR' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'XIRR', 'PHPExcel_Calculation_Functions::DUMMY'),
'XNPV' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'XNPV', 'PHPExcel_Calculation_Functions::DUMMY'),
'YEAR' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, 'YEAR', 'PHPExcel_Calculation_Functions::YEAR'),
'YEARFRAC' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, 'YEARFRAC', 'PHPExcel_Calculation_Functions::YEARFRAC'),
'YIELD' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'YIELD', 'PHPExcel_Calculation_Functions::DUMMY'),
'YIELDDISC' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'YIELDDISC', 'PHPExcel_Calculation_Functions::YIELDDISC'),
'YIELDMAT' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, 'YIELDMAT', 'PHPExcel_Calculation_Functions::YIELDMAT'),
'ZTEST' => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, 'ZTEST', 'PHPExcel_Calculation_Functions::DUMMY')
);
}
}
/**
* Is calculation caching enabled?
*
* @return boolean
*/
public function getCalculationCacheEnabled() {
return $this->_calculationCacheEnabled;
}
/**
* Enable/disable calculation cache
*
* @param boolean $pValue
*/
public function setCalculationCacheEnabled($pValue) {
$this->_calculationCacheEnabled = $pValue;
$this->clearCalculationCache();
}
/**
* Clear calculation cache
*/
public function clearCalculationCache() {
$this->_calculationCache = array();
}
/**
* Get calculation cache expiration time
*
* @return float
*/
public function getCalculationCacheExpirationTime() {
return $this->_calculationCacheExpirationTime;
}
/**
* Set calculation cache expiration time
*
* @param float $pValue
*/
public function setCalculationCacheExpirationTime($pValue = 0.01) {
$this->_calculationCacheExpirationTime = $pValue;
}
/**
* Calculate cell value (using formula)
*
* @param PHPExcel_Cell $pCell Cell to calculate
* @return mixed
* @throws Exception
*/
public function calculate(PHPExcel_Cell $pCell = null) {
// Return value
$returnValue = '';
// Is the value present in calculation cache?
if ($this->getCalculationCacheEnabled ()) {
if (isset ( $this->_calculationCache [$pCell->getParent ()->getTitle ()] [$pCell->getCoordinate ()] )) {
if ((time () + microtime ()) - $this->_calculationCache [$pCell->getParent ()->getTitle ()] [$pCell->getCoordinate ()] ['time'] < $this->_calculationCacheExpirationTime) {
// Return result
$returnValue = $this->_calculationCache [$pCell->getParent ()->getTitle ()] [$pCell->getCoordinate ()] ['data'];
if ((is_array($returnValue)) && (self::$returnArrayAsType == self::RETURN_ARRAY_AS_VALUE)) {
return array_shift(PHPExcel_Calculation_Functions::flattenArray($returnValue));
}
return $returnValue;
} else {
unset ( $this->_calculationCache [$pCell->getParent ()->getTitle ()] [$pCell->getCoordinate ()] );
}
}
}
// Formula
$formula = $pCell->getValue ();
// Executable formula array
$executableFormulaArray = array ( );
// Parse formula into a tree of tokens
$objParser = new PHPExcel_Calculation_FormulaParser ( $formula );
// Loop trough parsed tokens and create an executable formula
$inFunction = false;
$token = null;
$tokenCount = $objParser->getTokenCount();
for($i = 0; $i < $tokenCount; ++$i) {
$token = $objParser->getToken ( $i );
$tokenType = $token->getTokenType();
$tokenSubType = $token->getTokenSubType();
$tokenValue = $token->getValue();
// Is it a cell reference?
if (($tokenType == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND) && ($tokenSubType == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_RANGE)) {
// Adjust reference
$reference = str_replace ( '$', '', $tokenValue );
// Add to executable formula array
$executableFormulaArray[] = '$this->extractRange("'.$reference.'", $pCell->getParent())';
continue;
}
// Is it a concatenation operator?
if (($tokenType == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX) && ($tokenSubType == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_CONCATENATION)) {
// Add to executable formula array
$executableFormulaArray[] = '.';
continue;
}
// Is it a logical operator?
if (($tokenType == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX) && ($tokenSubType == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_LOGICAL)) {
// Temporary variable
$tmp = '';
switch ($tokenValue) {
case '=' :
$tmp = '==';
break;
case '<>' :
$tmp = '!=';
break;
default :
$tmp = $tokenValue;
}
// Add to executable formula array
$executableFormulaArray[] = $tmp;
continue;
}
// Is it a subexpression?
if ($tokenType == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION) {
// Temporary variable
$tmp = '';
switch ($tokenSubType) {
case PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START :
$tmp = '(';
break;
case PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP :
$tmp = ')';
break;
}
// Add to executable formula array
$executableFormulaArray[] = $tmp;
continue;
}
// Is it a function?
if ($tokenType == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) {
// Temporary variable
$tmp = '';
// Check the function type
if ($tokenValue == 'ARRAY' || $tokenValue == 'ARRAYROW') {
// An array or an array row...
$tmp = 'array(';
} else {
// A regular function call...
switch ($tokenSubType) {
case PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START :
// Check if the function call is allowed...
if (! isset ( $this->_functionMappings [strtoupper ($tokenValue)] )) {
return '#NAME?';
}
// Map the function call
$tmp = $this->_functionMappings [strtoupper ($tokenValue)]->getPHPExcelName () . '(';
$inFunction = true;
break;
case PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP :
$tmp = ')';
break;
}
}
// Add to executable formula array
$executableFormulaArray[] = $tmp;
continue;
}
// Is it text?
if (($tokenType == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND) && ($tokenSubType == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_TEXT)) {
// Temporary variable
$tmp = $tokenValue;
$tmp = str_replace('"', '\"', $tmp);
// Add to executable formula array
$executableFormulaArray[] = '"'.$tmp.'"';
continue;
}
// Is it a number?
if (($tokenType == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND) && ($tokenSubType == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NUMBER)) {
// Add to executable formula array
$executableFormulaArray[] = $tokenValue;
continue;
}
// Is it an error? Add it as text...
if (($tokenType == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND) && ($tokenSubType == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_ERROR)) {
// Add to executable formula array
$executableFormulaArray[] = '"'.$tokenValue.'"';
continue;
}
// Is it something else?
$executableFormulaArray[] = $tokenValue;
}
$fromArray = array('(,', ',,', ',)', '( ,', ', ,', ', )', '$this');
$toArray = array('(null,', ',null,', ',null)', '(null,', ',null,', ',null)', '$pThat');
// Evaluate formula
try {
$formula = implode ( ' ', $executableFormulaArray );
$formula = str_replace ( $fromArray, $toArray, $formula );
/*
* The following code block can cause an error like:
* Fatal error: Unsupported operand types in ...: runtime-created function on line 1
*
* This is due to the fact that a FATAL error is an E_ERROR,
* and it can not be caught using try/catch or any other
* Exception/error handling feature in PHP.
*
* A feature request seems to be made once, but it has been
* closed without any deliverables:
* http://bugs.php.net/bug.php?id=40014
*/
$temporaryCalculationFunction = @create_function ( '$pThat, $pCell', "return $formula;" );
if ($temporaryCalculationFunction === FALSE) {
$returnValue = '#N/A';
} else {
$calculationExceptionHandler = new PHPExcel_Calculation_ExceptionHandler();
$returnValue = $temporaryCalculationFunction ( $this , $pCell );
}
} catch ( Exception $ex ) {
$returnValue = '#N/A';
}
// Save to calculation cache
if ($this->getCalculationCacheEnabled ()) {
$this->_calculationCache [$pCell->getParent ()->getTitle ()] [$pCell->getCoordinate ()] ['time'] = (time () + microtime ());
$this->_calculationCache [$pCell->getParent ()->getTitle ()] [$pCell->getCoordinate ()] ['data'] = $returnValue;
}
// Return result
if ((is_array($returnValue)) && (self::$returnArrayAsType == self::RETURN_ARRAY_AS_VALUE)) {
return array_shift(PHPExcel_Calculation_Functions::flattenArray($returnValue));
}
return $returnValue;
}
/**
* __clone implementation. Cloning should not be allowed in a Singleton!
*
* @throws Exception
*/
public final function __clone() {
throw new Exception ( "Cloning a Singleton is not allowed!" );
}
/**
* Extract range values
*
* @param string $pRange String based range representation
* @param PHPExcel_Worksheet $pSheet Worksheet
* @return mixed Array of values in range if range contains more than one element. Otherwise, a single value is returned.
* @throws Exception
*/
public function extractRange($pRange = 'A1', PHPExcel_Worksheet $pSheet = null) {
// Return value
$returnValue = array ( );
// Worksheet given?
if (! is_null ( $pSheet )) {
// Worksheet reference?
if (strpos ( $pRange, '!' ) !== false) {
$worksheetReference = PHPExcel_Worksheet::extractSheetTitle ( $pRange, true );
$pSheet = $pSheet->getParent ()->getSheetByName ( $worksheetReference [0] );
$pRange = $worksheetReference [1];
}
// Named range?
$namedRange = PHPExcel_NamedRange::resolveRange ( $pRange, $pSheet );
if (! is_null ( $namedRange )) {
$pRange = $namedRange->getRange ();
if ($pSheet->getHashCode () != $namedRange->getWorksheet ()->getHashCode ()) {
if (! $namedRange->getLocalOnly ()) {
$pSheet = $namedRange->getWorksheet ();
} else {
return '';
}
}
}
// Extract range
$aReferences = PHPExcel_Cell::extractAllCellReferencesInRange ( $pRange );
if( count ( $aReferences ) == 1 ){
return $pSheet->getCell ( $aReferences[0] )->getCalculatedValue ();
}
// Extract cell data
foreach ( $aReferences as $reference ) {
// Extract range
list ( $currentCol, $currentRow ) = PHPExcel_Cell::coordinateFromString ( $reference );
$returnValue [$currentCol] [$currentRow] = $pSheet->getCell ( $reference )->getCalculatedValue ();
}
}
// Return
return $returnValue;
}
/**
* Extract cell
*
* @deprecated
* @param string $reference
* @param PHPExcel_Cell $pCell
* @return mixed Value
*/
public function extractCell($reference = 'A1', PHPExcel_Cell $pCell = null) {
$cell = $pCell->getParent ()->getCell ( $reference );
if ($cell->getValue () instanceof PHPExcel_RichText) {
return $cell->getValue ()->getPlainText ();
} else {
return $cell->getCalculatedValue ();
}
}
/**
* Is a specific function implemented?
*
* @param string $pFunction Function
* @return boolean
*/
public function isImplemented($pFunction = '') {
$pFunction = strtoupper ( $pFunction );
if (isset ( $this->_functionMappings [$pFunction] )) {
return $this->_functionMappings [$pFunction]->getPHPExcelName () == 'PHPExcel_Calculation_Functions::DUMMY';
} else {
return false;
}
}
/**
* Get a list of implemented functions
*
* @return array
*/
public function listFunctions() {
// Return value
$returnValue = array();
// Functions
$aFunctions = $this->_functionMappings;
// Loop functions
foreach ($aFunctions as $function) {
if ($function->getPHPExcelName() != 'PHPExcel_Calculation_Functions::DUMMY') {
$returnValue[] = $function;
}
}
// Return
return $returnValue;
}
/**
* Get a list of implemented Excel function names
*
* @return array
*/
public function listFunctionNames() {
// Return value
$returnValue = array();
// Function names
$aFunctions = $this->listFunctions();
// Loop functions
foreach ($aFunctions as $function) {
$returnValue[] = $function->getExcelName();
}
// Return
return $returnValue;
}
}