diff --git a/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php b/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php index 3e4bdc46..be195a88 100644 --- a/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php +++ b/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php @@ -112,6 +112,9 @@ class Formatter return $value; } + // Ignore square-$-brackets prefix in format string, like "[$-411]ge.m.d", "[$-010419]0%", etc + $format = (string) preg_replace('/^\[\$-[^\]]*\]/', '', $format); + $format = (string) preg_replace_callback( '/(["])(?:(?=(\\\\?))\\2.)*?\\1/u', function ($matches) { diff --git a/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue2885Test.php b/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue2885Test.php new file mode 100644 index 00000000..82727ef8 --- /dev/null +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue2885Test.php @@ -0,0 +1,30 @@ +load($filename); + $sheet = $spreadsheet->getActiveSheet(); + self::assertSame('[$-809]0%', $sheet->getStyle('A1')->getNumberFormat()->getFormatCode()); + + $finishColumns = $sheet->getHighestColumn(); + $rowsCount = $sheet->getHighestRow(); + $rows = $sheet->rangeToArray("A1:{$finishColumns}{$rowsCount}"); + self::assertSame('8%', $rows[0][0]); + + $spreadsheet->disconnectWorksheets(); + } +} diff --git a/tests/data/Reader/XLSX/issue.2885.xlsx b/tests/data/Reader/XLSX/issue.2885.xlsx new file mode 100644 index 00000000..d7f4d489 Binary files /dev/null and b/tests/data/Reader/XLSX/issue.2885.xlsx differ