PHPExcel_Calculation
[ class tree: PHPExcel_Calculation ] [ index: PHPExcel_Calculation ] [ all elements ]

Source for file Calculation.php

Documentation is available at Calculation.php

  1. <?php
  2. /**
  3.  * PHPExcel
  4.  *
  5.  * Copyright (c) 2006 - 2009 PHPExcel
  6.  *
  7.  * This library is free software; you can redistribute it and/or
  8.  * modify it under the terms of the GNU Lesser General Public
  9.  * License as published by the Free Software Foundation; either
  10.  * version 2.1 of the License, or (at your option) any later version.
  11.  *
  12.  * This library is distributed in the hope that it will be useful,
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15.  * Lesser General Public License for more details.
  16.  *
  17.  * You should have received a copy of the GNU Lesser General Public
  18.  * License along with this library; if not, write to the Free Software
  19.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  20.  *
  21.  * @category   PHPExcel
  22.  * @package    PHPExcel_Calculation
  23.  * @copyright  Copyright (c) 2006 - 2009 PHPExcel (http://www.codeplex.com/PHPExcel)
  24.  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
  25.  * @version    1.6.5, 2009-01-05
  26.  */
  27.  
  28. /** PHPExcel_Worksheet */
  29. require_once 'PHPExcel/Worksheet.php';
  30.  
  31. /** PHPExcel_Cell */
  32. require_once 'PHPExcel/Cell.php';
  33.  
  34. /** PHPExcel_Cell_DataType */
  35. require_once 'PHPExcel/Cell/DataType.php';
  36.  
  37. /** PHPExcel_RichText */
  38. require_once 'PHPExcel/RichText.php';
  39.  
  40. /** PHPExcel_NamedRange */
  41. require_once 'PHPExcel/NamedRange.php';
  42.  
  43. /** PHPExcel_Calculation_FormulaParser */
  44. require_once 'PHPExcel/Calculation/FormulaParser.php';
  45.  
  46. /** PHPExcel_Calculation_FormulaToken */
  47. require_once 'PHPExcel/Calculation/FormulaToken.php';
  48.  
  49. /** PHPExcel_Calculation_Functions */
  50. require_once 'PHPExcel/Calculation/Functions.php';
  51.  
  52. /** PHPExcel_Calculation_Function */
  53. require_once 'PHPExcel/Calculation/Function.php';
  54.  
  55. /**
  56.  * PHPExcel_Calculation (Singleton)
  57.  *
  58.  * @category   PHPExcel
  59.  * @package    PHPExcel_Calculation
  60.  * @copyright  Copyright (c) 2006 - 2009 PHPExcel (http://www.codeplex.com/PHPExcel)
  61.  */
  62.  
  63.     /** constants */
  64.     const RETURN_ARRAY_AS_VALUE 'value';
  65.     const RETURN_ARRAY_AS_ARRAY 'array';
  66.  
  67.     private static $returnArrayAsType    self::RETURN_ARRAY_AS_ARRAY;
  68.  
  69.     /**
  70.      * Function mappings (from Excel to PHPExcel)
  71.      *
  72.      * @var array 
  73.      */
  74.     private $_functionMappings = null;
  75.  
  76.     /**
  77.      * Calculation cache
  78.      *
  79.      * @var array 
  80.      */
  81.     private $_calculationCache = array );
  82.  
  83.     /**
  84.      * Calculation cache enabled
  85.      *
  86.      * @var boolean 
  87.      */
  88.     private $_calculationCacheEnabled = true;
  89.  
  90.     /**
  91.      * Calculation cache expiration time
  92.      *
  93.      * @var float 
  94.      */
  95.     private $_calculationCacheExpirationTime = 0.01;
  96.  
  97.     /**
  98.      * Instance of this class
  99.      *
  100.      * @var PHPExcel_Calculation 
  101.      */
  102.     private static $_instance;
  103.  
  104.     /**
  105.      * Get an instance of this class
  106.      *
  107.      * @return PHPExcel_Calculation 
  108.      */
  109.     public static function getInstance({
  110.         if (isset self::$_instance || is_null self::$_instance )) {
  111.             self::$_instance new PHPExcel_Calculation );
  112.         }
  113.  
  114.         return self::$_instance;
  115.     }
  116.  
  117.     /**
  118.      * Set the Array Return Type (Array or Value of first element in the array)
  119.      *
  120.      * @param     string    $returnType            Array return type
  121.      * @return     boolean                    Success or failure
  122.      */
  123.     public static function setArrayReturnType($returnType{
  124.         if (($returnType == self::RETURN_ARRAY_AS_VALUE||
  125.             ($returnType == self::RETURN_ARRAY_AS_ARRAY)) {
  126.             self::$returnArrayAsType $returnType;
  127.             return True;
  128.         }
  129.         return False;
  130.     }    //    function setExcelCalendar()
  131.  
  132.  
  133.     /**
  134.      * Return the Array Return Type (Array or Value of first element in the array)
  135.      *
  136.      * @return     string        $returnType            Array return type
  137.      */
  138.     public static function getArrayReturnType({
  139.         return self::$returnArrayAsType;
  140.     }    //    function getExcelCalendar()
  141.  
  142.  
  143.     /**
  144.      * Create a new PHPExcel_Calculation
  145.      */
  146.     protected function __construct({
  147.             // Assign function mappings
  148.         if (is_null($this->_functionMappings)) {
  149.             $this->_functionMappings = array(
  150.                 'ABS'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'ABS',                    'abs'),
  151.                 'ACCRINT'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'ACCRINT',                'PHPExcel_Calculation_Functions::DUMMY'),
  152.                 'ACCRINTM'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'ACCRINTM',                'PHPExcel_Calculation_Functions::DUMMY'),
  153.                 'ACOS'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'ACOS',                    'acos'),
  154.                 'ACOSH'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'ACOSH',                'acosh'),
  155.                 'ADDRESS'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE,    'ADDRESS',                'PHPExcel_Calculation_Functions::CELL_ADDRESS'),
  156.                 'AMORDEGRC'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'AMORDEGRC',            'PHPExcel_Calculation_Functions::DUMMY'),
  157.                 'AMORLINC'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'AMORLINC',                'PHPExcel_Calculation_Functions::DUMMY'),
  158.                 'AND'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOGICAL,                'AND',                    'PHPExcel_Calculation_Functions::LOGICAL_AND'),
  159.                 'AREAS'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE,    'AREAS',                'PHPExcel_Calculation_Functions::DUMMY'),
  160.                 'ASC'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'ASC',                    'PHPExcel_Calculation_Functions::DUMMY'),
  161.                 'ASIN'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'ASIN',                    'asin'),
  162.                 'ASINH'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'ASINH',                'asinh'),
  163.                 'ATAN'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'ATAN',                    'atan'),
  164.                 'ATAN2'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'ATAN2',                'PHPExcel_Calculation_Functions::REVERSE_ATAN2'),
  165.                 'ATANH'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'ATANH',                'atanh'),
  166.                 'AVEDEV'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'AVEDEV',                'PHPExcel_Calculation_Functions::AVEDEV'),
  167.                 'AVERAGE'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'AVERAGE',                'PHPExcel_Calculation_Functions::AVERAGE'),
  168.                 'AVERAGEA'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'AVERAGEA',                'PHPExcel_Calculation_Functions::AVERAGEA'),
  169.                 'AVERAGEIF'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'AVERAGEIF',            'PHPExcel_Calculation_Functions::DUMMY'),
  170.                 'AVERAGEIFS'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'AVERAGEIFS',            'PHPExcel_Calculation_Functions::DUMMY'),
  171.                 'BAHTTEXT'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'BAHTTEXT',                'PHPExcel_Calculation_Functions::DUMMY'),
  172.                 'BESSELI'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'BESSELI',                'PHPExcel_Calculation_Functions::BESSELI'),
  173.                 'BESSELJ'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'BESSELJ',                'PHPExcel_Calculation_Functions::BESSELJ'),
  174.                 'BESSELK'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'BESSELK',                'PHPExcel_Calculation_Functions::BESSELK'),
  175.                 'BESSELY'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'BESSELY',                'PHPExcel_Calculation_Functions::BESSELY'),
  176.                 'BETADIST'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'BETADIST',                'PHPExcel_Calculation_Functions::BETADIST'),
  177.                 'BETAINV'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'BETAINV',                'PHPExcel_Calculation_Functions::BETAINV'),
  178.                 'BIN2DEC'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'BIN2DEC',                'PHPExcel_Calculation_Functions::BINTODEC'),
  179.                 'BIN2HEX'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'BIN2HEX',                'PHPExcel_Calculation_Functions::BINTOHEX'),
  180.                 'BIN2OCT'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'BIN2OCT',                'PHPExcel_Calculation_Functions::BINTOOCT'),
  181.                 'BINOMDIST'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'BINOMDIST',            'PHPExcel_Calculation_Functions::BINOMDIST'),
  182.                 'CEILING'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'CEILING',                'PHPExcel_Calculation_Functions::CEILING'),
  183.                 'CELL'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION,            'CELL',                    'PHPExcel_Calculation_Functions::DUMMY'),
  184.                 'CHAR'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'CHAR',                    'chr'),
  185.                 'CHIDIST'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'CHIDIST',                'PHPExcel_Calculation_Functions::CHIDIST'),
  186.                 'CHIINV'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'CHIINV',                'PHPExcel_Calculation_Functions::CHIINV'),
  187.                 'CHITEST'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'CHITEST',                'PHPExcel_Calculation_Functions::DUMMY'),
  188.                 'CHOOSE'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE,    'CHOOSE',                'PHPExcel_Calculation_Functions::CHOOSE'),
  189.                 'CLEAN'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'CLEAN',                'PHPExcel_Calculation_Functions::TRIMNONPRINTABLE'),
  190.                 'CODE'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'CODE',                    'PHPExcel_Calculation_Functions::ASCIICODE'),
  191.                 'COLUMN'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE,    'COLUMN',                'PHPExcel_Calculation_Functions::COLUMN'),
  192.                 'COLUMNS'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE,    'COLUMNS',                'PHPExcel_Calculation_Functions::DUMMY'),
  193.                 'COMBIN'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'COMBIN',                'PHPExcel_Calculation_Functions::COMBIN'),
  194.                 'COMPLEX'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'COMPLEX',                'PHPExcel_Calculation_Functions::COMPLEX'),
  195.                 'CONCATENATE'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'CONCATENATE',            'PHPExcel_Calculation_Functions::CONCATENATE'),
  196.                 'CONFIDENCE'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'CONFIDENCE',            'PHPExcel_Calculation_Functions::CONFIDENCE'),
  197.                 'CONVERT'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'CONVERT',                'PHPExcel_Calculation_Functions::DUMMY'),
  198.                 'CORREL'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'CORREL',                'PHPExcel_Calculation_Functions::DUMMY'),
  199.                 'COS'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'COS',                    'cos'),
  200.                 'COSH'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'COSH',                    'cosh'),
  201.                 'COUNT'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'COUNT',                'PHPExcel_Calculation_Functions::COUNT'),
  202.                 'COUNTA'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'COUNTA',                'PHPExcel_Calculation_Functions::COUNTA'),
  203.                 'COUNTBLANK'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'COUNTBLANK',            'PHPExcel_Calculation_Functions::COUNTBLANK'),
  204.                 'COUNTIF'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'COUNTIF',                'PHPExcel_Calculation_Functions::DUMMY'),
  205.                 'COUNTIFS'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'COUNTIFS',                'PHPExcel_Calculation_Functions::DUMMY'),
  206.                 'COUPDAYBS'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'COUPDAYBS',            'PHPExcel_Calculation_Functions::DUMMY'),
  207.                 'COUPDAYSNC'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'COUPDAYSNC',            'PHPExcel_Calculation_Functions::DUMMY'),
  208.                 'COUPNCD'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'COUPNCD',                'PHPExcel_Calculation_Functions::DUMMY'),
  209.                 'COUPNUM'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'COUPNUM',                'PHPExcel_Calculation_Functions::DUMMY'),
  210.                 'COUPPCD'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'COUPPCD',                'PHPExcel_Calculation_Functions::DUMMY'),
  211.                 'COVAR'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'COVAR',                'PHPExcel_Calculation_Functions::DUMMY'),
  212.                 'CRITBINOM'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'CRITBINOM',            'PHPExcel_Calculation_Functions::CRITBINOM'),
  213.                 'CUBEKPIMEMBER'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_CUBE,                    'CUBEKPIMEMBER',        'PHPExcel_Calculation_Functions::DUMMY'),
  214.                 'CUBEMEMBER'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_CUBE,                    'CUBEMEMBER',            'PHPExcel_Calculation_Functions::DUMMY'),
  215.                 'CUBEMEMBERPROPERTY'    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_CUBE,                    'CUBEMEMBERPROPERTY',    'PHPExcel_Calculation_Functions::DUMMY'),
  216.                 'CUBERANKEDMEMBER'        => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_CUBE,                    'CUBERANKEDMEMBER',        'PHPExcel_Calculation_Functions::DUMMY'),
  217.                 'CUBESET'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_CUBE,                    'CUBESET',                'PHPExcel_Calculation_Functions::DUMMY'),
  218.                 'CUBESETCOUNT'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_CUBE,                    'CUBESETCOUNT',            'PHPExcel_Calculation_Functions::DUMMY'),
  219.                 'CUBEVALUE'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_CUBE,                    'CUBEVALUE',            'PHPExcel_Calculation_Functions::DUMMY'),
  220.                 'CUMIPMT'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'CUMIPMT',                'PHPExcel_Calculation_Functions::DUMMY'),
  221.                 'CUMPRINC'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'CUMPRINC',                'PHPExcel_Calculation_Functions::DUMMY'),
  222.                 'DATE'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME,            'DATE',                    'PHPExcel_Calculation_Functions::DATE'),
  223.                 'DATEDIF'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME,            'DATEDIF',                'PHPExcel_Calculation_Functions::DATEDIF'),
  224.                 'DATEVALUE'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME,            'DATEVALUE',            'PHPExcel_Calculation_Functions::DATEVALUE'),
  225.                 'DAVERAGE'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE,                'DAVERAGE',                'PHPExcel_Calculation_Functions::DUMMY'),
  226.                 'DAY'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME,            'DAY',                    'PHPExcel_Calculation_Functions::DAYOFMONTH'),
  227.                 'DAYS360'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME,            'DAYS360',                'PHPExcel_Calculation_Functions::DAYS360'),
  228.                 'DB'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'DB',                    'PHPExcel_Calculation_Functions::DUMMY'),
  229.                 'DCOUNT'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE,                'DCOUNT',                'PHPExcel_Calculation_Functions::DUMMY'),
  230.                 'DCOUNTA'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE,                'DCOUNTA',                'PHPExcel_Calculation_Functions::DUMMY'),
  231.                 'DDB'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'DDB',                    'PHPExcel_Calculation_Functions::DUMMY'),
  232.                 'DEC2BIN'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'DEC2BIN',                'PHPExcel_Calculation_Functions::DECTOBIN'),
  233.                 'DEC2HEX'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'DEC2HEX',                'PHPExcel_Calculation_Functions::DECTOHEX'),
  234.                 'DEC2OCT'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'DEC2OCT',                'PHPExcel_Calculation_Functions::DECTOOCT'),
  235.                 'DEGREES'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'DEGREES',                'rad2deg'),
  236.                 'DELTA'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'DELTA',                'PHPExcel_Calculation_Functions::DELTA'),
  237.                 'DEVSQ'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'DEVSQ',                'PHPExcel_Calculation_Functions::DEVSQ'),
  238.                 'DGET'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE,                'DGET',                    'PHPExcel_Calculation_Functions::DUMMY'),
  239.                 'DISC'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'DISC',                    'PHPExcel_Calculation_Functions::DUMMY'),
  240.                 'DMAX'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE,                'DMAX',                    'PHPExcel_Calculation_Functions::DUMMY'),
  241.                 'DMIN'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE,                'DMIN',                    'PHPExcel_Calculation_Functions::DUMMY'),
  242.                 'DOLLAR'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'DOLLAR',                'PHPExcel_Calculation_Functions::DUMMY'),
  243.                 'DOLLARDE'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'DOLLARDE',                'PHPExcel_Calculation_Functions::DUMMY'),
  244.                 'DOLLARFR'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'DOLLARFR',                'PHPExcel_Calculation_Functions::DUMMY'),
  245.                 'DPRODUCT'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE,                'DPRODUCT',                'PHPExcel_Calculation_Functions::DUMMY'),
  246.                 'DSTDEV'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE,                'DSTDEV',                'PHPExcel_Calculation_Functions::DUMMY'),
  247.                 'DSTDEVP'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE,                'DSTDEVP',                'PHPExcel_Calculation_Functions::DUMMY'),
  248.                 'DSUM'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE,                'DSUM',                    'PHPExcel_Calculation_Functions::DUMMY'),
  249.                 'DURATION'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'DURATION',                'PHPExcel_Calculation_Functions::DUMMY'),
  250.                 'DVAR'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE,                'DVAR',                    'PHPExcel_Calculation_Functions::DUMMY'),
  251.                 'DVARP'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATABASE,                'DVARP',                'PHPExcel_Calculation_Functions::DUMMY'),
  252.                 'EDATE'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME,            'EDATE',                'PHPExcel_Calculation_Functions::EDATE'),
  253.                 'EFFECT'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'EFFECT',                'PHPExcel_Calculation_Functions::EFFECT'),
  254.                 'EOMONTH'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME,            'EOMONTH',                'PHPExcel_Calculation_Functions::EOMONTH'),
  255.                 'ERF'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'ERF',                    'PHPExcel_Calculation_Functions::ERF'),
  256.                 'ERFC'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'ERFC',                    'PHPExcel_Calculation_Functions::ERFC'),
  257.                 'ERROR.TYPE'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION,            'ERROR.TYPE',            'PHPExcel_Calculation_Functions::ERROR_TYPE'),
  258.                 'EVEN'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'EVEN',                    'PHPExcel_Calculation_Functions::EVEN'),
  259.                 'EXACT'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'EXACT',                'PHPExcel_Calculation_Functions::DUMMY'),
  260.                 'EXP'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'EXP',                    'exp'),
  261.                 'EXPONDIST'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'EXPONDIST',            'PHPExcel_Calculation_Functions::EXPONDIST'),
  262.                 'FACT'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'FACT',                    'PHPExcel_Calculation_Functions::FACT'),
  263.                 'FACTDOUBLE'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'FACTDOUBLE',            'PHPExcel_Calculation_Functions::FACTDOUBLE'),
  264.                 'FALSE'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOGICAL,                'FALSE',                'PHPExcel_Calculation_Functions::LOGICAL_FALSE'),
  265.                 'FDIST'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'FDIST',                'PHPExcel_Calculation_Functions::DUMMY'),
  266.                 'FIND'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'FIND',                    'PHPExcel_Calculation_Functions::SEARCHSENSITIVE'),
  267.                 'FINDB'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'FINDB',                'PHPExcel_Calculation_Functions::DUMMY'),
  268.                 'FINV'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'FINV',                    'PHPExcel_Calculation_Functions::DUMMY'),
  269.                 'FISHER'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'FISHER',                'PHPExcel_Calculation_Functions::FISHER'),
  270.                 'FISHERINV'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'FISHERINV',            'PHPExcel_Calculation_Functions::FISHERINV'),
  271.                 'FIXED'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'FIXED',                'PHPExcel_Calculation_Functions::DUMMY'),
  272.                 'FLOOR'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'FLOOR',                'PHPExcel_Calculation_Functions::FLOOR'),
  273.                 'FORECAST'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'FORECAST',                'PHPExcel_Calculation_Functions::DUMMY'),
  274.                 'FREQUENCY'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'FREQUENCY',            'PHPExcel_Calculation_Functions::DUMMY'),
  275.                 'FTEST'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'FTEST',                'PHPExcel_Calculation_Functions::DUMMY'),
  276.                 'FV'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'FV',                    'PHPExcel_Calculation_Functions::FV'),
  277.                 'FVSCHEDULE'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'FVSCHEDULE',            'PHPExcel_Calculation_Functions::DUMMY'),
  278.                 'GAMMADIST'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'GAMMADIST',            'PHPExcel_Calculation_Functions::GAMMADIST'),
  279.                 'GAMMAINV'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'GAMMAINV',                'PHPExcel_Calculation_Functions::GAMMAINV'),
  280.                 'GAMMALN'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'GAMMALN',                'PHPExcel_Calculation_Functions::GAMMALN'),
  281.                 'GCD'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'GCD',                    'PHPExcel_Calculation_Functions::GCD'),
  282.                 'GEOMEAN'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'GEOMEAN',                'PHPExcel_Calculation_Functions::GEOMEAN'),
  283.                 'GESTEP'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'GESTEP',                'PHPExcel_Calculation_Functions::GESTEP'),
  284.                 'GETPIVOTDATA'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE,    'GETPIVOTDATA',            'PHPExcel_Calculation_Functions::DUMMY'),
  285.                 'GROWTH'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'GROWTH',                'PHPExcel_Calculation_Functions::DUMMY'),
  286.                 'HARMEAN'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'HARMEAN',                'PHPExcel_Calculation_Functions::HARMEAN'),
  287.                 'HEX2BIN'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'HEX2BIN',                'PHPExcel_Calculation_Functions::HEXTOBIN'),
  288.                 'HEX2DEC'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'HEX2DEC',                'PHPExcel_Calculation_Functions::HEXTODEC'),
  289.                 'HEX2OCT'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'HEX2OCT',                'PHPExcel_Calculation_Functions::HEXTOOCT'),
  290.                 'HLOOKUP'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE,    'HLOOKUP',                'PHPExcel_Calculation_Functions::DUMMY'),
  291.                 'HOUR'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME,            'HOUR',                    'PHPExcel_Calculation_Functions::HOUROFDAY'),
  292.                 'HYPERLINK'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE,    'HYPERLINK',            'PHPExcel_Calculation_Functions::DUMMY'),
  293.                 'HYPGEOMDIST'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'HYPGEOMDIST',            'PHPExcel_Calculation_Functions::HYPGEOMDIST'),
  294.                 'IF'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOGICAL,                'IF',                    'PHPExcel_Calculation_Functions::STATEMENT_IF'),
  295.                 'IFERROR'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOGICAL,                'IFERROR',                'PHPExcel_Calculation_Functions::STATEMENT_IFERROR'),
  296.                 'IMABS'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'IMABS',                'PHPExcel_Calculation_Functions::IMABS'),
  297.                 'IMAGINARY'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'IMAGINARY',            'PHPExcel_Calculation_Functions::IMAGINARY'),
  298.                 'IMARGUMENT'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'IMARGUMENT',            'PHPExcel_Calculation_Functions::IMARGUMENT'),
  299.                 'IMCONJUGATE'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'IMCONJUGATE',            'PHPExcel_Calculation_Functions::IMCONJUGATE'),
  300.                 'IMCOS'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'IMCOS',                'PHPExcel_Calculation_Functions::IMCOS'),
  301.                 'IMDIV'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'IMDIV',                'PHPExcel_Calculation_Functions::IMDIV'),
  302.                 'IMEXP'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'IMEXP',                'PHPExcel_Calculation_Functions::IMEXP'),
  303.                 'IMLN'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'IMLN',                    'PHPExcel_Calculation_Functions::IMLN'),
  304.                 'IMLOG10'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'IMLOG10',                'PHPExcel_Calculation_Functions::IMLOG10'),
  305.                 'IMLOG2'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'IMLOG2',                'PHPExcel_Calculation_Functions::IMLOG2'),
  306.                 'IMPOWER'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'IMPOWER',                'PHPExcel_Calculation_Functions::IMPOWER'),
  307.                 'IMPRODUCT'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'IMPRODUCT',            'PHPExcel_Calculation_Functions::IMPRODUCT'),
  308.                 'IMREAL'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'IMREAL',                'PHPExcel_Calculation_Functions::IMREAL'),
  309.                 'IMSIN'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'IMSIN',                'PHPExcel_Calculation_Functions::IMSIN'),
  310.                 'IMSQRT'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'IMSQRT',                'PHPExcel_Calculation_Functions::IMSQRT'),
  311.                 'IMSUB'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'IMSUB',                'PHPExcel_Calculation_Functions::IMSUB'),
  312.                 'IMSUM'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'IMSUM',                'PHPExcel_Calculation_Functions::IMSUM'),
  313.                 'INDEX'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE,    'INDEX',                'PHPExcel_Calculation_Functions::INDEX'),
  314.                 'INDIRECT'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE,    'INDIRECT',                'PHPExcel_Calculation_Functions::DUMMY'),
  315.                 'INFO'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION,            'INFO',                    'PHPExcel_Calculation_Functions::DUMMY'),
  316.                 'INT'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'INT',                    'intval'),
  317.                 'INTERCEPT'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'INTERCEPT',            'PHPExcel_Calculation_Functions::DUMMY'),
  318.                 'INTRATE'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'INTRATE',                'PHPExcel_Calculation_Functions::DUMMY'),
  319.                 'IPMT'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'IPMT',                    'PHPExcel_Calculation_Functions::DUMMY'),
  320.                 'IRR'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'IRR',                    'PHPExcel_Calculation_Functions::DUMMY'),
  321.                 'ISBLANK'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION,            'ISBLANK',                'PHPExcel_Calculation_Functions::IS_BLANK'),
  322.                 'ISERR'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION,            'ISERR',                'PHPExcel_Calculation_Functions::IS_ERR'),
  323.                 'ISERROR'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION,            'ISERROR',                'PHPExcel_Calculation_Functions::IS_ERROR'),
  324.                 'ISEVEN'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION,            'ISEVEN',                'PHPExcel_Calculation_Functions::IS_EVEN'),
  325.                 'ISLOGICAL'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION,            'ISLOGICAL',            'PHPExcel_Calculation_Functions::IS_LOGICAL'),
  326.                 'ISNA'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION,            'ISNA',                    'PHPExcel_Calculation_Functions::IS_NA'),
  327.                 'ISNONTEXT'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION,            'ISNONTEXT',            '!PHPExcel_Calculation_Functions::IS_TEXT'),
  328.                 'ISNUMBER'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION,            'ISNUMBER',                'PHPExcel_Calculation_Functions::IS_NUMBER'),
  329.                 'ISODD'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION,            'ISODD',                '!PHPExcel_Calculation_Functions::IS_EVEN'),
  330.                 'ISPMT'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION,            'ISPMT',                'PHPExcel_Calculation_Functions::DUMMY'),
  331.                 'ISREF'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION,            'ISREF',                'PHPExcel_Calculation_Functions::DUMMY'),
  332.                 'ISTEXT'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION,            'ISTEXT',                'PHPExcel_Calculation_Functions::IS_TEXT'),
  333.                 'JIS'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'JIS',                    'PHPExcel_Calculation_Functions::DUMMY'),
  334.                 'KURT'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'KURT',                    'PHPExcel_Calculation_Functions::KURT'),
  335.                 'LARGE'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'LARGE',                'PHPExcel_Calculation_Functions::LARGE'),
  336.                 'LCM'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'LCM',                    'PHPExcel_Calculation_Functions::LCM'),
  337.                 'LEFT'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'LEFT',                    'PHPExcel_Calculation_Functions::LEFT'),
  338.                 'LEFTB'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'LEFTB',                'PHPExcel_Calculation_Functions::DUMMY'),
  339.                 'LEN'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'LEN',                    'strlen'),
  340.                 'LENB'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'LENB',                    'PHPExcel_Calculation_Functions::DUMMY'),
  341.                 'LINEST'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'LINEST',                'PHPExcel_Calculation_Functions::DUMMY'),
  342.                 'LN'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'LN',                    'log'),
  343.                 'LOG'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'LOG',                    'log'),
  344.                 'LOG10'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'LOG10',                'log10'),
  345.                 'LOGEST'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'LOGEST',                'PHPExcel_Calculation_Functions::DUMMY'),
  346.                 'LOGINV'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'LOGINV',                'PHPExcel_Calculation_Functions::LOGINV'),
  347.                 'LOGNORMDIST'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'LOGNORMDIST',            'PHPExcel_Calculation_Functions::LOGNORMDIST'),
  348.                 'LOOKUP'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE,    'LOOKUP',                'PHPExcel_Calculation_Functions::LOOKUP'),
  349.                 'LOWER'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'LOWER',                'strtolower'),
  350.                 'MATCH'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE,    'MATCH',                'PHPExcel_Calculation_Functions::MATCH'),
  351.                 'MAX'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'MAX',                    'PHPExcel_Calculation_Functions::MAX'),
  352.                 'MAXA'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'MAXA',                    'PHPExcel_Calculation_Functions::MAXA'),
  353.                 'MDETERM'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'MDETERM',                'PHPExcel_Calculation_Functions::DUMMY'),
  354.                 'MDURATION'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'MDURATION',            'PHPExcel_Calculation_Functions::DUMMY'),
  355.                 'MEDIAN'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'MEDIAN',                'PHPExcel_Calculation_Functions::MEDIAN'),
  356.                 'MID'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'MID',                    'PHPExcel_Calculation_Functions::MID'),
  357.                 'MIDB'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'MIDB',                    'PHPExcel_Calculation_Functions::DUMMY'),
  358.                 'MIN'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'MIN',                    'PHPExcel_Calculation_Functions::MIN'),
  359.                 'MINA'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'MINA',                    'PHPExcel_Calculation_Functions::MINA'),
  360.                 'MINUTE'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME,            'MINUTE',                'PHPExcel_Calculation_Functions::MINUTEOFHOUR'),
  361.                 'MINVERSE'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'MINVERSE',                'PHPExcel_Calculation_Functions::DUMMY'),
  362.                 'MIRR'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'MIRR',                    'PHPExcel_Calculation_Functions::DUMMY'),
  363.                 'MMULT'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'MMULT',                'PHPExcel_Calculation_Functions::MMULT'),
  364.                 'MOD'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'MOD',                    'PHPExcel_Calculation_Functions::MOD'),
  365.                 'MODE'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'MODE',                    'PHPExcel_Calculation_Functions::MODE'),
  366.                 'MONTH'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME,            'MONTH',                'PHPExcel_Calculation_Functions::MONTHOFYEAR'),
  367.                 'MROUND'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'MROUND',                'PHPExcel_Calculation_Functions::MROUND'),
  368.                 'MULTINOMIAL'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'MULTINOMIAL',            'PHPExcel_Calculation_Functions::MULTINOMIAL'),
  369.                 'N'                        => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION,            'N',                    'PHPExcel_Calculation_Functions::DUMMY'),
  370.                 'NA'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION,            'NA',                    'PHPExcel_Calculation_Functions::NA'),
  371.                 'NEGBINOMDIST'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'NEGBINOMDIST',            'PHPExcel_Calculation_Functions::NEGBINOMDIST'),
  372.                 'NETWORKDAYS'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME,            'NETWORKDAYS',            'PHPExcel_Calculation_Functions::NETWORKDAYS'),
  373.                 'NOMINAL'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'NOMINAL',                'PHPExcel_Calculation_Functions::NOMINAL'),
  374.                 'NORMDIST'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'NORMDIST',                'PHPExcel_Calculation_Functions::NORMDIST'),
  375.                 'NORMINV'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'NORMINV',                'PHPExcel_Calculation_Functions::NORMINV'),
  376.                 'NORMSDIST'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'NORMSDIST',            'PHPExcel_Calculation_Functions::NORMSDIST'),
  377.                 'NORMSINV'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'NORMSINV',                'PHPExcel_Calculation_Functions::NORMSINV'),
  378.                 'NOT'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOGICAL,                'NOT',                    '!'),
  379.                 'NOW'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME,            'NOW',                    'PHPExcel_Calculation_Functions::DATETIMENOW'),
  380.                 'NPER'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'NPER',                    'PHPExcel_Calculation_Functions::NPER'),
  381.                 'NPV'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'NPV',                    'PHPExcel_Calculation_Functions::NPV'),
  382.                 'OCT2BIN'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'OCT2BIN',                'PHPExcel_Calculation_Functions::OCTTOBIN'),
  383.                 'OCT2DEC'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'OCT2DEC',                'PHPExcel_Calculation_Functions::OCTTODEC'),
  384.                 'OCT2HEX'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_ENGINEERING,            'OCT2HEX',                'PHPExcel_Calculation_Functions::OCTTOHEX'),
  385.                 'ODD'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'ODD',                    'PHPExcel_Calculation_Functions::ODD'),
  386.                 'ODDFPRICE'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'ODDFPRICE',            'PHPExcel_Calculation_Functions::DUMMY'),
  387.                 'ODDFYIELD'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'ODDFYIELD',            'PHPExcel_Calculation_Functions::DUMMY'),
  388.                 'ODDLPRICE'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'ODDLPRICE',            'PHPExcel_Calculation_Functions::DUMMY'),
  389.                 'ODDLYIELD'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'ODDLYIELD',            'PHPExcel_Calculation_Functions::DUMMY'),
  390.                 'OFFSET'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE,    'OFFSET',                'PHPExcel_Calculation_Functions::OFFSET'),
  391.                 'OR'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOGICAL,                'OR',                    'PHPExcel_Calculation_Functions::LOGICAL_OR'),
  392.                 'PEARSON'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'PEARSON',                'PHPExcel_Calculation_Functions::DUMMY'),
  393.                 'PERCENTILE'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'PERCENTILE',            'PHPExcel_Calculation_Functions::PERCENTILE'),
  394.                 'PERCENTRANK'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'PERCENTRANK',            'PHPExcel_Calculation_Functions::DUMMY'),
  395.                 'PERMUT'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'PERMUT',                'PHPExcel_Calculation_Functions::PERMUT'),
  396.                 'PHONETIC'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'PHONETIC',                'PHPExcel_Calculation_Functions::DUMMY'),
  397.                 'PI'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'PI',                    'pi'),
  398.                 'PMT'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'PMT',                    'PHPExcel_Calculation_Functions::PMT'),
  399.                 'POISSON'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'POISSON',                'PHPExcel_Calculation_Functions::POISSON'),
  400.                 'POWER'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'POWER',                'PHPExcel_Calculation_Functions::POWER'),
  401.                 'PPMT'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'PPMT',                    'PHPExcel_Calculation_Functions::DUMMY'),
  402.                 'PRICE'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'PRICE',                'PHPExcel_Calculation_Functions::DUMMY'),
  403.                 'PRICEDISC'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'PRICEDISC',            'PHPExcel_Calculation_Functions::DUMMY'),
  404.                 'PRICEMAT'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'PRICEMAT',                'PHPExcel_Calculation_Functions::DUMMY'),
  405.                 'PROB'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'PROB',                    'PHPExcel_Calculation_Functions::DUMMY'),
  406.                 'PRODUCT'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'PRODUCT',                'PHPExcel_Calculation_Functions::PRODUCT'),
  407.                 'PROPER'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'PROPER',                'ucwords'),
  408.                 'PV'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'PV',                    'PHPExcel_Calculation_Functions::PV'),
  409.                 'QUARTILE'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'QUARTILE',                'PHPExcel_Calculation_Functions::QUARTILE'),
  410.                 'QUOTIENT'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'QUOTIENT',                'PHPExcel_Calculation_Functions::QUOTIENT'),
  411.                 'RADIANS'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'RADIANS',                'deg2rad'),
  412.                 'RAND'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'RAND',                    'PHPExcel_Calculation_Functions::RAND'),
  413.                 'RANDBETWEEN'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'RANDBETWEEN',            'PHPExcel_Calculation_Functions::RAND'),
  414.                 'RANK'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'RANK',                    'PHPExcel_Calculation_Functions::DUMMY'),
  415.                 'RATE'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'RATE',                    'PHPExcel_Calculation_Functions::DUMMY'),
  416.                 'RECEIVED'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'RECEIVED',                'PHPExcel_Calculation_Functions::DUMMY'),
  417.                 'REPLACE'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'REPLACE',                'PHPExcel_Calculation_Functions::DUMMY'),
  418.                 'REPLACEB'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'REPLACEB',                'PHPExcel_Calculation_Functions::DUMMY'),
  419.                 'REPT'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'REPT',                    'str_repeat'),
  420.                 'RIGHT'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'RIGHT',                'PHPExcel_Calculation_Functions::RIGHT'),
  421.                 'RIGHTB'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'RIGHTB',                'PHPExcel_Calculation_Functions::DUMMY'),
  422.                 'ROMAN'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'ROMAN',                'PHPExcel_Calculation_Functions::DUMMY'),
  423.                 'ROUND'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'ROUND',                'round'),
  424.                 'ROUNDDOWN'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'ROUNDDOWN',            'PHPExcel_Calculation_Functions::ROUNDDOWN'),
  425.                 'ROUNDUP'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'ROUNDUP',                'PHPExcel_Calculation_Functions::ROUNDUP'),
  426.                 'ROW'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE,    'ROW',                    'PHPExcel_Calculation_Functions::ROW'),
  427.                 'ROWS'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE,    'ROWS',                    'PHPExcel_Calculation_Functions::DUMMY'),
  428.                 'RSQ'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'RSQ',                    'PHPExcel_Calculation_Functions::DUMMY'),
  429.                 'RTD'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE,    'RTD',                    'PHPExcel_Calculation_Functions::DUMMY'),
  430.                 'SEARCH'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'SEARCH',                'PHPExcel_Calculation_Functions::SEARCHINSENSITIVE'),
  431.                 'SEARCHB'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'SEARCHB',                'PHPExcel_Calculation_Functions::DUMMY'),
  432.                 'SECOND'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME,            'SECOND',                'PHPExcel_Calculation_Functions::SECONDOFMINUTE'),
  433.                 'SERIESSUM'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'SERIESSUM',            'PHPExcel_Calculation_Functions::SERIESSUM'),
  434.                 'SIGN'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'SIGN',                    'PHPExcel_Calculation_Functions::SIGN'),
  435.                 'SIN'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'SIN',                    'sin'),
  436.                 'SINH'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'SINH',                    'sinh'),
  437.                 'SKEW'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'SKEW',                    'PHPExcel_Calculation_Functions::SKEW'),
  438.                 'SLN'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'SLN',                    'PHPExcel_Calculation_Functions::SLN'),
  439.                 'SLOPE'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'SLOPE',                'PHPExcel_Calculation_Functions::DUMMY'),
  440.                 'SMALL'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'SMALL',                'PHPExcel_Calculation_Functions::SMALL'),
  441.                 'SQRT'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'SQRT',                    'sqrt'),
  442.                 'SQRTPI'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'SQRTPI',                'PHPExcel_Calculation_Functions::SQRTPI'),
  443.                 'STANDARDIZE'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'STANDARDIZE',            'PHPExcel_Calculation_Functions::STANDARDIZE'),
  444.                 'STDEV'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'STDEV',                'PHPExcel_Calculation_Functions::STDEV'),
  445.                 'STDEVA'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'STDEVA',                'PHPExcel_Calculation_Functions::STDEVA'),
  446.                 'STDEVP'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'STDEVP',                'PHPExcel_Calculation_Functions::STDEVP'),
  447.                 'STDEVPA'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'STDEVPA',                'PHPExcel_Calculation_Functions::STDEVPA'),
  448.                 'STEYX'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'STEYX',                'PHPExcel_Calculation_Functions::DUMMY'),
  449.                 'SUBSTITUTE'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'SUBSTITUTE',            'PHPExcel_Calculation_Functions::DUMMY'),
  450.                 'SUBTOTAL'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'SUBTOTAL',                'PHPExcel_Calculation_Functions::SUBTOTAL'),
  451.                 'SUM'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'SUM',                    'PHPExcel_Calculation_Functions::SUM'),
  452.                 'SUMIF'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'SUMIF',                'PHPExcel_Calculation_Functions::DUMMY'),
  453.                 'SUMIFS'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'SUMIFS',                'PHPExcel_Calculation_Functions::DUMMY'),
  454.                 'SUMPRODUCT'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'SUMPRODUCT',            'PHPExcel_Calculation_Functions::DUMMY'),
  455.                 'SUMSQ'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'SUMSQ',                'PHPExcel_Calculation_Functions::SUMSQ'),
  456.                 'SUMX2MY2'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'SUMX2MY2',                'PHPExcel_Calculation_Functions::DUMMY'),
  457.                 'SUMX2PY2'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'SUMX2PY2',                'PHPExcel_Calculation_Functions::DUMMY'),
  458.                 'SUMXMY2'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'SUMXMY2',                'PHPExcel_Calculation_Functions::DUMMY'),
  459.                 'SYD'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'SYD',                    'PHPExcel_Calculation_Functions::SYD'),
  460.                 'T'                        => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'T',                    'PHPExcel_Calculation_Functions::RETURNSTRING'),
  461.                 'TAN'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'TAN',                    'tan'),
  462.                 'TANH'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'TANH',                    'tanh'),
  463.                 'TBILLEQ'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'TBILLEQ',                'PHPExcel_Calculation_Functions::DUMMY'),
  464.                 'TBILLPRICE'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'TBILLPRICE',            'PHPExcel_Calculation_Functions::DUMMY'),
  465.                 'TBILLYIELD'            => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'TBILLYIELD',            'PHPExcel_Calculation_Functions::DUMMY'),
  466.                 'TDIST'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'TDIST',                'PHPExcel_Calculation_Functions::TDIST'),
  467.                 'TEXT'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'TEXT',                    'PHPExcel_Calculation_Functions::DUMMY'),
  468.                 'TIME'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME,            'TIME',                    'PHPExcel_Calculation_Functions::TIME'),
  469.                 'TIMEVALUE'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME,            'TIMEVALUE',            'PHPExcel_Calculation_Functions::TIMEVALUE'),
  470.                 'TINV'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'TINV',                    'PHPExcel_Calculation_Functions::TINV'),
  471.                 'TODAY'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME,            'TODAY',                'PHPExcel_Calculation_Functions::DATENOW'),
  472.                 'TRANSPOSE'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE,    'TRANSPOSE',            'PHPExcel_Calculation_Functions::TRANSPOSE'),
  473.                 'TREND'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'TREND',                'PHPExcel_Calculation_Functions::DUMMY'),
  474.                 'TRIM'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'TRIM',                    'PHPExcel_Calculation_Functions::TRIMSPACES'),
  475.                 'TRIMMEAN'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'TRIMMEAN',                'PHPExcel_Calculation_Functions::TRIMMEAN'),
  476.                 'TRUE'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOGICAL,                'TRUE',                    'PHPExcel_Calculation_Functions::LOGICAL_TRUE'),
  477.                 'TRUNC'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG,            'TRUNC',                'PHPExcel_Calculation_Functions::TRUNC'),
  478.                 'TTEST'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'TTEST',                'PHPExcel_Calculation_Functions::DUMMY'),
  479.                 'TYPE'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION,            'TYPE',                    'PHPExcel_Calculation_Functions::DUMMY'),
  480.                 'UPPER'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'UPPER',                'strtoupper'),
  481.                 'USDOLLAR'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'USDOLLAR',                'PHPExcel_Calculation_Functions::DUMMY'),
  482.                 'VALUE'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA,            'VALUE',                'PHPExcel_Calculation_Functions::DUMMY'),
  483.                 'VAR'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'VAR',                    'PHPExcel_Calculation_Functions::VARFunc'),
  484.                 'VARA'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'VARA',                    'PHPExcel_Calculation_Functions::VARA'),
  485.                 'VARP'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'VARP',                    'PHPExcel_Calculation_Functions::VARP'),
  486.                 'VARPA'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'VARPA',                'PHPExcel_Calculation_Functions::VARPA'),
  487.                 'VDB'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'VDB',                    'PHPExcel_Calculation_Functions::DUMMY'),
  488.                 'VERSION'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_INFORMATION,            'VERSION',                'PHPExcel_Calculation_Functions::VERSION'),
  489.                 'VLOOKUP'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE,    'VLOOKUP',                'PHPExcel_Calculation_Functions::VLOOKUP'),
  490.                 'WEEKDAY'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME,            'WEEKDAY',                'PHPExcel_Calculation_Functions::DAYOFWEEK'),
  491.                 'WEEKNUM'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME,            'WEEKNUM',                'PHPExcel_Calculation_Functions::WEEKOFYEAR'),
  492.                 'WEIBULL'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'WEIBULL',                'PHPExcel_Calculation_Functions::WEIBULL'),
  493.                 'WORKDAY'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME,            'WORKDAY',                'PHPExcel_Calculation_Functions::WORKDAY'),
  494.                 'XIRR'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'XIRR',                    'PHPExcel_Calculation_Functions::DUMMY'),
  495.                 'XNPV'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'XNPV',                    'PHPExcel_Calculation_Functions::DUMMY'),
  496.                 'YEAR'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME,            'YEAR',                    'PHPExcel_Calculation_Functions::YEAR'),
  497.                 'YEARFRAC'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME,            'YEARFRAC',                'PHPExcel_Calculation_Functions::YEARFRAC'),
  498.                 'YIELD'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'YIELD',                'PHPExcel_Calculation_Functions::DUMMY'),
  499.                 'YIELDDISC'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'YIELDDISC',            'PHPExcel_Calculation_Functions::DUMMY'),
  500.                 'YIELDMAT'                => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_FINANCIAL,                'YIELDMAT',                'PHPExcel_Calculation_Functions::DUMMY'),
  501.                 'ZTEST'                    => new PHPExcel_Calculation_Function(PHPExcel_Calculation_Function::CATEGORY_STATISTICAL,            'ZTEST',                'PHPExcel_Calculation_Functions::DUMMY')
  502.             );
  503.         }
  504.     }
  505.  
  506.     /**
  507.      * Is calculation caching enabled?
  508.      *
  509.      * @return boolean 
  510.      */
  511.     public function getCalculationCacheEnabled({
  512.         return $this->_calculationCacheEnabled;
  513.     }
  514.  
  515.     /**
  516.      * Enable/disable calculation cache
  517.      *
  518.      * @param boolean $pValue 
  519.      */
  520.     public function setCalculationCacheEnabled($pValue{
  521.         $this->_calculationCacheEnabled = $pValue;
  522.         $this->clearCalculationCache();
  523.     }
  524.  
  525.     /**
  526.      * Clear calculation cache
  527.      */
  528.     public function clearCalculationCache({
  529.         $this->_calculationCache = array();
  530.     }
  531.  
  532.     /**
  533.      * Get calculation cache expiration time
  534.      *
  535.      * @return float 
  536.      */
  537.     public function getCalculationCacheExpirationTime({
  538.         return $this->_calculationCacheExpirationTime;
  539.     }
  540.  
  541.     /**
  542.      * Set calculation cache expiration time
  543.      *
  544.      * @param float $pValue 
  545.      */
  546.     public function setCalculationCacheExpirationTime($pValue 0.01{
  547.         $this->_calculationCacheExpirationTime = $pValue;
  548.     }
  549.  
  550.     /**
  551.      * Calculate cell value (using formula)
  552.      *
  553.      * @param    PHPExcel_Cell    $pCell    Cell to calculate
  554.      * @return    mixed 
  555.      * @throws    Exception
  556.      */
  557.     public function calculate(PHPExcel_Cell $pCell null{
  558.         // Return value
  559.         $returnValue '';
  560.  
  561.         // Is the value present in calculation cache?
  562.         if ($this->getCalculationCacheEnabled ()) {
  563.             if (isset $this->_calculationCache [$pCell->getParent ()->getTitle ()[$pCell->getCoordinate ())) {
  564.                 if ((time (microtime ()) $this->_calculationCache [$pCell->getParent ()->getTitle ()[$pCell->getCoordinate ()['time'$this->_calculationCacheExpirationTime{
  565.                     // Return result
  566.                     $returnValue $this->_calculationCache [$pCell->getParent ()->getTitle ()[$pCell->getCoordinate ()['data'];
  567.                     if ((is_array($returnValue)) && (self::$returnArrayAsType == self::RETURN_ARRAY_AS_VALUE)) {
  568.                         return array_shift(PHPExcel_Calculation_Functions::flattenArray($returnValue));
  569.                     }
  570.                     return $returnValue;
  571.                 else {
  572.                     unset $this->_calculationCache [$pCell->getParent ()->getTitle ()[$pCell->getCoordinate ());
  573.                 }
  574.             }
  575.         }
  576.  
  577.         // Formula
  578.         $formula $pCell->getValue ();
  579.  
  580.         // Executable formula array
  581.         $executableFormulaArray array );
  582.  
  583.         // Parse formula into a tree of tokens
  584.         $objParser new PHPExcel_Calculation_FormulaParser $formula );
  585.  
  586.         // Loop trough parsed tokens and create an executable formula
  587.         $inFunction false;
  588.         $token null;
  589.         $tokenCount $objParser->getTokenCount();
  590.         for($i 0$i $tokenCount++$i{
  591.             $token $objParser->getToken $i );
  592.             $tokenType $token->getTokenType();
  593.             $tokenSubType $token->getTokenSubType();
  594.             $tokenValue $token->getValue();
  595.  
  596.              // Is it a cell reference? Not in a function?
  597.             if (($tokenType == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND&& ($tokenSubType == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_RANGE&& (strpos ($tokenValue':' === false) ) {
  598.                  // Adjust reference
  599.                  $reference str_replace '$'''$tokenValue);
  600.  
  601.                 // Add to executable formula array
  602.                 $executableFormulaArray['$this->extractCell("'.$reference.'", $pCell)';
  603.  
  604.                  continue;
  605.              }
  606.  
  607.              // Is it a cell reference? In a function?
  608.             if (($tokenType == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND&& ($tokenSubType == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_RANGE)) {
  609.                  // Adjust reference
  610.                  $reference str_replace '$'''$tokenValue );
  611.  
  612.                 // Add to executable formula array
  613.                 $executableFormulaArray['$this->extractRange("'.$reference.'", $pCell->getParent())';
  614.  
  615.                 continue;
  616.             }
  617.  
  618.             // Is it a concatenation operator?
  619.             if (($tokenType == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX&& ($tokenSubType == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_CONCATENATION)) {
  620.                 // Add to executable formula array
  621.                 $executableFormulaArray['.';
  622.  
  623.                 continue;
  624.             }
  625.  
  626.             // Is it a logical operator?
  627.             if (($tokenType == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX&& ($tokenSubType == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_LOGICAL)) {
  628.                 // Temporary variable
  629.                 $tmp '';
  630.                 switch ($tokenValue{
  631.                     case '=' :
  632.                         $tmp '==';
  633.                     break;
  634.                     case '<>' :
  635.                         $tmp '!=';
  636.                     break;
  637.                     default :
  638.                         $tmp $tokenValue;
  639.                 }
  640.  
  641.                 // Add to executable formula array
  642.                 $executableFormulaArray[$tmp;
  643.  
  644.                 continue;
  645.             }
  646.  
  647.             // Is it a subexpression?
  648.             if ($tokenType == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION{
  649.                 // Temporary variable
  650.                 $tmp '';
  651.                 switch ($tokenSubType{
  652.                     case PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START :
  653.                         $tmp '(';
  654.                     break;
  655.                     case PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP :
  656.                         $tmp ')';
  657.                     break;
  658.                 }
  659.  
  660.                 // Add to executable formula array
  661.                 $executableFormulaArray[$tmp;
  662.  
  663.                 continue;
  664.             }
  665.  
  666.             // Is it a function?
  667.             if ($tokenType == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION{
  668.                 // Temporary variable
  669.                 $tmp '';
  670.  
  671.                 // Check the function type
  672.                 if ($tokenValue == 'ARRAY' || $tokenValue == 'ARRAYROW'{
  673.                     // An array or an array row...
  674.                     $tmp 'array(';
  675.                 else {
  676.                     // A regular function call...
  677.                     switch ($tokenSubType{
  678.                         case PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START :
  679.                             // Check if the function call is allowed...
  680.                             if (isset $this->_functionMappings [strtoupper ($tokenValue))) {
  681.                                 return '#NAME?';
  682.                             }
  683.  
  684.                             // Map the function call
  685.                             $tmp $this->_functionMappings [strtoupper ($tokenValue)]->getPHPExcelName ('(';
  686.                             $inFunction true;
  687.                         break;
  688.                         case PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP :
  689.                             $tmp ')';
  690.                         break;
  691.                     }
  692.                 }
  693.  
  694.                 // Add to executable formula array
  695.                 $executableFormulaArray[$tmp;
  696.  
  697.                 continue;
  698.             }
  699.  
  700.             // Is it text?
  701.             if (($tokenType == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND&& ($tokenSubType == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_TEXT)) {
  702.                 // Temporary variable
  703.                 $tmp $tokenValue;
  704.                 $tmp str_replace('"''\"'$tmp);
  705.  
  706.                 // Add to executable formula array
  707.                 $executableFormulaArray['"'.$tmp.'"';
  708.  
  709.                 continue;
  710.             }
  711.  
  712.             // Is it a number?
  713.             if (($tokenType == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND&& ($tokenSubType == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NUMBER)) {
  714.                 // Add to executable formula array
  715.                 $executableFormulaArray[$tokenValue;
  716.  
  717.                 continue;
  718.             }
  719.  
  720.             // Is it an error? Add it as text...
  721.             if (($tokenType == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND&& ($tokenSubType == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_ERROR)) {
  722.                 // Add to executable formula array
  723.                 $executableFormulaArray['"'.$tokenValue.'"';
  724.  
  725.                 continue;
  726.             }
  727.  
  728.             // Is it something else?
  729.             $executableFormulaArray[$tokenValue;
  730.         }
  731.  
  732.         $fromArray    array('(,',        ',,',        ',)',        '( ,',        ', ,',        ', )',        '$this');
  733.         $toArray    array('(null,',    ',null,',    ',null)',    '(null,',    ',null,',    ',null)',    '$pThat');
  734.         // Evaluate formula
  735.         try {
  736.             $formula implode ' '$executableFormulaArray );
  737.             $formula str_replace $fromArray$toArray$formula );
  738.  
  739.             /*
  740.              * The following code block can cause an error like:
  741.              *      Fatal error: Unsupported operand types in ...: runtime-created function on line 1
  742.              *
  743.              * This is due to the fact that a FATAL error is an E_ERROR,
  744.              * and it can not be caught using try/catch or any other
  745.              * Exception/error handling feature in PHP.
  746.              *
  747.              * A feature request seems to be made once, but it has been
  748.              * closed without any deliverables:
  749.              *      http://bugs.php.net/bug.php?id=40014
  750.              */
  751.             $temporaryCalculationFunction @create_function '$pThat, $pCell'"return $formula;);
  752.             if ($temporaryCalculationFunction === FALSE{
  753.                 $returnValue '#N/A';
  754.             else {
  755.                 $returnValue @$temporaryCalculationFunction $this $pCell );
  756.             }
  757.         catch Exception $ex {
  758.             $returnValue '#N/A';
  759.         }
  760.  
  761.         // Save to calculation cache
  762.         if ($this->getCalculationCacheEnabled ()) {
  763.             $this->_calculationCache [$pCell->getParent ()->getTitle ()[$pCell->getCoordinate ()['time'(time (microtime ());
  764.             $this->_calculationCache [$pCell->getParent ()->getTitle ()[$pCell->getCoordinate ()['data'$returnValue;
  765.         }
  766.  
  767.         // Return result
  768.         if ((is_array($returnValue)) && (self::$returnArrayAsType == self::RETURN_ARRAY_AS_VALUE)) {
  769.             return array_shift(PHPExcel_Calculation_Functions::flattenArray($returnValue));
  770.         }
  771.         return $returnValue;
  772.     }
  773.  
  774.     /**
  775.      * __clone implementation. Cloning should not be allowed in a Singleton!
  776.      *
  777.      * @throws    Exception
  778.      */
  779.     public final function __clone({
  780.         throw new Exception "Cloning a Singleton is not allowed!" );
  781.     }
  782.  
  783.     /**
  784.      * Extract range values
  785.      *
  786.      * @param    string                $pRange        String based range representation
  787.      * @param    PHPExcel_Worksheet    $pSheet        Worksheet
  788.      * @return  mixed                Array of values in range if range contains more than one element. Otherwise, a single value is returned.
  789.      * @throws    Exception
  790.      */
  791.     public function extractRange($pRange 'A1'PHPExcel_Worksheet $pSheet null{
  792.         // Return value
  793.         $returnValue array );
  794.  
  795.         // Worksheet given?
  796.         if (is_null $pSheet )) {
  797.             // Worksheet reference?
  798.             if (strpos $pRange'!' !== false{
  799.                 $worksheetReference PHPExcel_Worksheet::extractSheetTitle $pRangetrue );
  800.                 $pSheet $pSheet->getParent ()->getSheetByName $worksheetReference [0);
  801.                 $pRange $worksheetReference [1];
  802.             }
  803.  
  804.             // Named range?
  805.             $namedRange PHPExcel_NamedRange::resolveRange $pRange$pSheet );
  806.             if (is_null $namedRange )) {
  807.                 $pRange $namedRange->getRange ();
  808.                 if ($pSheet->getHashCode (!= $namedRange->getWorksheet ()->getHashCode ()) {
  809.                     if ($namedRange->getLocalOnly ()) {
  810.                         $pSheet $namedRange->getWorksheet ();
  811.                     else {
  812.                         return '';
  813.                     }
  814.                 }
  815.             }
  816.  
  817.             // Extract range
  818.             $aReferences PHPExcel_Cell::extractAllCellReferencesInRange $pRange );
  819.             ifcount $aReferences == ){
  820.                 return $pSheet->getCell $aReferences[0)->getCalculatedValue ();
  821.             }
  822.  
  823.             // Extract cell data
  824.             foreach $aReferences as $reference {
  825.                 // Extract range
  826.                 list $currentCol$currentRow PHPExcel_Cell::coordinateFromString $reference );
  827.  
  828.                 $returnValue [$currentCol[$currentRow$pSheet->getCell $reference )->getCalculatedValue ();
  829.             }
  830.         }
  831.  
  832.         // Return
  833.         return $returnValue;
  834.     }
  835.  
  836.     /**
  837.      * Extract cell
  838.      *
  839.      * @param     string $reference 
  840.      * @param    PHPExcel_Cell $pCell 
  841.      * @return    mixed    Value
  842.      */
  843.     public function extractCell($reference 'A1'PHPExcel_Cell $pCell null{
  844.         $cell $pCell->getParent ()->getCell $reference );
  845.         if ($cell->getValue (instanceof PHPExcel_RichText{
  846.             return $cell->getValue ()->getPlainText ();
  847.         else {
  848.             return $cell->getCalculatedValue ();
  849.         }
  850.     }
  851.  
  852.     /**
  853.      * Is a specific function implemented?
  854.      *
  855.      * @param    string    $pFunction    Function
  856.      * @return    boolean 
  857.      */
  858.     public function isImplemented($pFunction ''{
  859.         $pFunction strtoupper $pFunction );
  860.         if (isset $this->_functionMappings [$pFunction)) {
  861.             return $this->_functionMappings [$pFunction]->getPHPExcelName (== 'PHPExcel_Calculation_Functions::DUMMY';
  862.         else {
  863.             return false;
  864.         }
  865.     }
  866.  
  867.     /**
  868.      * Get a list of implemented functions
  869.      *
  870.      * @return    array 
  871.      */
  872.     public function listFunctions({
  873.         // Return value
  874.         $returnValue array();
  875.  
  876.         // Functions
  877.         $aFunctions $this->_functionMappings;
  878.         // Loop functions
  879.         foreach ($aFunctions as $function{
  880.             if ($function->getPHPExcelName(!= 'PHPExcel_Calculation_Functions::DUMMY'{
  881.                 $returnValue[$function;
  882.             }
  883.         }
  884.  
  885.         // Return
  886.         return $returnValue;
  887.     }
  888.  
  889.     /**
  890.      * Get a list of implemented Excel function names
  891.      *
  892.      * @return    array 
  893.      */
  894.     public function listFunctionNames({
  895.         // Return value
  896.         $returnValue array();
  897.  
  898.         // Function names
  899.         $aFunctions $this->listFunctions();
  900.         // Loop functions
  901.         foreach ($aFunctions as $function{
  902.             $returnValue[$function->getExcelName();
  903.         }
  904.  
  905.         // Return
  906.         return $returnValue;
  907.     }
  908. }
  909.  
  910. ?>

Documentation generated on Mon, 05 Jan 2009 20:36:37 +0100 by phpDocumentor 1.4.1