Commit Graph

3648 Commits

Author SHA1 Message Date
oleibman e4e99b8a73
Permit Date/Time Entered on Spreadsheet to be Calculated as Float (#3121)
* Permit Date/Time Entered on Spreadsheet to be Calculated as Float

Fix #1416. I do not entirely understand the use case for this old issue, but resolving it seems straightforward. Issue complains that user-entered date/time fields may be interpreted as either float or int when PhpSpreadsheet reads them. Issue suggests getCalculatedValue treat all date/time fields as float; that seems like a breaking change. However, adding an option to permit it seems okay. That option might be implemented as either a property of Calculation, or a static property of Cell. Since the changed logic is found in Cell (and Shared/Date), I opted for the latter.

In Cell, the property `$parent` is incorrectly described in doc block as `Cells`, and should be `?Cells`. This change eliminates some Phpstan and Scrutinizer problems, and should allow the elimination of some try/catch blocks - I have not done an exhaustive search for those.

Calls to `isDateTime` could have affected activeSheet and selectedCells; they no longer can. Optional parameters are added to it and the functions it calls to accommodate the new functionality; the defaults for the new parameters will, of course, return the same result as the earlier versions of the functions would have returned.

* Scrutinizer - Self-inflicted

Tests used constant which I deprecated.
2022-10-18 18:58:38 -07:00
Mark Baker 6842ccb862
Merge pull request #3124 from chapeupreto/add-editorconfig
Add .editorconfig file
2022-10-15 21:17:46 +02:00
Mark Baker b7385e2053
Merge branch 'master' into add-editorconfig 2022-10-15 21:14:16 +02:00
Rod Elias bb5769e2e3
Add `.editorconfig` to `.gitattributes` 2022-10-15 15:52:06 -03:00
oleibman 6c78bc9954
Writer Xlsx Use Constants Rather Than Literals for Namespaces (#3110)
When adding support for non-standard namespacing to Reader Xlsx, I changed most (hopefully all) the uses of string literals for the namespaces to class constants instead. Writer Xlsx naturally uses all the same namespaces, but has continued to use string literals. This PR replaces those with the same constants used by Reader Xlsx.
2022-10-14 08:08:25 -07:00
Rod Elias 35759b7561
Add .editorconfig file
See https://editorconfig.org/
2022-10-14 00:06:52 -03:00
oleibman 31d0a2e9f9
Eliminate Some Scrutinizer 'Major' Problems (#3109)
Almost all of these are handled through annotations. This shouldn't be our "go-to" solution, but it becomes necessary because Scrutinizer's analysis is often incorrect. Here is a typical example, from Cells.php.
```php
         if ($this->currentCellIsDirty && isset($this->currentCoordinate, $this->currentCell)) {
            $this->currentCell->detach();
```
Scrutinizer complains that `$this->currentCell` can be null here, but the `isset` condition guarantees that it must be non-null. Perhaps Scrutinizer is worried that `isset` might be overridden, and will accept only an explicit equality test for null for each of the isset arguments. Changing the code to do this seems riskier than just adding the annotation.

A far more common, and more frustrating, example is:
```php
foreach ($simpleXmlElement as $element) {
    var_dump($element->method());
}
```
Scrutinizer complains that element might be null. I don't think it can. I have previously added code in places to eliminate the objection, and that may be a practical solution when `$element` is used many times in the loop. But, when it's used only once, annotating the objection away seems like a better solution (less overhead, clearer code). Many of the changes in this PR fall into this category.
2022-10-13 07:37:07 -07:00
oleibman befbc564f4
Fix Remainder of Calculation vs. Phpstan Issues (#3108)
* Fix Remainder of Calculation vs. Phpstan Issues

I had tried to include these changes as part of an earlier effort, but something about them broke Phpstan. I removed them until I could determine the actual cause, which is ...

The array `$phpSpreadsheetFunctions` is a very large and very complicated array, typehinted as `array`. It is declared as private static; however, its content never changes (at least not now - there are some outstanding proposals that might change that). I have had some success with changing unmodifiable private static to private const. However, such a change here causes Phpstan to perform a lot more processing and eventually time out. So, leave it as static.

Having identified the cause of the problem, none of the other changes were problematic, so this PR applies the rest of them.

* Scrutinizer

One problem.

* Scrutinizer False Positives Without Suggested Annotation

See if minor code changes can make these go away.

* Scrutinizer Still Experimenting

Trying again.
2022-10-12 23:28:08 -07:00
MarkBaker de975e650f Merge remote-tracking branch 'origin/master' 2022-10-11 12:58:30 +02:00
Mark Baker c88674be3a
Update CHANGELOG.md 2022-10-11 12:57:36 +02:00
MarkBaker 82ce9dd11b Update to Change Log 2022-10-11 12:35:51 +02:00
Mark Baker 19693bbfc7
Merge pull request #2829 from aswinkumar863/Table-Reader-for-Xlsx
Table Xlsx Reader and Autofilter
2022-10-11 12:27:55 +02:00
MarkBaker 7e99e6bdd2 Minor Refactoring for writing filter column rules 2022-10-11 11:40:36 +02:00
MarkBaker f602f8c585 Merge with current master, and resolve conflicts 2022-10-11 10:50:33 +02:00
MarkBaker 123952767c Merge branch 'master' into Table-Reader-for-Xlsx
# Conflicts:
#	phpstan-baseline.neon
#	src/PhpSpreadsheet/Reader/Xlsx.php
#	src/PhpSpreadsheet/Reader/Xlsx/AutoFilter.php
#	src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php
2022-10-11 10:29:14 +02:00
MarkBaker 7127af7740 Change Log Updates 2022-10-11 10:23:01 +02:00
Mark Baker 4adbfd86e6
Merge pull request #3111 from PHPOffice/Issue-3102_Allow-AutoFilter-on-Single-Cell
Allow AutoFilter on single cell, or a single row
2022-10-11 09:15:04 +02:00
MarkBaker 720b98a97f Calculate row range for a single-row AutoFilter range 2022-10-08 20:16:02 +02:00
MarkBaker 339a5933c7 Allow single cell AutoFilter range 2022-10-08 12:42:01 +02:00
oleibman 88bbac9849
Use Locale-Independent Float Conversion for Xlsx Writer Custom Property (#3099)
Fix #3095. Issue is not a problem for Php8, but is for 7.4. Code used to write Xml for float custom property uses locale-dependent (in Php7) cast. Change to use locale-independent (all Php releases) `sprintf('%F'...)` instead.
2022-10-02 18:37:55 -07:00
oleibman cd9811cbd3
Xlsx Reader Accept Palette of Fewer than 64 Colors (#3096)
Fix #3093. PR #2595 added the ability for Xlsx Reader to accept a custom color palette. With no examples other than the one at hand, which included a full complement of 64 colors, that PR required 64 colors in the palette. It turns out that Mac Numbers exports to Excel with a palette with less than 64 colors. So, with an example of that at hand, relax the original restriction and accept a palette of any size.
2022-10-02 18:02:34 -07:00
José Rodríguez c6b095b626
Reduces extra memory usage on `__destruct()` calls (#3094)
* fix: Reduces memory usage on __destruct() call

* docs: CHANGELOG.md

Co-authored-by: Jose Rodriguez <jose.rodriguez@zecovery.com>
2022-10-01 12:12:21 -07:00
oleibman 66695881e4
Calculation suppressFormulaErrors - Minor Break and Deprecation (#3092)
Fix #1531. This is a replacement for PR #3081 (see last paragraph below), which I will close.

Calculation has a property `suppressFormulaErrors`, which really doesn't work as one might expect. If a calculation throws an exception, the setting of this property might prevent the Exception from being thrown, but it will still trigger an Error. I do not think this makes sense, and will change it so the calculation will return `false`, which is part of the original design but which would essentially never happen. This allows the user to save a corrupt spreadsheet, but this was already possible through the use of `setPreCalculateFormulas(false)` on the Writer, so this doesn't really open any new exposures. It nevertheless might be considered a breaking change because of the difference in behavior.

Deprecation - the visibility of the existing property is public, which means it can be changed directly. A new private property is added with a public setter/getter. The new property will be used when the existing property is null (default), which will allow the existing property to be deprecated.

Function getFunctions is changed to static - the array which it returns is static. Existing callers using it as non-static will still function correctly.

Although I am enabling this ability, I don't necessarily think it's a good idea to make use of it. See the original issue for a discussion of why. It is not mentioned in the official documentation, and I will not be adding documentation for it. The originator discovered it by reading the code, and I think that is sufficient for what will often be an ill-advised choice.

Many of the large number of problems with Calculation.php in phpstan baseline are addressed. PR 3081 ran afoul of something in phpstan. The changes in this ticket are more limited, adding a number of doc blocks but leaving executable code unchanged.
2022-10-01 08:40:27 -07:00
oleibman d27b6a672a
Cleanup 3 LookupRef Tests (#3097)
Scrutinizer had previously suggested annotations for 3 LookupRef tests, but it no longer accepts its own annotation for those cases. This PR cleans them up. ColumnsTest and RowsTest are extremely straightforward.

IndexTest is a bit more complicated, but only because, unlike the other two, it had no test which executed in the context of a spreadsheet. And, when I added those, I discovered a couple of bugs. INDEX always requires at least 2 parameters (row# is always required), but its entry in the function table specified 1-4 parameters, now changed to 2-4. And, omitting col# is not handled the same way as specifying 0 for col#, though the code had treated them identically. (The same would have been true for row# but, because it is now required, ...)
2022-10-01 07:05:54 -07:00
oleibman 35b42cc180
Phpstan Baseline Fixes 2022-09-21 (#3080)
* Phpstan Baseline Fixes 2022-09-21

Eliminate about 200 more lines from Phpstan baseline. For Helper/Sample and Helper/Html and others, many properties are declared as protected despite the fact that the classes do not extend any other class, and there are no classes which extend them. They are changed to private; this could be a breaking change in circumstances for which I cannot think of a use case (user extends class for some reason).

* Slightly Botched Merge Commit

Hope this fixes phpstan.
2022-09-30 09:00:13 -07:00
oleibman b8201a79c5
Sync mpdf in composer.lock (#3091)
Composer was complaining locally.
2022-09-28 00:46:24 -07:00
oleibman 050a42db8e
Xlsx Reader External Data Validations Flag Missing (#3078)
* Xlsx Reader External Data Validations Flag Missing

Fix #2677. This PR supersedes #2679, written by @technghiath, which lacks tests, and probably doesn't solve the problem entirely. The code causing the problem appears to be the last remnant in Xlsx Reader which calls `children` using a namespace prefix rather than a namespace. That is changed, and tests are added where the tag is unexpectedly missing, and also where it uses a non-standard namespace prefix.

* Scrutinizer

Reports 1 "new" error. It isn't, but fix it anyhow.

* Fix One Existing Scrutinizer Problem

Only remaining problem in Reader/Xlsx.
2022-09-28 00:14:37 -07:00
oleibman a193f36f31
More Carets in composer.json (#3090)
* More Carets in composer.json

Following up on PR #3086, there are 3 additional items in the require-dev section that should have carets. I probably accidentally removed them for tcpdf and mitoteam, which point to the current release anyhow. Dependabot appears to be responsible for mpdf, which is not pointing to the current release, but I have tested with current successfully.

* Minor Fix for Change Made Earlier Today

"Scrutinizer Tweak" causes a Phpstan error. Fix baseline to correct it.
2022-09-27 22:13:19 -07:00
MarkBaker bb500e2c34 Scrutinizer tweak 2022-09-27 15:52:44 +02:00
MarkBaker 341eb62afe Prepare Change Log for next release 2022-09-25 19:38:30 +02:00
MarkBaker a317a09e7d Change Log 2022-09-25 19:21:01 +02:00
MarkBaker bfd6e640fa Change Log 2022-09-25 19:14:46 +02:00
MarkBaker 1c56fdc0f3 Change Log 2022-09-25 18:42:06 +02:00
MarkBaker b9bd55a074 Minor tweak for phpstan and pathinfo return array 2022-09-25 18:08:55 +02:00
MarkBaker 3d2786f278 Merge remote-tracking branch 'origin/master' 2022-09-25 18:08:19 +02:00
MarkBaker 8969b81886 Minor tweak for phpstan and pathinfo return array 2022-09-25 18:08:05 +02:00
Mark Baker 7c9e293487
Merge pull request #3086 from BrokenSourceCode/master
Fix `ezyang/htmlpurifier` caret version range
2022-09-25 17:43:06 +02:00
BrokenSourceCode 46beabbefe Fix `ezyang/htmlpurifier` caret version range 2022-09-25 14:37:47 +02:00
MarkBaker 5f644c0144 Prepare Change Log for next release 2022-09-25 13:29:42 +02:00
MarkBaker 86f3730ded 1.25.0 - 2022-09-25
### Added

- Implementation of the new `TEXTBEFORE()`, `TEXTAFTER()` and `TEXTSPLIT()` Excel Functions
- Implementation of the `ARRAYTOTEXT()` and `VALUETOTEXT()` Excel Functions
- Support for [mitoteam/jpgraph](https://packagist.org/packages/mitoteam/jpgraph) implementation of
  JpGraph library to render charts added.
- Charts: Add Gradients, Transparency, Hidden Axes, Rounded Corners, Trendlines, Date Axes.

### Changed

- Allow variant behaviour when merging cells [Issue #3065](https://github.com/PHPOffice/PhpSpreadsheet/issues/3065)
  - Merge methods now allow an additional `$behaviour` argument. Permitted values are:
    - Worksheet::MERGE_CELL_CONTENT_EMPTY - Empty the content of the hidden cells (the default behaviour)
    - Worksheet::MERGE_CELL_CONTENT_HIDE - Keep the content of the hidden cells
    - Worksheet::MERGE_CELL_CONTENT_MERGE - Move the content of the hidden cells into the first cell

### Deprecated

- Axis getLineProperty deprecated in favor of getLineColorProperty.
- Moved majorGridlines and minorGridlines from Chart to Axis. Setting either in Chart constructor or through Chart methods, or getting either using Chart methods is deprecated.
- Chart::EXCEL_COLOR_TYPE_* copied from Properties to ChartColor; use in Properties is deprecated.
- ChartColor::EXCEL_COLOR_TYPE_ARGB deprecated in favor of EXCEL_COLOR_TYPE_RGB ("A" component was never allowed).
- Misspelled Properties::LINE_STYLE_DASH_SQUERE_DOT deprecated in favor of LINE_STYLE_DASH_SQUARE_DOT.
- Clone not permitted for Spreadsheet. Spreadsheet->copy() can be used instead.

### Removed

- Nothing

### Fixed

- Fix update to defined names when inserting/deleting rows/columns [Issue #3076](https://github.com/PHPOffice/PhpSpreadsheet/issues/3076) [PR #3077](https://github.com/PHPOffice/PhpSpreadsheet/pull/3077)
- Fix DataValidation sqRef when inserting/deleting rows/columns [Issue #3056](https://github.com/PHPOffice/PhpSpreadsheet/issues/3056) [PR #3074](https://github.com/PHPOffice/PhpSpreadsheet/pull/3074)
- Named ranges not usable as anchors in OFFSET function [Issue #3013](https://github.com/PHPOffice/PhpSpreadsheet/issues/3013)
- Fully flatten an array [Issue #2955](https://github.com/PHPOffice/PhpSpreadsheet/issues/2955) [PR #2956](https://github.com/PHPOffice/PhpSpreadsheet/pull/2956)
- cellExists() and getCell() methods should support UTF-8 named cells [Issue #2987](https://github.com/PHPOffice/PhpSpreadsheet/issues/2987) [PR #2988](https://github.com/PHPOffice/PhpSpreadsheet/pull/2988)
- Spreadsheet copy fixed, clone disabled. [PR #2951](https://github.com/PHPOffice/PhpSpreadsheet/pull/2951)
- Fix PDF problems with text rotation and paper size. [Issue #1747](https://github.com/PHPOffice/PhpSpreadsheet/issues/1747) [Issue #1713](https://github.com/PHPOffice/PhpSpreadsheet/issues/1713) [PR #2960](https://github.com/PHPOffice/PhpSpreadsheet/pull/2960)
- Limited support for chart titles as formulas [Issue #2965](https://github.com/PHPOffice/PhpSpreadsheet/issues/2965) [Issue #749](https://github.com/PHPOffice/PhpSpreadsheet/issues/749) [PR #2971](https://github.com/PHPOffice/PhpSpreadsheet/pull/2971)
- Add Gradients, Transparency, and Hidden Axes to Chart [Issue #2257](https://github.com/PHPOffice/PhpSpreadsheet/issues/2257) [Issue #2229](https://github.com/PHPOffice/PhpSpreadsheet/issues/2929) [Issue #2935](https://github.com/PHPOffice/PhpSpreadsheet/issues/2935) [PR #2950](https://github.com/PHPOffice/PhpSpreadsheet/pull/2950)
- Chart Support for Rounded Corners and Trendlines [Issue #2968](https://github.com/PHPOffice/PhpSpreadsheet/issues/2968) [Issue #2815](https://github.com/PHPOffice/PhpSpreadsheet/issues/2815) [PR #2976](https://github.com/PHPOffice/PhpSpreadsheet/pull/2976)
- Add setName Method for Chart [Issue #2991](https://github.com/PHPOffice/PhpSpreadsheet/issues/2991) [PR #3001](https://github.com/PHPOffice/PhpSpreadsheet/pull/3001)
- Eliminate partial dependency on php-intl in StringHelper [Issue #2982](https://github.com/PHPOffice/PhpSpreadsheet/issues/2982) [PR #2994](https://github.com/PHPOffice/PhpSpreadsheet/pull/2994)
- Minor changes for Pdf [Issue #2999](https://github.com/PHPOffice/PhpSpreadsheet/issues/2999) [PR #3002](https://github.com/PHPOffice/PhpSpreadsheet/pull/3002) [PR #3006](https://github.com/PHPOffice/PhpSpreadsheet/pull/3006)
- Html/Pdf Do net set background color for cells using (default) nofill [PR #3016](https://github.com/PHPOffice/PhpSpreadsheet/pull/3016)
- Add support for Date Axis to Chart [Issue #2967](https://github.com/PHPOffice/PhpSpreadsheet/issues/2967) [PR #3018](https://github.com/PHPOffice/PhpSpreadsheet/pull/3018)
- Reconcile Differences Between Css and Excel for Cell Alignment [PR #3048](https://github.com/PHPOffice/PhpSpreadsheet/pull/3048)
- R1C1 Format Internationalization and Better Support for Relative Offsets [Issue #1704](https://github.com/PHPOffice/PhpSpreadsheet/issues/1704) [PR #3052](https://github.com/PHPOffice/PhpSpreadsheet/pull/3052)
- Minor Fix for Percentage Formatting [Issue #1929](https://github.com/PHPOffice/PhpSpreadsheet/issues/1929) [PR #3053](https://github.com/PHPOffice/PhpSpreadsheet/pull/3053)
2022-09-25 13:06:17 +02:00
MarkBaker 77a064f58d Minor tweak 2022-09-25 13:02:01 +02:00
MarkBaker eb91890f8b Minor tweak 2022-09-23 15:34:18 +02:00
Mark Baker 6f5597d7b1
Merge pull request #3077 from PHPOffice/Issue-3076_Insert-Row-with-Defined-Names-Examples
Correct update to named ranges and formulae when inserting/deleting columns/rows
2022-09-23 14:44:56 +02:00
MarkBaker d682f2f95e Correct update to named ranges and formulae when inserting/deleting columns/rows 2022-09-23 14:03:38 +02:00
MarkBaker 3b0c450742 Merge remote-tracking branch 'origin/Issue-3076_Insert-Row-with-Defined-Names-Examples' into Issue-3076_Insert-Row-with-Defined-Names-Examples
# Conflicts:
#	src/PhpSpreadsheet/ReferenceHelper.php
2022-09-23 13:25:15 +02:00
MarkBaker abcbac6f9a Correct update to named ranges and formulae when inserting/deleting columns/rows 2022-09-23 13:24:31 +02:00
MarkBaker b7c025a183 Correct update to named ranges and formulae when inserting/deleting columns/rows 2022-09-22 01:10:53 +02:00
MarkBaker b9ded919fc Minor cosmetic changes 2022-09-21 15:37:51 +02:00
MarkBaker 6e93505cf5 Minor cosmetic changes 2022-09-21 14:43:24 +02:00
Mark Baker 813c2c7c70
Merge pull request #2959 from VincentLanglet/writerSave
Add throws tag to Writer::save method
2022-09-21 14:07:27 +02:00