Source for file NumberFormat.php
Documentation is available at NumberFormat.php 
 * Copyright (c) 2006 - 2009 PHPExcel  
 * This library is free software; you can redistribute it and/or  
 * modify it under the terms of the GNU Lesser General Public  
 * License as published by the Free Software Foundation; either  
 * version 2.1 of the License, or (at your option) any later version.  
 * This library is distributed in the hope that it will be useful,  
 * but WITHOUT ANY WARRANTY; without even the implied warranty of  
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  
 * Lesser General Public License for more details.  
 * You should have received a copy of the GNU Lesser General Public  
 * License along with this library; if not, write to the Free Software  
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA  
 * @package    PHPExcel_Style  
 * @copyright  Copyright (c) 2006 - 2009 PHPExcel (http://www.codeplex.com/PHPExcel)  
 * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL  
 * @version    1.6.5, 2009-01-05  
/** PHPExcel_IComparable */  
require_once 'PHPExcel/IComparable.php';  
 * PHPExcel_Style_NumberFormat  
 * @package    PHPExcel_Style  
 * @copyright  Copyright (c) 2006 - 2009 PHPExcel (http://www.codeplex.com/PHPExcel)  
    /* Pre-defined formats */  
    const FORMAT_GENERAL                    =  'General';  
    const FORMAT_NUMBER                        =  '0';  
    const FORMAT_NUMBER_00                    =  '0.00';  
    const FORMAT_NUMBER_COMMA_SEPARATED1    =  '#,##0.00';  
    const FORMAT_NUMBER_COMMA_SEPARATED2    =  '#,##0.00_-';  
    const FORMAT_PERCENTAGE                    =  '0%';  
    const FORMAT_PERCENTAGE_00                =  '0.00%';  
    const FORMAT_DATE_YYYYMMDD                =  'yy-mm-dd';  
    const FORMAT_DATE_DDMMYYYY                =  'dd/mm/yy';  
    const FORMAT_DATE_DMYSLASH                =  'd/m/y';  
    const FORMAT_DATE_DMYMINUS                =  'd-m-y';  
    const FORMAT_DATE_DMMINUS                =  'd-m';  
    const FORMAT_DATE_MYMINUS                =  'm-y';  
    const FORMAT_DATE_DATETIME                =  'd/m/y h:mm';  
    const FORMAT_DATE_TIME1                    =  'h:mm AM/PM';  
    const FORMAT_DATE_TIME2                    =  'h:mm:ss AM/PM';  
    const FORMAT_DATE_TIME3                    =  'h:mm';  
    const FORMAT_DATE_TIME4                    =  'h:mm:ss';  
    const FORMAT_DATE_TIME5                    =  'mm:ss';  
    const FORMAT_DATE_TIME6                    =  'h:mm:ss';  
    const FORMAT_DATE_TIME7                    =  'i:s.S';  
    const FORMAT_DATE_TIME8                    =  'h:mm:ss;@';  
    const FORMAT_DATE_YYYYMMDDSLASH            =  'yy/mm/dd;@';  
    const FORMAT_CURRENCY_USD_SIMPLE        =  '"$"#,##0.00_-';  
    const FORMAT_CURRENCY_USD                =  '$#,##0_-';  
    const FORMAT_CURRENCY_EUR_SIMPLE        =  '[$EUR ]#,##0.00_-';  
     * Excel built-in number formats  
    private static $_builtInFormats;  
     * @var _parentPropertyName string  
     * Create a new PHPExcel_Style_NumberFormat  
     * Configures this object for late binding as a property of a parent object  
     * @param $parentPropertyName   
        // Initialize parent PHPExcel_Style for late binding. This relationship purposely ends immediately when this object  
        // is bound to the PHPExcel_Style object pointed to so as to prevent circular references.  
     * Returns the PHPExcel_Style_NumberFormat that is actual bound to PHPExcel_Style  
     * @return PHPExcel_Style_NumberFormat   
            return $this;                                                                // I am bound  
        return $this;                                                                    // No one is bound yet  
     * If no PHPExcel_Style_NumberFormat has been bound to PHPExcel_Style then bind this one. Return the actual bound one.  
     * @return PHPExcel_Style_NumberFormat   
            return $this;                                                                // I am already bound  
     * Apply styles from array  
     * $objPHPExcel->getActiveSheet()->getStyle('B2')->getNumberFormat()->applyFromArray(  
     *             'code' => PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE  
     * @param    array    $pStyles    Array containing style information  
            throw  new Exception("Invalid style array passed."); 
    public function setFormatCode($pValue =  PHPExcel_Style_NumberFormat::FORMAT_GENERAL) {  
     * Get built-in format code  
        if (is_null(self::$_builtInFormats)) {  
            self::$_builtInFormats =  array();  
            self::$_builtInFormats[0] =  'General';  
            self::$_builtInFormats[1] =  '0';  
            self::$_builtInFormats[2] =  '0.00';  
            self::$_builtInFormats[3] =  '#,##0';  
            self::$_builtInFormats[4] =  '#,##0.00';  
            self::$_builtInFormats[9] =  '0%';  
            self::$_builtInFormats[10] =  '0.00%';  
            self::$_builtInFormats[11] =  '0.00E+00';  
            self::$_builtInFormats[12] =  '# ?/?';  
            self::$_builtInFormats[13] =  '# ??/??';  
            self::$_builtInFormats[14] =  'mm-dd-yy';  
            self::$_builtInFormats[15] =  'd-mmm-yy';  
            self::$_builtInFormats[16] =  'd-mmm';  
            self::$_builtInFormats[17] =  'mmm-yy';  
            self::$_builtInFormats[18] =  'h:mm AM/PM';  
            self::$_builtInFormats[19] =  'h:mm:ss AM/PM';  
            self::$_builtInFormats[20] =  'h:mm';  
            self::$_builtInFormats[21] =  'h:mm:ss';  
            self::$_builtInFormats[22] =  'm/d/yy h:mm';  
            self::$_builtInFormats[37] =  '#,##0 ;(#,##0)';  
            self::$_builtInFormats[38] =  '#,##0 ;[Red](#,##0)';  
            self::$_builtInFormats[39] =  '#,##0.00;(#,##0.00)';  
            self::$_builtInFormats[40] =  '#,##0.00;[Red](#,##0.00)';  
            self::$_builtInFormats[45] =  'mm:ss';  
            self::$_builtInFormats[46] =  '[h]:mm:ss';  
            self::$_builtInFormats[47] =  'mmss.0';  
            self::$_builtInFormats[48] =  '##0.0E+0';  
            self::$_builtInFormats[49] =  '@';  
            self::$_builtInFormats[27] =  '[$-404]e/m/d';  
            self::$_builtInFormats[30] =  'm/d/yy';  
            self::$_builtInFormats[36] =  '[$-404]e/m/d';  
            self::$_builtInFormats[50] =  '[$-404]e/m/d';  
            self::$_builtInFormats[57] =  '[$-404]e/m/d';  
            self::$_builtInFormats[59] =  't0';  
            self::$_builtInFormats[60] =  't0.00';  
            self::$_builtInFormats[61] =  't#,##0';  
            self::$_builtInFormats[62] =  't#,##0.00';  
            self::$_builtInFormats[67] =  't0%';  
            self::$_builtInFormats[68] =  't0.00%';  
            self::$_builtInFormats[69] =  't# ?/?';  
            self::$_builtInFormats[70] =  't# ??/??';  
        if (array_key_exists($pIndex, self::$_builtInFormats)) {  
            return self::$_builtInFormats[$pIndex];  
     * @return string    Hash code  
     * Note that this index may vary during script execution! Only reliable moment is  
     * while doing a write of a workbook and when changes are not allowed.  
     * @return string    Hash index  
     * Note that this index may vary during script execution! Only reliable moment is  
     * while doing a write of a workbook and when changes are not allowed.  
     * @param string    $value    Hash index  
     * Implement PHP __clone to create a deep clone, not just a shallow copy.  
        foreach ($vars as $key =>  $value) {  
                $this->$key =  clone $value;  
     * Convert a value in a pre-defined format to a PHP string  
     * @param mixed     $value        Value to format  
     * @param string     $format        Format code  
     * @return string    Formatted string  
        if (preg_match("/^[hmsdy]/i", $format)) { // custom datetime format  
            // dvc: convert Excel formats to PHP date formats  
            // first remove escapes related to non-format characters  
            // first letter of month - no php equivalent  
            // mm is minutes if time or month w/leading zero  
            // fractional seconds - no php equivalent  
            if (!strpos($format,'A')) { // 24-hour format  
            // user defined flag symbol????  
            return date($format, (1 *  $value));  
        } else if (preg_match('/%$/', $format)) { // % number format  
                    case self::FORMAT_NUMBER:   
                    case self::FORMAT_NUMBER_00:   
                    case self::FORMAT_NUMBER_COMMA_SEPARATED1:   
                    case self::FORMAT_NUMBER_COMMA_SEPARATED2:   
                    case self::FORMAT_PERCENTAGE:   
                        return round( (100 *  $value), 0) .  '%';  
                    case self::FORMAT_PERCENTAGE_00:   
                        return round( (100 *  $value), 2) .  '%';  
                    case self::FORMAT_DATE_YYYYMMDD:   
                        return date('Y-m-d', (1 *  $value));  
                    case self::FORMAT_DATE_DDMMYYYY:   
                        return date('d/m/Y', (1 *  $value));  
                        return date('Y/m/d', (1 *  $value));  
                    case self::FORMAT_CURRENCY_USD_SIMPLE:   
                    case self::FORMAT_CURRENCY_USD:   
                     case self::FORMAT_CURRENCY_EUR_SIMPLE:   
                         return 'EUR ' .  sprintf('%1.2f', $value);  
 
 
        
       |