Create stubs for new uncategorised ANCHORARRAY() and SINGLE() functions; for the new Logical functions BYCOL(), BYROW(); LAMBDA(), LET(), MAKEARRAY(), MAP(), REDUCE() and SCAN() functions; and for the new Information function ISOMITTED()
* Namespace-Aware Code for SheetViewOptions, SheetProtection (minor break)
This is fairly straightforward for SheetViewOptions.
SheetProtection is a bit less straightforward. All the attributes should allow for null as well as boolean; this is especially important because Excel defaults to true for some of them and false for others (existing code always treated attributes missing from the XML as false). DocBlocks are updated to indicate the defaults. The test for isProtectionEnabled is changed to reflect this reality. Also, PhpSpreadsheet has been using true/false when writing these, but Excel uses 1/0. Because of these differences, this is a breaking change, but the consequences of the breaks should be minor. Two unit test results needed to change.
Remaining areas in Reader/Xlsx which still use the namespace-unaware code include conditional formatting (internal or external), auto filters, unparsed loaded data, data validation (internal or external), alternate content, and header/footer images.
* Corrections to Xls Reader and Writer
New test and changed sample to go with code changes. Also doc change.
Test both the function implementation (directly), and when the function is called in a formula from a spreadsheet
Replace error strings in expected result for providers with the value returned from the ExcelErrors class
* Correct Some DocBlocks in Writer/CSV
The parameters for some methods had default values in PHPExcel, but the defaults were removed in PhpSpreadsheet. However, the doc-blocks continue to report a default. I also moved some of the parameter and return type declarations from doc-block to method signature. No other executable code was changed.
This isn't much of a change. I'm just pushing it now to see the effects of changes pushed earlier today (Php8.1 for Scrutinizer, no fake Php7.3 step).
* Comment Change
Scrutinizer was absent from a couple of merges today. Checking to see if it shows up here.
* Eliminate Some Scrutinizer 'Major' Problems Part 7 Xls
The last change in this series. Dividing the work between xls and non-xls code seems to partitition the work very nicely 50-50. This is the Xls part. All remaining Scrutinizer problems will be recoded, annotated, or preceded by a comment explaining why no action is taken.
* One More Dead Assignment
Fix it.
* Eliminate Some Scrutinizer 'Major' Problems Part 6 Non-Xls
The penultimate change in this series. Dividing the work between xls and non-xls code seems to partitition the work very nicely 50-50. This is the non-Xls part. All remaining Scrutinizer problems will be recoded, annotated, or preceded by a comment explaining why no action is taken.
Three members in Shared/Jama are deleted. All had Scrutinizer errors. None are called from anywhere inside PhpSpreadsheet, including the test suite. It is much easier to delete the unused members than to fix (and test) them.
* More Surprises
Apparently Scrutinizer will sometimes flag an error only once for a module no matter how often it occurs.
* Change Additional Statistical Tests to Use Spreadsheet Context
With an earlier change, I made all but 18 Statistical tests run in spreadsheet context. This PR changes 12 of those 18. The remaining 6 usually return array results, so it is a tougher task to handle them. I will continue to think on it.
AVERAGEIF, AVERAGEIFS, and COUNTBLANK are changed to throw an Exception when a range is specified as a literal. They previously accepted array (enclosed in braces) literals, and bumbled along till they threw an error for non-array literals. Throwing an exception appears to be analogous to how Excel operates, rather than something more friendly like a VALUE error. There may be other functions which require similar treatment.
There also remains a TODO for COUNTIFS, and possibly other functions. It appears that PhpSpreadsheet counts booleans for both integer and string compares and probably shouldn't. Again, this is a problem for another day.
* Scrutinizer
Fix one problem.
* Scrutinizer Ignores Its Own Suggested Remedy
Try another approach.