PhpSpreadsheet v1.23.0 Release Notes

Release Date: 2022-04-24 // almost 2 years ago
  • โž• Added

    • ๐Ÿ‘ Ods Writer support for Freeze Pane Issue #2013 PR #2755
    • ๐Ÿ‘ Ods Writer support for setting column width/row height (including the use of AutoSize) Issue #2346 PR #2753
    • Introduced CellAddress, CellRange, RowRange and ColumnRange value objects that can be used as an alternative to a string value (e.g. 'C5', 'B2:D4', '2:2' or 'B:C') in appropriate contexts.
    • Implementation of the FILTER(), SORT(), SORTBY() and UNIQUE() Lookup/Reference (array) functions.
    • Implementation of the ISREF() Information function.
    • โž• Added support for reading "formatted" numeric values from Csv files; although default behaviour of reading these values as strings is preserved.

    (i.e a value of "12,345.67" can be read as numeric 12345.67, not simply as a string "12,345.67", if the castFormattedNumberToNumeric() setting is enabled.

    This functionality is locale-aware, using the server's locale settings to identify the thousands and decimal separators.

    • ๐Ÿ‘Œ Support for two cell anchor drawing of images. #2532 #2674
    • ๐Ÿ‘ Limited support for Xls Reader to handle Conditional Formatting:

    Ranges and Rules are read, but style is currently limited to font size, weight and color; and to fill style and color.

    • โž• Add ability to suppress Mac line ending check for CSV #2623
    • ๐ŸŽ‰ Initial support for creating and writing Tables (Xlsx Writer only) PR #2671

    See /samples/Table for examples of use.

    Note that PreCalculateFormulas needs to be disabled when saving spreadsheets containing tables with formulae (totals or column formulae).

    ๐Ÿ”„ Changed

    • Gnumeric Reader now loads number formatting for cells.
    • Gnumeric Reader now correctly identifies selected worksheet and selected cells in a worksheet.
    • ๐Ÿ”จ Some Refactoring of the Ods Reader, moving all formula and address translation from Ods to Excel into a separate class to eliminate code duplication and ensure consistency.
    • ๐Ÿ‘‰ Make Boolean Conversion in Csv Reader locale-aware when using the String Value Binder.

    This is determined by the Calculation Engine locale setting.

    (i.e. "Vrai" wil be converted to a boolean true if the Locale is set to fr.)

    • ๐Ÿ‘ Allow psr/simple-cache 2.x

    ๐Ÿ—„ Deprecated

    • ๐Ÿ‘€ All Excel Function implementations in Calculation\Functions (including the Error functions) have been moved to dedicated classes for groups of related functions. See the docblocks against all the deprecated methods for details of the new methods to call instead. At some point, these old classes will be deleted.
    • Worksheet methods that reference cells "byColumnandRow". All such methods have an equivalent that references the cell by its address (e.g. 'E3' rather than 5, 3).

    These functions now accept either a cell address string ('E3') or an array with columnId and rowId ([5, 3]) or a new CellAddress object as their cellAddress/coordinate argument. This includes the methods:

    • setCellValueByColumnAndRow() use the equivalent setCellValue()
    • setCellValueExplicitByColumnAndRow() use the equivalent setCellValueExplicit()
    • getCellByColumnAndRow() use the equivalent getCell()
    • cellExistsByColumnAndRow() use the equivalent cellExists()
    • getStyleByColumnAndRow() use the equivalent getStyle()
    • setBreakByColumnAndRow() use the equivalent setBreak()
    • mergeCellsByColumnAndRow() use the equivalent mergeCells()
    • unmergeCellsByColumnAndRow() use the equivalent unmergeCells()
    • protectCellsByColumnAndRow() use the equivalent protectCells()
    • unprotectCellsByColumnAndRow() use the equivalent unprotectCells()
    • setAutoFilterByColumnAndRow() use the equivalent setAutoFilter()
    • freezePaneByColumnAndRow() use the equivalent freezePane()
    • getCommentByColumnAndRow() use the equivalent getComment()
    • setSelectedCellByColumnAndRow() use the equivalent setSelectedCells()

    This change provides more consistency in the methods (not every "by cell address" method has an equivalent "byColumnAndRow" method); and the "by cell address" methods often provide more flexibility, such as allowing a range of cells, or referencing them by passing the defined name of a named range as the argument.

    โœ‚ Removed

    • Nothing

    ๐Ÿ›  Fixed

    • ๐Ÿ‘‰ Make allowance for the AutoFilter dropdown icon in the first row of an Autofilter range when using Autosize columns. Issue #2413 PR #2754
    • ๐Ÿ‘Œ Support for "chained" ranges (e.g. A5:C10:C20:F1) in the Calculation Engine; and also support for using named ranges with the Range operator (e.g. NamedRange1:NamedRange2) Issue #2730 PR #2746
    • โšก๏ธ Update Conditional Formatting ranges and rule conditions when inserting/deleting rows/columns Issue #2678 PR #2689
    • ๐Ÿ‘ Allow INDIRECT() to accept row/column ranges as well as cell ranges PR #2687
    • ๐Ÿ›  Fix bug when deleting cells with hyperlinks, where the hyperlink was then being "inherited" by whatever cell moved to that cell address.
    • ๐Ÿ›  Fix bug in Conditional Formatting in the Xls Writer that resulted in a broken file when there were multiple conditional ranges in a worksheet.
    • ๐Ÿ›  Fix Conditional Formatting in the Xls Writer to work with rules that contain string literals, cell references and formulae.
    • ๐Ÿ›  Fix for setting Active Sheet to the first loaded worksheet when bookViews element isn't defined Issue #2666 PR #2669
    • ๐Ÿ›  Fixed behaviour of XLSX font style vertical align settings PR #2619
    • ๐ŸŒ Resolved formula translations to handle separators (row and column) for array functions as well as for function argument separators; and cleanly handle nesting levels.

    Note that this method is used when translating Excel functions between en_us and other locale languages, as well as when converting formulae between different spreadsheet formats (e.g. Ods to Excel).

    Nor is this a perfect solution, as there may still be issues when function calls have array arguments that themselves contain function calls; but it's still better than the current logic.

    • ๐Ÿ›  Fix for escaping double quotes within a formula Issue #1971 PR #2651
    • ๐Ÿ”„ Change open mode for output from wb+ to wb Issue #2372 PR #2657
    • ๐Ÿ‘‰ Use color palette if supplied Issue #2499 PR #2595
    • Xls reader treat drawing offsets as int rather than float PR #2648
    • ๐Ÿ’… Handle booleans in conditional styles properly PR #2654
    • ๐Ÿ›  Fix for reading files in the root directory of a ZipFile, which should not be prefixed by relative paths ("./") as dirname($filename) does by default.
    • ๐Ÿ›  Fix invalid style of cells in empty columns with columnDimensions and rows with rowDimensions in added external sheet. PR #2739
    • Time Interval Formatting Issue #2768 PR #2772