-
Notifications
You must be signed in to change notification settings - Fork 3.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Problems Using Builtin PHP Functions Directly As Excel Functions #1799
Commits on Jan 18, 2021
-
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.
Configuration menu - View commit details
-
Copy full SHA for 52f3005 - Browse repository at this point
Copy the full SHA 52f3005View commit details -
Resolve XSS Vulnerability in the HTML Writer (#1719)
Resolve XSS Vulnerability in the HTML Writer
Configuration menu - View commit details
-
Copy full SHA for e05442b - Browse repository at this point
Copy the full SHA e05442bView commit details -
Configuration menu - View commit details
-
Copy full SHA for 5596d6d - Browse repository at this point
Copy the full SHA 5596d6dView commit details -
Configuration menu - View commit details
-
Copy full SHA for d75bba4 - Browse repository at this point
Copy the full SHA d75bba4View commit details -
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
Configuration menu - View commit details
-
Copy full SHA for e4be949 - Browse repository at this point
Copy the full SHA e4be949View commit details -
Two changes to fix minor problems reported by Scrutinizer.
Configuration menu - View commit details
-
Copy full SHA for 39025e8 - Browse repository at this point
Copy the full SHA 39025e8View commit details -
Configuration menu - View commit details
-
Copy full SHA for 6e71f80 - Browse repository at this point
Copy the full SHA 6e71f80View commit details -
Fix for 1735 (Incorrect activeSheetIndex after RemoveSheetByIndex) (#…
Configuration menu - View commit details
-
Copy full SHA for 95cb746 - Browse repository at this point
Copy the full SHA 95cb746View commit details -
Configuration menu - View commit details
-
Copy full SHA for 37ec4fa - Browse repository at this point
Copy the full SHA 37ec4faView commit details -
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.
Configuration menu - View commit details
-
Copy full SHA for 7b8f023 - Browse repository at this point
Copy the full SHA 7b8f023View commit details -
Configuration menu - View commit details
-
Copy full SHA for acd5a75 - Browse repository at this point
Copy the full SHA acd5a75View commit details -
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.
Configuration menu - View commit details
-
Copy full SHA for cf30b88 - Browse repository at this point
Copy the full SHA cf30b88View commit details -
Configuration menu - View commit details
-
Copy full SHA for ebae8ef - Browse repository at this point
Copy the full SHA ebae8efView commit details -
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.
Configuration menu - View commit details
-
Copy full SHA for 2cbe2fd - Browse repository at this point
Copy the full SHA 2cbe2fdView commit details -
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
Configuration menu - View commit details
-
Copy full SHA for a4bd396 - Browse repository at this point
Copy the full SHA a4bd396View commit details -
Fix bug #1626 where values of 0 were "rounded" up/down as if they wer…
…e not 0 (#1627) * Fix bug where values of 0 were "rounded" up/down as if they were not 0
Configuration menu - View commit details
-
Copy full SHA for dfc0ff4 - Browse repository at this point
Copy the full SHA dfc0ff4View commit details -
Configuration menu - View commit details
-
Copy full SHA for 0ad58e6 - Browse repository at this point
Copy the full SHA 0ad58e6View commit details -
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.
Configuration menu - View commit details
-
Copy full SHA for 201817c - Browse repository at this point
Copy the full SHA 201817cView commit details -
Configuration menu - View commit details
-
Copy full SHA for 5079aac - Browse repository at this point
Copy the full SHA 5079aacView commit details -
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.
Configuration menu - View commit details
-
Copy full SHA for 6e56c2c - Browse repository at this point
Copy the full SHA 6e56c2cView commit details -
Resolve problem with incorrectly defined hyperlinks
Configuration menu - View commit details
-
Copy full SHA for be3b30b - Browse repository at this point
Copy the full SHA be3b30bView commit details -
Add 'ps' suffix to printer settings resources IDs (#1690)
* Add 'ps' suffix to printer settings resources IDs
Configuration menu - View commit details
-
Copy full SHA for fe45f08 - Browse repository at this point
Copy the full SHA fe45f08View commit details -
Configuration menu - View commit details
-
Copy full SHA for b2b1f25 - Browse repository at this point
Copy the full SHA b2b1f25View commit details -
Configuration menu - View commit details
-
Copy full SHA for 64a22e0 - Browse repository at this point
Copy the full SHA 64a22e0View commit details -
DocBlock Change in Styles/Conditional (#1697)
Scrutinizer reported a minor error in a test involving a module which I was not changing. Styles/Conditional function setConditions can take a scalar or an array as a parameter, but DocBlock says it only expects array. I did not wish to add the extra module to my PR, but made a note to self to fix that after PR was installed. That has now happened, and it makes for a good case for me to see all the PHP8/Composer2/etc. changes that have happened recently.
Configuration menu - View commit details
-
Copy full SHA for f011d1f - Browse repository at this point
Copy the full SHA f011d1fView commit details -
* Merge pull request #4 from PHPOffice/master * Restore Omitted Read XML Test
Configuration menu - View commit details
-
Copy full SHA for c1a63d7 - Browse repository at this point
Copy the full SHA c1a63d7View commit details -
Fix for bug #1592 (UPDATED) (#1623)
* Fix for Xls when BIFF8 SST (FCh) has bad Shared string length
Configuration menu - View commit details
-
Copy full SHA for 65b8625 - Browse repository at this point
Copy the full SHA 65b8625View commit details -
Configuration menu - View commit details
-
Copy full SHA for 09b9771 - Browse repository at this point
Copy the full SHA 09b9771View commit details -
Configuration menu - View commit details
-
Copy full SHA for 99e023f - Browse repository at this point
Copy the full SHA 99e023fView commit details -
Configuration menu - View commit details
-
Copy full SHA for a70c1eb - Browse repository at this point
Copy the full SHA a70c1ebView commit details -
CSV - Guess Encoding, Handle Null-string Escape (#1717)
* CSV - Guess Encoding, Handle Null-string Escape This is in response to issue #1647 (detect CSV character encoding). First, my tests with mb_detect_encoding indicate that it doesn't work well enough; regardless, users can always do that on their own if they deem it useful. Rolling my own is also troublesome, but I can at least: a. Check for BOM (UTF-8, UTF-16BE, UTF-16LE, UTF-32BE, UTF-32LE). b. Do some heuristic tests for each of the above encodings. c. Fallback to a user-specified encoding (default CP1252) if a and b don't yield result. I think this is probably useful enough to include, and relatively easy to expand if other potential encodings should be considered. Starting with PHP7.4, fgetcsv allows specification of null string as escape character in fgetcsv. This is a much better choice than the PHP (and PhpSpreadsheet) default of backslash in that it handles the file in the same manner as Excel does. There is one statement in Reader/CSV which would be adversely affected if the caller so specified (building a regular expression under the assumption that escape character is a single character). Fix that statement appropriately and add tests.
Configuration menu - View commit details
-
Copy full SHA for b691443 - Browse repository at this point
Copy the full SHA b691443View commit details -
Configuration menu - View commit details
-
Copy full SHA for a46032b - Browse repository at this point
Copy the full SHA a46032bView commit details -
Update Units of Measure supported by the CONVERT() function (#1768)
Now supports all current UoM in all categories, with both 1- and 2-character multiplier prefixes, and binary multiplier prefixes, including the new Temperature scales
Configuration menu - View commit details
-
Copy full SHA for bad8647 - Browse repository at this point
Copy the full SHA bad8647View commit details -
Configuration menu - View commit details
-
Copy full SHA for 3998509 - Browse repository at this point
Copy the full SHA 3998509View commit details -
Configuration menu - View commit details
-
Copy full SHA for c6074ab - Browse repository at this point
Copy the full SHA c6074abView commit details -
Configuration menu - View commit details
-
Copy full SHA for 298dd1e - Browse repository at this point
Copy the full SHA 298dd1eView commit details -
Configuration menu - View commit details
-
Copy full SHA for e51ea11 - Browse repository at this point
Copy the full SHA e51ea11View commit details -
Problems Using Builtin PHP Functions Directly As Excel Functions
This fixes issue #1789. As originally reported, stricter typing was causing PHP8 to throw an exception when a non-numeric value was passed to the Round function. Previous releases of PHP did not see this problem, however, on further analysis, they were also incorrect in returning 0 as the result in the erroneous situation, when they should have been returning a VALUE error. Yet more analysis showed that other functions would also have problems, and, in addition, might not handle invalid input (e.g. a negative length passed to REPT) or output (e.g. NAN in the case of ACOS(2)) correctly. The following MathTrig functions are affected: ABS, ACOS, ACOSH, ASIN, ASINH, ATAN, ATANH, COS, COSH, DEGREES (rad2deg), EXP, LN (log), LOG10, RADIANS (deg2rad), REPT (str_repeat), SIN, SINH, SQRT, TAN, TANH. One TextData function (REPT) is also affected. This change lets PhpSpreadsheet validate the input for each of these functions before passing control to the builtin, and handle the output afterwards. There were no explicit tests for any of these functions, a fact made easy to ignore by the fact that PhpSpreadsheet delegated the heavy lifting to PHP itself for these cases. A full suite of tests is now added for each of the affected functions.
Configuration menu - View commit details
-
Copy full SHA for 18257a9 - Browse repository at this point
Copy the full SHA 18257a9View commit details -
Only in 3 modules which are part of this PR.
Configuration menu - View commit details
-
Copy full SHA for 072f498 - Browse repository at this point
Copy the full SHA 072f498View commit details
Commits on Jan 19, 2021
-
Improved Handling of Tan(PI/2)
Return DIV0 error for TAN when COS is very small.
Configuration menu - View commit details
-
Copy full SHA for 699fd38 - Browse repository at this point
Copy the full SHA 699fd38View commit details
Commits on Jan 26, 2021
-
Results which should be infinity, i.e. DIV/0 error.
Configuration menu - View commit details
-
Copy full SHA for dc580f2 - Browse repository at this point
Copy the full SHA dc580f2View commit details