diff --git a/src/PhpSpreadsheet/Cell/AddressHelper.php b/src/PhpSpreadsheet/Cell/AddressHelper.php index cde31a13..0dabc6e0 100644 --- a/src/PhpSpreadsheet/Cell/AddressHelper.php +++ b/src/PhpSpreadsheet/Cell/AddressHelper.php @@ -72,7 +72,7 @@ class AddressHelper foreach ($temp as &$value) { // Only replace in alternate array entries (i.e. non-quoted blocks) if ($key = !$key) { - preg_match_all('/(R(\[?-?\d*\]?))(C(\[?-?\d*\]?))/', $value, $cellReferences, PREG_SET_ORDER + PREG_OFFSET_CAPTURE); + preg_match_all('/(?:R(?:(?:\[-?\d*\])|(?:\d*))?)(?:C(?:(?:\[-?\d*\])|(?:\d*))?)/i', $value, $cellReferences, PREG_SET_ORDER + PREG_OFFSET_CAPTURE); // Reverse the matches array, otherwise all our offsets will become incorrect if we modify our way // through the formula from left to right. Reversing means that we work right to left.through // the formula diff --git a/tests/PhpSpreadsheetTests/Cell/AddressHelperTest.php b/tests/PhpSpreadsheetTests/Cell/AddressHelperTest.php index 26e0a14b..58c696ef 100644 --- a/tests/PhpSpreadsheetTests/Cell/AddressHelperTest.php +++ b/tests/PhpSpreadsheetTests/Cell/AddressHelperTest.php @@ -143,7 +143,7 @@ class AddressHelperTest extends TestCase /** * @dataProvider providerConvertFormulaToA1FromR1C1Relative */ - public function testConvertFormulaToA1R1C1Relative(string $expectedValue, string $formula, int $row, int $column): void + public function testConvertFormulaToA1FromR1C1Relative(string $expectedValue, string $formula, int $row, int $column): void { $actualValue = AddressHelper::convertFormulaToA1($formula, $row, $column); diff --git a/tests/data/Cell/ConvertFormulaToA1FromR1C1Absolute.php b/tests/data/Cell/ConvertFormulaToA1FromR1C1Absolute.php index cc67d308..f1b16728 100644 --- a/tests/data/Cell/ConvertFormulaToA1FromR1C1Absolute.php +++ b/tests/data/Cell/ConvertFormulaToA1FromR1C1Absolute.php @@ -1,8 +1,16 @@ E2, E3, E4)', '=IF(R1C5>R2C5, R3C5, R4C5)'], + // String literals + ['=CONCAT("Result of formula expression =R3C3+R4C3 is: ", C3+C4)', '=CONCAT("Result of formula expression =R3C3+R4C3 is: ", R3C3+R4C3)'], ]; diff --git a/tests/data/Cell/ConvertFormulaToA1FromR1C1Relative.php b/tests/data/Cell/ConvertFormulaToA1FromR1C1Relative.php index 4686cc5a..2effc81e 100644 --- a/tests/data/Cell/ConvertFormulaToA1FromR1C1Relative.php +++ b/tests/data/Cell/ConvertFormulaToA1FromR1C1Relative.php @@ -1,7 +1,21 @@ E2, E3, E4)', '=IF(R[-4]C>R[-3]C, R[-2]C, R[-1]C)', 5, 5], + // String literals ['=CONCAT("Result of formula expression =R[-2]C[-2]+R[-1]C[-2] is: ", C3+C4)', '=CONCAT("Result of formula expression =R[-2]C[-2]+R[-1]C[-2] is: ", R[-2]C[-2]+R[-1]C[-2])', 5, 5], ]; diff --git a/tests/data/Cell/ConvertFormulaToA1FromSpreadsheetXml.php b/tests/data/Cell/ConvertFormulaToA1FromSpreadsheetXml.php index 590d4d0d..3cfd8ee9 100644 --- a/tests/data/Cell/ConvertFormulaToA1FromSpreadsheetXml.php +++ b/tests/data/Cell/ConvertFormulaToA1FromSpreadsheetXml.php @@ -1,7 +1,16 @@ E2, E3, E4)', 'of:=IF([.E1]>[.E2], [.E3], [.E4])'], + // String literals + ['=CONCAT("Result of formula expression =[.C3]+[.C4] is: ", C3+C4)', 'of:=CONCAT("Result of formula expression =[.C3]+[.C4] is: ", [.C3]+[.C4])'], ];