diff --git a/src/PhpSpreadsheet/Reader/Xlsx.php b/src/PhpSpreadsheet/Reader/Xlsx.php index 4f7fbaaae..3a76b05b5 100644 --- a/src/PhpSpreadsheet/Reader/Xlsx.php +++ b/src/PhpSpreadsheet/Reader/Xlsx.php @@ -945,6 +945,10 @@ class Xlsx extends BaseReader // no style index means 0, it seems $cell->setXfIndex(isset($styles[(int) ($cAttr['s'])]) ? (int) ($cAttr['s']) : 0); + // issue 3495 + if ($cell->getDataType() === DataType::TYPE_FORMULA) { + $cell->getStyle()->setQuotePrefix(false); + } } } ++$rowIndex; diff --git a/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue3464Test.php b/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue3464Test.php index f08af4863..90a34f3d5 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue3464Test.php +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue3464Test.php @@ -18,7 +18,8 @@ class Issue3464Test extends \PHPUnit\Framework\TestCase $objReader = IOFactory::createReader($inputFileType); $objReader->setReadEmptyCells(false); - $sheet = $objReader->load(self::$testbook)->getActiveSheet(); + $spreadsheet = $objReader->load(self::$testbook); + $sheet = $spreadsheet->getActiveSheet(); $rickText = $sheet->getCell([1, 1])->getValue(); self::assertInstanceOf(RichText::class, $rickText); @@ -34,5 +35,6 @@ class Issue3464Test extends \PHPUnit\Framework\TestCase $font = $elements[1]->getFont(); self::assertNotNull($font); self::assertEquals('ff2600', $font->getColor()->getRGB()); + $spreadsheet->disconnectWorksheets(); } } diff --git a/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue3495Test.php b/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue3495Test.php new file mode 100644 index 000000000..b85d27e11 --- /dev/null +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue3495Test.php @@ -0,0 +1,57 @@ +' + . '' + . '', + $data + ); + } + $data = file_get_contents($file2); + if ($data === false) { + self::fail('Unable to read file'); + } else { + // cells B1, C1, D1 all nominally use quotePrefix s="1" + self::assertStringContainsString('', $data); + self::assertStringContainsString('', $data); + self::assertStringContainsString('', $data); + } + } + + public function testFormulaDespiteQuotePrefix(): void + { + $reader = new Xlsx(); + $spreadsheet = $reader->load(self::$testbook); + $sheet = $spreadsheet->getActiveSheet(); + self::assertSame('=2+3', $sheet->getCell('B1')->getValue()); + self::assertSame('=1+2', $sheet->getCell('C1')->getValue()); + self::assertSame('3', $sheet->getCell('D1')->getValue()); + self::assertSame(5, $sheet->getCell('B1')->getCalculatedValue()); + self::assertSame('=1+2', $sheet->getCell('C1')->getCalculatedValue()); + self::assertSame('3', $sheet->getCell('D1')->getCalculatedValue()); + $spreadsheet->disconnectWorksheets(); + } +} diff --git a/tests/data/Reader/XLSX/issue.3495d.xlsx b/tests/data/Reader/XLSX/issue.3495d.xlsx new file mode 100644 index 000000000..ac5c2e7cb Binary files /dev/null and b/tests/data/Reader/XLSX/issue.3495d.xlsx differ