Skip to content
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

Merged
merged 41 commits into from
Jan 26, 2021
Merged

Problems Using Builtin PHP Functions Directly As Excel Functions #1799

merged 41 commits into from
Jan 26, 2021

Commits on Jan 18, 2021

  1. 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.
    oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    52f3005 View commit details
    Browse the repository at this point in the history
  2. Resolve XSS Vulnerability in the HTML Writer (#1719)

    Resolve XSS Vulnerability in the HTML Writer
    Mark Baker authored and oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    e05442b View commit details
    Browse the repository at this point in the history
  3. Drop Travis

    PowerKiKi authored and oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    5596d6d View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    d75bba4 View commit details
    Browse the repository at this point in the history
  5. 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
    oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    e4be949 View commit details
    Browse the repository at this point in the history
  6. Changes for Scrutinizer

    Two changes to fix minor problems reported by Scrutinizer.
    oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    39025e8 View commit details
    Browse the repository at this point in the history
  7. Spelling: Tou -> You

    rhynodesigns authored and oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    6e71f80 View commit details
    Browse the repository at this point in the history
  8. 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.
    oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    95cb746 View commit details
    Browse the repository at this point in the history
  9. Update change log

    MarkBaker authored and oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    37ec4fa View commit details
    Browse the repository at this point in the history
  10. 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.
    oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    7b8f023 View commit details
    Browse the repository at this point in the history
  11. Update change log

    MarkBaker authored and oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    acd5a75 View commit details
    Browse the repository at this point in the history
  12. 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.
    oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    cf30b88 View commit details
    Browse the repository at this point in the history
  13. Update change log

    MarkBaker authored and oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    ebae8ef View commit details
    Browse the repository at this point in the history
  14. 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.
    oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    2cbe2fd View commit details
    Browse the repository at this point in the history
  15. 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
    Mark Baker authored and oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    a4bd396 View commit details
    Browse the repository at this point in the history
  16. 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
    Flinsch authored and oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    dfc0ff4 View commit details
    Browse the repository at this point in the history
  17. Update change log

    MarkBaker authored and oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    0ad58e6 View commit details
    Browse the repository at this point in the history
  18. 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.
    oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    201817c View commit details
    Browse the repository at this point in the history
  19. Update change log

    MarkBaker authored and oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    5079aac View commit details
    Browse the repository at this point in the history
  20. 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.
    jasverix authored and oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    6e56c2c View commit details
    Browse the repository at this point in the history
  21. fixes #1655 issue (#1656)

    Resolve problem with incorrectly defined hyperlinks
    kalyabin authored and oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    be3b30b View commit details
    Browse the repository at this point in the history
  22. Add 'ps' suffix to printer settings resources IDs (#1690)

    * Add 'ps' suffix to printer settings resources IDs
    sdespont authored and oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    fe45f08 View commit details
    Browse the repository at this point in the history
  23. Update change log

    MarkBaker authored and oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    b2b1f25 View commit details
    Browse the repository at this point in the history
  24. Configuration menu
    Copy the full SHA
    64a22e0 View commit details
    Browse the repository at this point in the history
  25. 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.
    oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    f011d1f View commit details
    Browse the repository at this point in the history
  26. Merge pull request #1698

    * Merge pull request #4 from PHPOffice/master
    
    * Restore Omitted Read XML Test
    oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    c1a63d7 View commit details
    Browse the repository at this point in the history
  27. Fix for bug #1592 (UPDATED) (#1623)

    * Fix for Xls when BIFF8 SST (FCh) has bad Shared string length
    ggiovinazzo authored and oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    65b8625 View commit details
    Browse the repository at this point in the history
  28. Update change log

    MarkBaker authored and oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    09b9771 View commit details
    Browse the repository at this point in the history
  29. Add nightly PHP 8.1 dev to github actions (#1763)

    Mark Baker authored and oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    99e023f View commit details
    Browse the repository at this point in the history
  30. Configuration menu
    Copy the full SHA
    a70c1eb View commit details
    Browse the repository at this point in the history
  31. 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.
    oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    b691443 View commit details
    Browse the repository at this point in the history
  32. Update changelog

    MarkBaker authored and oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    a46032b View commit details
    Browse the repository at this point in the history
  33. 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
    Mark Baker authored and oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    bad8647 View commit details
    Browse the repository at this point in the history
  34. Changelog for 1.16.0 release

    MarkBaker authored and oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    3998509 View commit details
    Browse the repository at this point in the history
  35. Configuration menu
    Copy the full SHA
    c6074ab View commit details
    Browse the repository at this point in the history
  36. Configuration menu
    Copy the full SHA
    298dd1e View commit details
    Browse the repository at this point in the history
  37. Merge pull request #6 from PHPOffice/master

    Sync Fork With Base
    oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    e51ea11 View commit details
    Browse the repository at this point in the history
  38. 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.
    oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    18257a9 View commit details
    Browse the repository at this point in the history
  39. Scrutinizer Recommendations

    Only in 3 modules which are part of this PR.
    oleibman committed Jan 18, 2021
    Configuration menu
    Copy the full SHA
    072f498 View commit details
    Browse the repository at this point in the history

Commits on Jan 19, 2021

  1. Improved Handling of Tan(PI/2)

    Return DIV0 error for TAN when COS is very small.
    oleibman committed Jan 19, 2021
    Configuration menu
    Copy the full SHA
    699fd38 View commit details
    Browse the repository at this point in the history

Commits on Jan 26, 2021

  1. Additional Trig Tests

    Results which should be infinity, i.e. DIV/0 error.
    oleibman committed Jan 26, 2021
    Configuration menu
    Copy the full SHA
    dc580f2 View commit details
    Browse the repository at this point in the history