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