Documentation Index
Fetch the complete documentation index at: https://mintlify.com/PHPOffice/PhpSpreadsheet/llms.txt
Use this file to discover all available pages before exploring further.
Overview
The NumberFormat class controls how numbers, dates, times, currencies, and percentages are displayed in cells. It provides pre-defined format codes and supports custom format strings.
Namespace
PhpOffice\PhpSpreadsheet\Style\NumberFormat
// Via Style object
$numberFormat = $spreadsheet->getActiveSheet()->getStyle('A1')->getNumberFormat();
// Via chaining
$spreadsheet->getActiveSheet()->getStyle('A1')
->getNumberFormat()
->setFormatCode(NumberFormat::FORMAT_CURRENCY_USD);
General and Text
FORMAT_GENERAL
string
default:"'General'"
General number format (default)
Text format (displays values as-is)
Number with 1 decimal place
Number with 2 decimal places
FORMAT_NUMBER_COMMA_SEPARATED1
string
default:"'#,##0.00'"
Number with thousand separators and 2 decimals
FORMAT_NUMBER_COMMA_SEPARATED2
string
default:"'#,##0.00_-'"
Number with thousand separators, 2 decimals, and trailing space
Percentage with 1 decimal place
Percentage with 2 decimal places
FORMAT_DATE_YYYYMMDD
string
default:"'yyyy-mm-dd'"
Date format: 2024-03-04
FORMAT_DATE_DDMMYYYY
string
default:"'dd/mm/yyyy'"
Date format: 04/03/2024
FORMAT_DATE_XLSX14
string
default:"'mm-dd-yy'"
Date format: 03-04-24
FORMAT_DATE_XLSX15
string
default:"'d-mmm-yy'"
Date format: 4-Mar-24
FORMAT_DATE_LONG_DATE
string
default:"'dddd, mmmm d, yyyy'"
Long date format: Monday, March 4, 2024
FORMAT_DATE_TIME1
string
default:"'h:mm AM/PM'"
Time format: 2:30 PM
FORMAT_DATE_TIME2
string
default:"'h:mm:ss AM/PM'"
Time format: 2:30:45 PM
FORMAT_DATE_TIME4
string
default:"'h:mm:ss'"
Time format: 14:30:45
FORMAT_DATE_TIME6
string
default:"'h:mm:ss'"
Time format: 14:30:45
FORMAT_DATE_TIME_INTERVAL_HMS
string
default:"'[hh]:mm:ss'"
Time interval format: [25]:30:45
FORMAT_DATE_DATETIME
string
default:"'d/m/yy h:mm'"
DateTime format: 4/3/24 14:30
FORMAT_DATE_DATETIME_BETTER
string
default:"'yyyy-mm-dd hh:mm'"
DateTime format: 2024-03-04 14:30
FORMAT_DATE_XLSX22
string
default:"'m/d/yy h:mm'"
DateTime format: 3/4/24 14:30
FORMAT_CURRENCY_USD
string
default:"'$#,##0.00_-'"
US Dollar with 2 decimals: $1,234.56
FORMAT_CURRENCY_USD_INTEGER
string
default:"'$#,##0_-'"
US Dollar integer: $1,235
FORMAT_CURRENCY_EUR
string
default:"'#,##0.00_-[$€]'"
Euro with 2 decimals: 1,234.56€
FORMAT_CURRENCY_EUR_INTEGER
string
default:"'#,##0_-[$€]'"
Euro integer: 1,235€
FORMAT_CURRENCY_GBP
string
default:"'£#,##0.00_-'"
British Pound: £1,234.56
FORMAT_CURRENCY_YEN_YUAN
string
default:"'ï¿¥#,##0.00_-'"
Yen/Yuan: ï¿¥1,234.56
US Dollar accounting format
Methods
Get the format code.
public function getFormatCode(bool $extended = false): ?string
Whether to return extended format (converts system formats)
Set the format code.
public function setFormatCode(string $formatCode): static
Format code string (use FORMAT_* constants or custom format)
Example:
$numberFormat->setFormatCode(NumberFormat::FORMAT_CURRENCY_USD);
$numberFormat->setFormatCode(NumberFormat::FORMAT_PERCENTAGE_00);
$numberFormat->setFormatCode('0.000'); // Custom format
Get the built-in format code index.
public function getBuiltInFormatCode(): false|int
Returns: Built-in format index or false if not a built-in format
Set format using a built-in format code index.
public function setBuiltInFormatCode(int $formatCodeIndex): static
Built-in format code index (0-49)
applyFromArray()
Apply number format from array.
public function applyFromArray(array $styleArray): static
Array with ‘formatCode’ key
Example:
$numberFormat->applyFromArray([
'formatCode' => NumberFormat::FORMAT_CURRENCY_EUR
]);
Static Methods
Get a built-in format code by index.
public static function builtInFormatCode(int $index): string
Get the index of a built-in format code.
public static function builtInFormatCodeIndex(string $formatCodeIndex): false|int
Convert a value to a formatted string.
public static function toFormattedString(
mixed $value,
string $format,
?array $callBack = null,
bool $lessFloatPrecision = false
): string
Optional callback function for additional formatting
Use less precise float conversion
Complete Examples
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// Integer
$sheet->setCellValue('A1', 1234);
$sheet->getStyle('A1')->getNumberFormat()
->setFormatCode(NumberFormat::FORMAT_NUMBER);
// 2 decimal places
$sheet->setCellValue('A2', 1234.5678);
$sheet->getStyle('A2')->getNumberFormat()
->setFormatCode(NumberFormat::FORMAT_NUMBER_00);
// Thousands separator
$sheet->setCellValue('A3', 1234567.89);
$sheet->getStyle('A3')->getNumberFormat()
->setFormatCode(NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1);
// Custom: 3 decimal places
$sheet->setCellValue('A4', 123.456789);
$sheet->getStyle('A4')->getNumberFormat()
->setFormatCode('0.000');
// No decimals
$sheet->setCellValue('B1', 0.75); // Stored as 0.75
$sheet->getStyle('B1')->getNumberFormat()
->setFormatCode(NumberFormat::FORMAT_PERCENTAGE); // Displays as 75%
// 2 decimal places
$sheet->setCellValue('B2', 0.7545);
$sheet->getStyle('B2')->getNumberFormat()
->setFormatCode(NumberFormat::FORMAT_PERCENTAGE_00); // Displays as 75.45%
// US Dollars
$sheet->setCellValue('C1', 1234.56);
$sheet->getStyle('C1')->getNumberFormat()
->setFormatCode(NumberFormat::FORMAT_CURRENCY_USD);
// Euros
$sheet->setCellValue('C2', 1234.56);
$sheet->getStyle('C2')->getNumberFormat()
->setFormatCode(NumberFormat::FORMAT_CURRENCY_EUR);
// British Pounds
$sheet->setCellValue('C3', 1234.56);
$sheet->getStyle('C3')->getNumberFormat()
->setFormatCode(NumberFormat::FORMAT_CURRENCY_GBP);
// Custom currency
$sheet->setCellValue('C4', 1234.56);
$sheet->getStyle('C4')->getNumberFormat()
->setFormatCode('"Â¥"#,##0.00'); // Japanese Yen
use PhpOffice\PhpSpreadsheet\Shared\Date;
// Excel date values are days since 1900-01-01
$dateValue = Date::PHPToExcel('2024-03-04');
// yyyy-mm-dd format
$sheet->setCellValue('D1', $dateValue);
$sheet->getStyle('D1')->getNumberFormat()
->setFormatCode(NumberFormat::FORMAT_DATE_YYYYMMDD);
// dd/mm/yyyy format
$sheet->setCellValue('D2', $dateValue);
$sheet->getStyle('D2')->getNumberFormat()
->setFormatCode(NumberFormat::FORMAT_DATE_DDMMYYYY);
// Long date format
$sheet->setCellValue('D3', $dateValue);
$sheet->getStyle('D3')->getNumberFormat()
->setFormatCode(NumberFormat::FORMAT_DATE_LONG_DATE);
// Custom date format
$sheet->setCellValue('D4', $dateValue);
$sheet->getStyle('D4')->getNumberFormat()
->setFormatCode('mmm d, yyyy'); // Mar 4, 2024
$timeValue = Date::PHPToExcel('2024-03-04 14:30:45');
// 12-hour format with AM/PM
$sheet->setCellValue('E1', $timeValue);
$sheet->getStyle('E1')->getNumberFormat()
->setFormatCode(NumberFormat::FORMAT_DATE_TIME1);
// 24-hour format
$sheet->setCellValue('E2', $timeValue);
$sheet->getStyle('E2')->getNumberFormat()
->setFormatCode(NumberFormat::FORMAT_DATE_TIME4);
// Time with seconds
$sheet->setCellValue('E3', $timeValue);
$sheet->getStyle('E3')->getNumberFormat()
->setFormatCode('h:mm:ss AM/PM');
$dateTimeValue = Date::PHPToExcel('2024-03-04 14:30:45');
// Standard datetime
$sheet->setCellValue('F1', $dateTimeValue);
$sheet->getStyle('F1')->getNumberFormat()
->setFormatCode(NumberFormat::FORMAT_DATE_DATETIME);
// ISO datetime
$sheet->setCellValue('F2', $dateTimeValue);
$sheet->getStyle('F2')->getNumberFormat()
->setFormatCode(NumberFormat::FORMAT_DATE_DATETIME_BETTER);
// Custom datetime
$sheet->setCellValue('F3', $dateTimeValue);
$sheet->getStyle('F3')->getNumberFormat()
->setFormatCode('yyyy-mm-dd hh:mm:ss');
Text Format
// Force text format (preserves leading zeros, etc.)
$sheet->setCellValue('G1', '00123');
$sheet->getStyle('G1')->getNumberFormat()
->setFormatCode(NumberFormat::FORMAT_TEXT);
// ZIP codes
$sheet->setCellValue('G2', '02134');
$sheet->getStyle('G2')->getNumberFormat()
->setFormatCode(NumberFormat::FORMAT_TEXT);
// Positive/Negative/Zero/Text format
$sheet->setCellValue('H1', 1234.56);
$sheet->getStyle('H1')->getNumberFormat()
->setFormatCode('#,##0.00_);[Red](#,##0.00);0.00;@');
// Phone number format
$sheet->setCellValue('H2', '5551234567');
$sheet->getStyle('H2')->getNumberFormat()
->setFormatCode('(000) 000-0000');
// Fractions
$sheet->setCellValue('H3', 0.75);
$sheet->getStyle('H3')->getNumberFormat()
->setFormatCode('# ?/?'); // Displays as 3/4
// Scientific notation
$sheet->setCellValue('H4', 12345678);
$sheet->getStyle('H4')->getNumberFormat()
->setFormatCode('0.00E+00');
// Different colors for positive/negative
$sheet->getStyle('I1')->getNumberFormat()
->setFormatCode('[Green]#,##0.00;[Red](#,##0.00)');
// Show different text for different ranges
$sheet->getStyle('I2')->getNumberFormat()
->setFormatCode('[>=1000]"High: "#,##0;[>=100]"Medium: "#,##0;"Low: "#,##0');
Apply to Range
// Apply currency format to entire column
$sheet->getStyle('C:C')->getNumberFormat()
->setFormatCode(NumberFormat::FORMAT_CURRENCY_USD);
// Apply date format to range
$sheet->getStyle('D1:D100')->getNumberFormat()
->setFormatCode(NumberFormat::FORMAT_DATE_YYYYMMDD);
// Using applyFromArray
$sheet->getStyle('E1:E100')->applyFromArray([
'numberFormat' => [
'formatCode' => NumberFormat::FORMAT_PERCENTAGE_00
]
]);
Number formats can have up to 4 sections separated by semicolons:
Positive;Negative;Zero;Text
Format codes:
0 - Digit placeholder (shows 0 if no digit)
# - Digit placeholder (shows nothing if no digit)
. - Decimal point
, - Thousands separator
% - Percentage
@ - Text placeholder
[Color] - Color (Red, Blue, Green, etc.)
"text" - Literal text
[$currency] - Currency symbol
Examples:
// Custom formats
'0.00' // 2 decimal places
'#,##0.00' // Thousands separator
'$#,##0.00' // Currency
'0.00%;-0.00%;0.00%;@' // Percentage with all sections
'[Green]#,##0;[Red](#,##0);0' // Colored positive/negative
'"Qty: "#,##0' // With prefix text
'#,##0.00" units"' // With suffix text
'0.00E+00' // Scientific notation
'# ?/?' // Fraction
'[h]:mm:ss' // Time interval
See Also