Releases: PHPOffice/PhpSpreadsheet
1.27.1
Added
- Nothing
Changed
- Nothing
Deprecated
- Nothing
Removed
- Nothing
Fixed
- Fix Composer --dev dependency issue with dealerdirect/phpcodesniffer-composer-installer renaming their
master
branch tomain
1.27.0
Added
- Option to specify a range of columns/rows for the Row/Column
isEmpty()
methods PR #3315 - Option for Cell Iterator to return a null value or create and return a new cell when accessing a cell that doesn't exist PR #3314
- Support for Structured References in the Calculation Engine PR #3261
- Limited Support for Form Controls PR #3130 Issue #2396 Issue #1770 Issue #2388 Issue #2904 Issue #2661
Changed
- Nothing
Deprecated
- Nothing
Removed
- Shared/JAMA is removed. PR #3260
Fixed
- Namespace-Aware Code for SheetViewOptions, SheetProtection PR #3230
- Additional Method for XIRR if Newton-Raphson Doesn't Converge Issue #689 PR #3262
- Better Handling of Composite Charts Issue #2333 PR #3265
- Update Column Reference for Columns Beginning with Y and Z Issue #3263 PR #3264
- Honor Fit to 1-Page Height Html/Pdf Issue #3266 PR #3279
- AND/OR/XOR Handling of Literal Strings PR #3287
- Xls Reader Vertical Break and Writer Page Order Issue #3305 PR #3306
1.26.0
1.26.0 - 2022-12-21
Added
- Extended flag options for the Reader
load()
and Writersave()
methods - Apply Row/Column limits (1048576 and XFD) in ReferenceHelper PR #3213
- Allow the creation of In-Memory Drawings from a string of binary image data, or from a stream. PR #3157
- Xlsx Reader support for Tables PR #2829
- Permit Date/Time Entered on Spreadsheet to be calculated as Float Issue #1416 PR #3121
Changed
- Nothing
Deprecated
- Direct update of Calculation::suppressFormulaErrors is replaced with setter.
- Font public static variable defaultColumnWidths replaced with constant DEFAULT_COLUMN_WIDTHS.
- ExcelError public static variable errorCodes replaced with constant ERROR_CODES.
- NumberFormat constant FORMAT_DATE_YYYYMMDD2 replaced with existing identical FORMAT_DATE_YYYYMMDD.
Removed
- Nothing
Fixed
- Fixed handling for
_xlws
prefixed functions from Office365 Issue #3245 PR #3247 - Conditionals formatting rules applied to rows/columns are removed Issue #3184 PR #3213
- Treat strings containing currency or accounting values as floats in Calculation Engine operations Issue #3165 PR #3189
- Treat strings containing percentage values as floats in Calculation Engine operations Issue #3155 PR #3156 and PR #3164
- Xlsx Reader Accept Palette of Fewer than 64 Colors Issue #3093 PR #3096
- Use Locale-Independent Float Conversion for Xlsx Writer Custom Property Issue #3095 PR #3099
- Allow setting AutoFilter range on a single cell or row Issue #3102 PR #3111
- Xlsx Reader External Data Validations Flag Missing Issue #2677 PR #3078
- Reduces extra memory usage on
__destruct()
calls PR #3092 - Additional properties for Trendlines Issue #3011 PR #3028
- Calculation suppressFormulaErrors fix Issue #1531 PR #3092
- Permit Date/Time Entered on Spreadsheet to be Calculated as Float Issue #1416 PR #3121
- Incorrect Handling of Data Validation Formula Containing Ampersand Issue #3145 PR #3146
- Xlsx Namespace Handling of Drawings, RowAndColumnAttributes, MergeCells Issue #3138 PR #3136
- Generation3 Copy With Image in Footer Issue #3126 PR #3140
- MATCH Function Problems with Int/Float Compare and Wildcards Issue #3141 PR #3142
- Fix ODS Read Filter on number-columns-repeated cell Issue #3148 PR #3149
- Problems Formatting Very Small and Very Large Numbers Issue #3128 PR #3152
- XlsxWrite preserve line styles for y-axis, not just x-axis PR #3163
- Xlsx Namespace Handling of Drawings, RowAndColumnAttributes, MergeCells Issue #3138 PR #3137
- More Detail for Cyclic Error Messages Issue #3169 PR #3170
- Improved Documentation for Deprecations - many PRs Issue #3162
1.25.2 - 2022-09-25
Added
- Nothing
Changed
- Nothing
Deprecated
- Nothing
Removed
- Nothing
Fixed
- Composer dependency clash with ezyang/htmlpurifier
Change Log
1.25.1 Change Log
1.25.0 - 2022-09-25
Added
- Implementation of the new
TEXTBEFORE()
,TEXTAFTER()
andTEXTSPLIT()
Excel Functions - Implementation of the
ARRAYTOTEXT()
andVALUETOTEXT()
Excel Functions - Support for 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
- 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
- Merge methods now allow an additional
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 PR #3077
- Fix DataValidation sqRef when inserting/deleting rows/columns Issue #3056 PR #3074
- Named ranges not usable as anchors in OFFSET function Issue #3013
- Fully flatten an array Issue #2955 PR #2956
- cellExists() and getCell() methods should support UTF-8 named cells Issue #2987 PR #2988
- Spreadsheet copy fixed, clone disabled. PR #2951
- Fix PDF problems with text rotation and paper size. Issue #1747 Issue #1713 PR #2960
- Limited support for chart titles as formulas Issue #2965 Issue #749 PR #2971
- Add Gradients, Transparency, and Hidden Axes to Chart Issue #2257 Issue #2229 Issue #2935 PR #2950
- Chart Support for Rounded Corners and Trendlines Issue #2968 Issue #2815 PR #2976
- Add setName Method for Chart Issue #2991 PR #3001
- Eliminate partial dependency on php-intl in StringHelper Issue #2982 PR #2994
- Minor changes for Pdf Issue #2999 PR #3002 PR #3006
- Html/Pdf Do net set background color for cells using (default) nofill PR #3016
- Add support for Date Axis to Chart Issue #2967 PR #3018
- Reconcile Differences Between Css and Excel for Cell Alignment PR #3048
- R1C1 Format Internationalization and Better Support for Relative Offsets Issue #1704 PR #3052
- Minor Fix for Percentage Formatting Issue #1929 PR #3053
1.24.1 - 2022-07-18
Added
- Add Chart Axis Option textRotation Issue #2705 PR #2940
Changed
- Nothing
Deprecated
- Nothing
Removed
- Nothing
Fixed
- Fix Encoding issue with Html reader (PHP 8.2 deprecation for mb_convert_encoding) Issue #2942 PR #2943
- Additional Chart fixes
- Pie chart with part separated unwantedly Issue #2506 PR #2928
- Chart styling is lost on simple load / save process Issue #1797 Issue #2077 PR #2930
- Can't create contour chart (surface 2d) Issue #2931 PR #2933
- VLOOKUP Breaks When Array Contains Null Cells Issue #2934 PR #2939
1.24.0 - 2022-07-09
Note that this will be the last 1.x branch release before the 2.x release. We will maintain both branches in parallel for a time; but users are requested to update to version 2.0 once that is fully available.
Added
-
Added
removeComment()
method for Worksheet PR #2875 -
Add point size option for scatter charts Issue #2298 PR #2801
-
Basic support for Xlsx reading/writing Chart Sheets PR #2830
Note that a ChartSheet is still only written as a normal Worksheet containing a single chart, not as an actual ChartSheet.
-
Added Worksheet visibility in Ods Reader PR #2851 and Gnumeric Reader PR #2853
-
Added Worksheet visibility in Ods Writer PR #2850
-
Allow Csv Reader to treat string as contents of file Issue #1285 PR #2792
-
Allow Csv Reader to store null string rather than leave cell empty Issue #2840 PR #2842
-
Provide new Worksheet methods to identify if a row or column is "empty", making allowance for different definitions of "empty":
- Treat rows/columns containing no cell records as empty (default)
- Treat cells containing a null value as empty
- Treat cells containing an empty string as empty
Changed
-
Modify
rangeBoundaries()
,rangeDimension()
andgetRangeBoundaries()
Coordinate methods to work with row/column ranges as well as with cell ranges and cells PR #2926 -
Better enforcement of value modification to match specified datatype when using
setValueExplicit()
-
Relax validation of merge cells to allow merge for a single cell reference Issue #2776
-
Memory and speed improvements, particularly for the Cell Collection, and the Writers.
See the Discussion section on github for details of performance across versions
-
Improved performance for removing rows/columns from a worksheet
Deprecated
- Nothing
Removed
- Nothing
Fixed
- Xls Reader resolving absolute named ranges to relative ranges Issue #2826 PR #2827
- Null value handling in the Excel Math/Trig PRODUCT() function Issue #2833 PR #2834
- Invalid Print Area defined in Xlsx corrupts internal storage of print area Issue #2848 PR #2849
- Time interval formatting Issue #2768 PR #2772
- Copy from Xls(x) to Html/Pdf loses drawings PR #2788
- Html Reader converting cell containing 0 to null string Issue #2810 PR #2813
- Many fixes for Charts, especially, but not limited to, Scatter, Bubble, and Surface charts. Issue #2762 Issue #2299 Issue #2700 Issue #2817 Issue #2763 Issue #2219 Issue #2863 PR #2828 PR #2841 PR #2846 PR #2852 PR #2856 PR #2865 PR #2872 PR #2879 PR #2898 PR #2906 PR #2922 PR #2923
- Adjust both coordinates for two-cell anchors when rows/columns are added/deleted. Issue #2908 PR #2909
- Keep calculated string results below 32K. PR #2921
- Filter out illegal Unicode char values FFFE/FFFF. Issue #2897 PR #2910
- Better handling of REF errors and propagation of all errors in Calculation engine. PR #2902
- Calculating Engine regexp for Column/Row references when there are multiple quoted worksheet references in the formula Issue #2874 PR #2899
1.23.0 - 2022-04-24
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 thecastFormattedNumberToNumeric()
setting is enabled.This functionality is locale-aware, using the server's locale settings to identify the thousands and decimal separators.
-
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 booleantrue
if the Locale is set tofr
.) -
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 than5, 3
).These functions now accept either a cell address string (
'E3')
or an array with columnId and rowId ([5, 3]
) or a newCellAddress
object as theircellAddress
/coordinate
argument.
This includes the methods:setCellValueByColumnAndRow()
use the equivalentsetCellValue()
setCellValueExplicitByColumnAndRow()
use the equivalentsetCellValueExplicit()
getCellByColumnAndRow()
use the equivalentgetCell()
cellExistsByColumnAndRow()
use the equivalentcellExists()
getStyleByColumnAndRow()
use the equivalentgetStyle()
setBreakByColumnAndRow()
use the equivalentsetBreak()
mergeCellsByColumnAndRow()
use the equivalentmergeCells()
unmergeCellsByColumnAndRow()
use the equivalentunmergeCells()
protectCellsByColumnAndRow()
use the equivalentprotectCells()
unprotectCellsByColumnAndRow()
use the equivalentunprotectCells()
setAutoFilterByColumnAndRow()
use the equivalentsetAutoFilter()
freezePaneByColumnAndRow()
use the equivalentfreezePane()
getCommentByColumnAndRow()
use the equivalentgetComment()
setSelectedCellByColumnAndRow()
use the equivalentsetSelectedCells()
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+
towb
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
1.22.0
Added
-
Namespacing phase 2 - styles.
PR #2471 -
Improved support for passing of array arguments to Excel function implementations to return array results (where appropriate). Issue #2551
This is the first stage in an ongoing process of adding array support to all appropriate function implementations,
-
Support for the Excel365 Math/Trig SEQUENCE() function PR #2536
-
Support for the Excel365 Math/Trig RANDARRAY() function PR #2540
Note that the Spill Operator is not yet supported in the Calculation Engine; but this can still be useful for defining array constants.
-
Improved support for Conditional Formatting Rules PR #2491
-
Provide support for a wider range of Conditional Formatting Rules for Xlsx Reader/Writer:
- Cells Containing (cellIs)
- Specific Text (containing, notContaining, beginsWith, endsWith)
- Dates Occurring (all supported timePeriods)
- Blanks/NoBlanks
- Errors/NoErrors
- Duplicates/Unique
- Expression
-
Provision of CF Wizards (for all the above listed rule types) to help create/modify CF Rules without having to manage all the combinations of types/operators, and the complexities of formula expressions, or the text/timePeriod attributes.
See documentation for details
-
Full support of the above CF Rules for the Xlsx Reader and Writer; even when the file being loaded has CF rules listed in the
<extLst><ext><ConditionalFormattings>
element for the worksheet rather than the<ConditionalFormatting>
element. -
Provision of a CellMatcher to identify if rules are matched for a cell, and which matching style will be applied.
-
Improved documentation and examples, covering all supported CF rule types.
-
-
Add support for one digit decimals (FORMAT_NUMBER_0, FORMAT_PERCENTAGE_0). PR #2525
-
Initial work enabling Excel function implementations for handling arrays as arguments when used in "array formulae" #2562
-
Enable most of the Date/Time functions to accept array arguments #2573
-
Array ready functions - Text, Math/Trig, Statistical, Engineering and Logical #2580
Changed
- Additional Russian translations for Excel Functions (courtesy of aleks-samurai).
- Improved code coverage for NumberFormat. PR #2556
- Extract some methods from the Calculation Engine into dedicated classes #2537
- Eliminate calls to
flattenSingleValue()
that are no longer required when we're checking for array values as arguments #2590
Deprecated
- Nothing
Removed
- Nothing
Fixed
- Fixed
ReferenceHelper@insertNewBefore
behavior when removing column before last column with null value
PR #2541 - Fix bug with
DOLLARDE()
andDOLLARFR()
functions when the dollar value is negative Issue #2578 PR #2579 - Fix partial function name matching when translating formulae from Russian to English Issue #2533 PR #2534
- Various bugs related to Conditional Formatting Rules, and errors in the Xlsx Writer for Conditional Formatting PR #2491
- Xlsx Reader merge range fixes.
Issue #2501
PR #2504 - Handle explicit "date" type for Cell in Xlsx Reader.
Issue #2373
PR #2485 - Recalibrate Row/Column Dimensions after removeRow/Column.
Issue #2442
PR #2486 - Refinement for XIRR.
Issue #2469
PR #2487 - Xlsx Reader handle cell with non-null explicit type but null value.
Issue #2488
PR #2489 - Xlsx Reader fix height and width for oneCellAnchorDrawings.
PR #2492 - Fix rounding error in NumberFormat::NUMBER_PERCENTAGE, NumberFormat::NUMBER_PERCENTAGE_00. PR #2555
- Don't treat thumbnail file as xml.
Issue #2516
PR #2517 - Eliminating Xlsx Reader warning when no sz tag for RichText.
Issue #2542
PR #2550 - Fix Xlsx/Xls Writer handling of inline strings.
Issue #353
PR #2569 - Richtext colors were not being read correctly after namespace change #2458
- Fix discrepancy between the way markdown tables are rendered in ReadTheDocs and in PHPStorm #2520
- Update Russian Functions Text File #2557
- Fix documentation, instantiation example #2564