PhpSpreadsheet/tests/PhpSpreadsheetTests/Calculation
oleibman a89572107a
Handling of #REF! Errors in Subtotal, and More (#2902)
* Handling of #REF! Errors in Subtotal, and More

This PR derives from, and supersedes, PR #2870, submitted by @ndench. The problem reported in the original is that SUBTOTAL does not handle #REF! errors in its arguments properly; however, my investigation has enlarged the scope.

The main problem is in Calculation, and it has a simple fix. When the calculation engine finds a reference to an uninitialized cell, it uses `null` as the value. This is appropriate when the cell belongs to a defined sheet; however, for an undefined sheet, #REF! is more appropriate.

With that fix in place, SUBTOTAL still needs a small fix of its own. It tries to parse its cell reference arguments into an array, but, if the reference does not match the expected format (as #REF! will not), this results in referencing undefined array indexes, with attendant messages. That assignment is changed to be more flexible, eliminating the problem and the messages.

Those 2 fixes are sufficient to ensure that the original problem is resolved. It also resolves a similar problem with some other functions (e.g. SUM). However, it does not resolve it for all functions. Or, to be more particular, many functions will return #VALUE! rather than #REF! if this arises, and the same is true for other errors in the function arguments, e.g. #DIV/0!. This PR does not attempt to address all functions; I need to think of a systematic way to pursue that. However, at least for most MathTrig functions, which validate their arguments using a common method, it is relatively easy to get the function to propagate the proper error result.

* Arrange Array The Way call_user_func_array Wants

Problem with Php8.0+ - array passed to call_user_func_array must have int keys before string keys, otherwise Php thinks we are passing positional parameters after keyword parameters.

7 other functions use flattenArrayIndexed, but Subtotal is the only one which uses that result to subsequently pass arguments to call_user_func_array. So the others should not require a change. A specific test is added for SUM to validate that conclusion.

* Change Needed for Hidden Row Filter

Same as change made to Formula Args filter.
2022-06-25 22:08:32 -07:00
..
Engine Handle defined names with the range operator. 2022-04-13 17:55:51 +02:00
Functions Handling of #REF! Errors in Subtotal, and More (#2902) 2022-06-25 22:08:32 -07:00
ArrayFormulaTest.php Convert all relevant Logical functions to support array arguments (#2600) 2022-02-18 02:56:23 +01:00
BinaryComparisonTest.php Extract some methods from the Calculation Engine into dedicated classes (#2537) 2022-02-04 16:02:29 +01:00
CalculationErrorTest.php New Error Reported with Phpstan 1.3 (#2481) 2022-01-03 17:32:52 -08:00
CalculationFunctionListTest.php Eliminate Most Scrutinizer Problems in Test Suite (#2699) 2022-03-21 13:58:42 -07:00
CalculationLoggingTest.php Unit test for the Calculation Engine debug log 2022-03-06 09:47:17 +01:00
CalculationSettingsTest.php Adjust Cell Reference regexp in Calculation Engine to handle worksheet names containing quotes (#2617) 2022-02-22 15:55:59 +01:00
CalculationTest.php Adjust Cell Reference regexp in Calculation Engine to handle worksheet names containing quotes (#2617) 2022-02-22 15:55:59 +01:00
DefinedNameConfusedForCellTest.php Reduce PHPStan error in tests 2021-04-12 11:10:23 +09:00
DefinedNamesCalculationTest.php Named formula implementation, and improved handling of Defined Names generally (#1535) 2020-07-26 12:00:06 +02:00
FormulaAsStringTest.php Reduce PHPStan error in tests 2021-04-12 11:10:23 +09:00
FunctionsTest.php Eliminate Most Scrutinizer Problems in Test Suite (#2699) 2022-03-21 13:58:42 -07:00
MergedCellTest.php Relax validation on merge cells to allow input of a single cell 2022-06-10 01:15:57 +02:00
NullEqualsZeroTest.php Add Test For NULL=0 (#2607) 2022-02-19 13:12:44 -08:00
ParseFormulaTest.php Escape double quotes in worksheet names for column range and row range references 2022-06-17 13:34:20 +02:00
RefErrorTest.php Handling of #REF! Errors in Subtotal, and More (#2902) 2022-06-25 22:08:32 -07:00
RowColumnReferenceTest.php Set precision for Database function unit tests, for RowColumnReference and Dimension Helper unit tests (#2604) 2022-02-18 21:37:26 +01:00
TranslationTest.php Reduce PHPStan error in tests 2021-04-12 11:10:23 +09:00
XlfnFunctionsTest.php Reduce PHPStan error in tests 2021-04-12 11:10:23 +09:00