Commit Graph

2966 Commits

Author SHA1 Message Date
MarkBaker 2307df5387 Update change log 2020-12-10 23:37:20 +01:00
Sébastien Despont 9cd39b8f4f
Add 'ps' suffix to printer settings resources IDs (#1690)
* Add 'ps' suffix to printer settings resources IDs
2020-12-10 23:28:46 +01:00
Max Kalyabin 2c927b1ca5
fixes #1655 issue (#1656)
Resolve problem with incorrectly defined hyperlinks
2020-12-10 23:10:01 +01:00
Jan Sverre Riksfjord 916b6888eb
worksheet: fix if cellValue does not exist (#1727)
The condition is FALSE if the cell does not exist in the flipped table,
but anyway, it is sent in to a method requiring 'string' type, causing
it to fail.
2020-12-10 22:52:00 +01:00
MarkBaker 1de03c2578 Update change log 2020-12-10 22:04:00 +01:00
oleibman e0feeca555
Fix for #1612 - SLK Long File Name (#1706)
Issue has been marked stale, but ...
Sylk read sets worksheet title to filename (minus .slk).
If that is >31 characters, PhpSpreadsheet throws Exception.
This change truncates sheet title, as Excel does, to 31 characters.
2020-12-10 22:02:36 +01:00
MarkBaker d90d05077f Update change log 2020-12-10 21:51:24 +01:00
Flinsch 1f2f2c79da
Fix bug #1626 where values of 0 were "rounded" up/down as if they were not 0 (#1627)
* Fix bug where values of 0 were "rounded" up/down as if they were not 0
2020-12-10 21:49:53 +01:00
Mark Baker 9289ab11b2
Replace anti-xss with html purifier (#1751)
* Replace voku/anti-xss with ezyang/htmlpurifier. Despite anti-xss being a smaller footprint dependency, an a better license fit with our MIT license, there are issues with it's automatic it sanitisation of global variables causing side effects
* Additional unit tests for xss in html writer cell comments
2020-12-10 21:03:54 +01:00
oleibman 957cb62dab
TextData Coverage and Minor Bug Fixes (#1744)
This had been intended to get 100% coverage for TextData functions, and it does that.
However, some minor bugs requiring source changes arose during testing.
- the Excel CHAR function restricts its argument to 1-255. PhpSpreadsheet CHARACTER
  had been allowing 0+. Also, there is no need to test if iconv exists,
  since it is part of Composer requirements.
- The DOLLAR function had been returning NUM for invalid arguments. Excel returns VALUE.
  Also, negative amounts were not being handled correctly.
- The FIXEDFORMAT function had been returning NUM for invalid arguments. Excel FIXED returns VALUE.
2020-12-10 18:35:26 +01:00
MarkBaker 78774d6ac8 Merge remote-tracking branch 'origin/master' 2020-12-10 18:20:54 +01:00
MarkBaker 4c8617551d Update change log 2020-12-10 18:20:18 +01:00
oleibman a8462f3864
Apply Column and Row Styles to Existing Cells (#1721)
* Apply Column and Row Styles to Existing Cells

This is a fix for issue #1712.
When a style is applied to an entire row or column, it is currently
only effective for cells which don't already contain a value.
The code needs to iterate through existing cells in the row/column
in order to apply the style to them.
This could be considered a breaking change, however, I believe that
the change makes things operate as users would expect, and that the
existing implementation is incomplete.

The change also removes protected element conditionalStyles from
the Style class. That element is an unused remnant, and can no longer be
set or retrieved - methods getConditionalStyles and setConditionalStyles
actually act on an element in the Worksheet class.

Finally, additional tests are added so that Style, and in fact the
entire Style directory, now has 100% test coverage.

* Scrutinizer Changes

Scrutinizer flagged 6 statements. 5 can be easily corrected.
One is absolutely wrong (it thinks iterating through cells in column
can return null). Let's see if we can satisfy it.

* Remove Exception For CellIterator on Empty Row/Column

For my first attempt at this change, which corrects a bug by updating styles
for non-empty cells when a style is set on a row or column, I wished to make things
more efficient by using setIterateOnlyExistingCells, something which the
existing documentation recommends. This caused an exception to be generated
when the row or column is empty. So I removed that part of the change while I
researched what was going on.

I have completed that research. The existing code does throw an exception
when the row/column is empty and iterateOnlyExistingCells is true. However,
that does not seem like a reasonable action. This situation is analagous to
iterating over an empty array, and that action is legal and does not throw.
The same should apply here. There were no tests for this situation,
and now there are.

I have added additional tests, and coverage for all of RowCellIterator,
ColumnCellIterator, and CellIterator are all now 100%. Some of my new tests
were added in new members, because the existing tests all relied on mocking,
which was not the best choice for the new tests. One of the existing tests
for RowCellIteratorTest (testSeekOutOfRange) was wrong; it issued the expected
exception, but for the wrong reason. I have added an additional test to
ensure that it fails "correctly".

The existing documentation says that the default value for
IterateOnlyExistingCells is true. In fact, the default value is false.
I have corrected the documentation.

* More Scrutinizer

I believe its analysis is incorrect, but this should silence it.

* DocBlock Correction

ColumnCellIterator DocBlock for current indicated it could return null
or Cell, but it can really return only Cell. This had caused Scrutinizer
to complain earlier.

* PHP8 Environment Appears to be Fixed

Cosmetic change to Doc member. I suspect there is a way to rerun all
the tests without another push, but I have been unable to figure out how.
2020-12-10 18:19:56 +01:00
MarkBaker 0861370c4d Update change log 2020-12-10 18:13:12 +01:00
oleibman 497a934374
Fix for 3 Issues Involving ReadXlsx and NamedRange (#1742)
* Fix for 3 Issues Involving ReadXlsx and NamedRange

Issues #1686 and #1723, which provide sample spreadsheets, are probably
solved by this ticket. Issue #1730 is also probably solved, but I have
no way to verify.

There are two problems with how PhpSpreadsheet is handling things now.
Although the first problem is much less severe, and isn't really a factor
in the issues named above, it is helpful to get it out of the way first.
If you define a named range in Excel, and then delete the sheet where
the range exists, Excel saves the range as #REF!. If there is a cell which
references the range, it will similarly have the value #REF! when you open
the Excel file.
Currently, PhpSpreadsheet discards the #REF! definition, so a cell which
references the range will appear as #NAME? rather than #REF!.
This PR changes the behavior so that PhpSpreadsheet retains the #REF!
definition, and cells which reference it will appear as #REF!.

The second problem is the more severe, and is, I believe, responsible
for the 3 issues identified above.
If you define a named range and the sheet on which the range is defined
does not exist at the time, Excel will save the range as something like:

'[1]Unknown Sheet'!$A$1

If a cell references such a range, Excel will again display #REF!.
PhpSpreadsheet currently throws an Exception when it encounters
such a definition while reading the file. This PR changes
the behavior so that PhpSpreadsheet saves the definition as #REF!,
and cells which reference it will behave similarly.

For the record, I will note that Excel does not magically recalculate when a
missing sheet is subsequently added, despite the fact that the reference
might now become resolvable. PhpSpreadsheet behaves likewise.

* Remove Dead Code in Test

Identified it after push but before merge.
2020-12-10 18:08:10 +01:00
MarkBaker ff04c8502a Update change log 2020-12-10 18:05:44 +01:00
oleibman ce7863570a
Fix for 1735 (Incorrect activeSheetIndex after RemoveSheetByIndex) (#1743)
This is a fix for issue #1735.
It adds tests for this situation, and similar situations involving
adding new sheets and accessing existing ones.
Coverage for Spreadsheet.php increases from 69% to 75% as a result.
2020-12-10 18:01:08 +01:00
Adrien Crivelli baa9c452e5
Merge pull request #1745 from rhynodesigns/patch-1
Spelling: Tou -> You
2020-12-09 16:48:30 +09:00
Ryan McAllen 7247e3b5ac
Spelling: Tou -> You 2020-12-07 10:17:56 -05:00
Adrien Crivelli 40abd18fe0
Merge pull request #1734 from oleibman/morecoverage
Improve Coverage in src/PhpSpreadsheet
2020-12-02 09:46:22 +09:00
Owen Leibman 6b4feb6142 Changes for Scrutinizer
Two changes to fix minor problems reported by Scrutinizer.
2020-11-27 07:16:23 -08:00
Owen Leibman 1a0aab1a4f Improve Coverage in src/PhpSpreadsheet
There are no changes to code. Additional tests are added,
so that the following 6 items now have 100% test coverage:
- Comment
- DefinedName
- DocumentGenerator
- IOFactory
- NamedFormula
- NamedRange
2020-11-27 06:50:01 -08:00
Adrien Crivelli ba1ce8b8ec
Automatic GitHub releases from git tags 2020-11-26 12:44:07 +09:00
Adrien Crivelli bd05c590e3
Drop Travis 2020-11-26 11:10:52 +09:00
MarkBaker 02e88971e8 Update todocumentation 2020-11-19 16:45:01 +01:00
MarkBaker bd0462bcfc Work on renaming method arguments for the Readers and Writers 2020-11-19 16:41:52 +01:00
MarkBaker 0acc8ff822 Merge branch 'master' into PHP8-Sane-Property-Names 2020-11-19 13:27:12 +01:00
Mark Baker 0ed5b800be
Resolve XSS Vulnerability in the HTML Writer (#1719)
Resolve XSS Vulnerability in the HTML Writer
2020-11-19 11:59:57 +01:00
MarkBaker 97f82c83de Type-hinting fixes 2020-11-16 21:45:05 +01:00
MarkBaker 29e0a8a6e8 Revert 2020-11-16 21:09:21 +01:00
MarkBaker 575ff5509c Cell row should be an int 2020-11-16 21:03:39 +01:00
MarkBaker 1626f5931b Scrutinizer fixes 2020-11-16 20:19:19 +01:00
MarkBaker d311603c6b Typecasting fixes 2020-11-16 19:48:32 +01:00
MarkBaker d6f2180fa0 Keep scrutinizer happy 2020-11-16 18:14:38 +01:00
MarkBaker 6bf24d8aac See if we can sort out scrutinizer's issue with the hash map 2020-11-16 17:34:44 +01:00
MarkBaker 3ad919575d See if we can sort out scrutinizer's issue with the hash map 2020-11-16 14:45:37 +01:00
MarkBaker 30482890c0 Merge branch 'master' into PHP8-Sane-Property-Names 2020-11-11 15:41:08 +01:00
oleibman 6fe653179f
Make DefinedNames Samples Consistent With Other Samples (#1707)
All other Samples write to temporary directory. DefinedNames samples
write to main directory, which (a) means they aren't stored with others,
and (b) they aren't ignored by git so look like changed files.
The tests are also simplified by requiring Header rather than Bootstrap,
making use of Helper.
2020-11-11 11:02:04 +01:00
MarkBaker 6e497a5fd6 Lets try some more modern annotations for index key/value typing 2020-11-07 20:14:32 +01:00
MarkBaker 34d15b80de Lets try some moew modern annotations for index key/value typing 2020-11-07 17:41:58 +01:00
MarkBaker 3f3a3174b5 Scrutinizer tweaks 2020-11-06 19:48:32 +01:00
MarkBaker d558e2ba99 Datatype fix 2020-11-05 21:20:33 +01:00
MarkBaker 86728cb214 Sane argument names for Styles 2020-11-05 20:04:35 +01:00
MarkBaker 317965078d Fix a couple of phpcs issues 2020-11-05 19:29:55 +01:00
MarkBaker cf6abbc10e Sane argument names in the various classes 2020-11-05 19:15:01 +01:00
MarkBaker b12cebe1f5 Sane argument names in the Chart classes 2020-11-03 20:43:42 +01:00
MarkBaker b5c2709002 Sane argument names in the Cell classes 2020-11-03 19:28:45 +01:00
MarkBaker 4ab629ff82 Sane argument names in the Reference Helper, Settings and Spreadsheet classes 2020-11-03 18:04:45 +01:00
MarkBaker af3918cac8 Sane argument names in the Reference Helper, Settings and Spreadsheet classes 2020-11-03 17:45:12 +01:00
MarkBaker 7e4248d67f Sane argument names in the IO Factory 2020-11-03 11:06:12 +01:00