| 1 |
# Changelog |
| 2 |
|
| 3 |
All notable changes to this project will be documented in this file. |
| 4 |
|
| 5 |
The format is based on [](https://keepachangelog.comKeep a Changelog](https://keepachangelog.com](https://keepachangelog.com) |
| 6 |
and this project adheres to [](https://semver.orgSemantic Versioning](https://semver.org](https://semver.org). |
| 7 |
|
| 8 |
## [Unreleased] |
| 9 |
|
| 10 |
|
| 11 |
## [1.8.2] - 2019-07-08 |
| 12 |
|
| 13 |
### Fixed |
| 14 |
|
| 15 |
- Uncaught error when opening ods file and properties aren't defined - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/1047Issue #1047](https://github.com/PHPOffice/PhpSpreadsheet/issues/1047](https://github.com/PHPOffice/PhpSpreadsheet/issues/1047) |
| 16 |
- Xlsx Reader Cell datavalidations bug - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/1052PR #1052](https://github.com/PHPOffice/PhpSpreadsheet/pull/1052](https://github.com/PHPOffice/PhpSpreadsheet/pull/1052) |
| 17 |
|
| 18 |
## [1.8.1] - 2019-07-02 |
| 19 |
|
| 20 |
### Fixed |
| 21 |
|
| 22 |
- Allow nullable theme for Xlsx Style Reader class - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/1043Issue #1043](https://github.com/PHPOffice/PhpSpreadsheet/issues/1043](https://github.com/PHPOffice/PhpSpreadsheet/issues/1043) |
| 23 |
|
| 24 |
## [1.8.0] - 2019-07-01 |
| 25 |
|
| 26 |
### Security Fix (CVE-2019-12331) |
| 27 |
|
| 28 |
- Detect double-encoded xml in the Security scanner, and reject as suspicious. |
| 29 |
- This change also broadens the scope of the `libxml_disable_entity_loader` setting when reading XML-based formats, so that it is enabled while the xml is being parsed and not simply while it is loaded. |
| 30 |
On some versions of PHP, this can cause problems because it is not thread-safe, and can affect other PHP scripts running on the same server. This flag is set to true when instantiating a loader, and back to its original setting when the Reader is no longer in scope, or manually unset. |
| 31 |
- Provide a check to identify whether libxml_disable_entity_loader is thread-safe or not. |
| 32 |
|
| 33 |
`XmlScanner::threadSafeLibxmlDisableEntityLoaderAvailability()` |
| 34 |
- Provide an option to disable the libxml_disable_entity_loader call through settings. This is not recommended as it reduces the security of the XML-based readers, and should only be used if you understand the consequences and have no other choice. |
| 35 |
|
| 36 |
### Added |
| 37 |
|
| 38 |
- Added support for the SWITCH function - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/963Issue #963](https://github.com/PHPOffice/PhpSpreadsheet/issues/963](https://github.com/PHPOffice/PhpSpreadsheet/issues/963) and [](https://github.com/PHPOffice/PhpSpreadsheet/pull/983PR #983](https://github.com/PHPOffice/PhpSpreadsheet/pull/983](https://github.com/PHPOffice/PhpSpreadsheet/pull/983) |
| 39 |
- Add accounting number format style [](https://github.com/PHPOffice/PhpSpreadsheet/pull/974#974](https://github.com/PHPOffice/PhpSpreadsheet/pull/974](https://github.com/PHPOffice/PhpSpreadsheet/pull/974) |
| 40 |
|
| 41 |
### Fixed |
| 42 |
|
| 43 |
- Whitelist `tsv` extension when opening CSV files [](https://github.com/PHPOffice/PhpSpreadsheet/issues/429#429](https://github.com/PHPOffice/PhpSpreadsheet/issues/429](https://github.com/PHPOffice/PhpSpreadsheet/issues/429) |
| 44 |
- Fix a SUMIF warning with some versions of PHP when having different length of arrays provided as input [](https://github.com/PHPOffice/PhpSpreadsheet/pull/873#873](https://github.com/PHPOffice/PhpSpreadsheet/pull/873](https://github.com/PHPOffice/PhpSpreadsheet/pull/873) |
| 45 |
- Fix incorrectly handled backslash-escaped space characters in number format |
| 46 |
|
| 47 |
## [1.7.0] - 2019-05-26 |
| 48 |
|
| 49 |
- Added support for inline styles in Html reader (borders, alignment, width, height) |
| 50 |
- QuotedText cells no longer treated as formulae if the content begins with a `=` |
| 51 |
- Clean handling for DDE in formulae |
| 52 |
|
| 53 |
### Fixed |
| 54 |
|
| 55 |
- Fix handling for escaped enclosures and new lines in CSV Separator Inference |
| 56 |
- Fix MATCH an error was appearing when comparing strings against 0 (always true) |
| 57 |
- Fix wrong calculation of highest column with specified row [](https://github.com/PHPOffice/PhpSpreadsheet/issues/700#700](https://github.com/PHPOffice/PhpSpreadsheet/issues/700](https://github.com/PHPOffice/PhpSpreadsheet/issues/700) |
| 58 |
- Fix VLOOKUP |
| 59 |
- Fix return type hint |
| 60 |
|
| 61 |
## [1.6.0] - 2019-01-02 |
| 62 |
|
| 63 |
### Added |
| 64 |
|
| 65 |
- Refactored Matrix Functions to use external Matrix library |
| 66 |
- Possibility to specify custom colors of values for pie and donut charts - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/768#768](https://github.com/PHPOffice/PhpSpreadsheet/pull/768](https://github.com/PHPOffice/PhpSpreadsheet/pull/768) |
| 67 |
|
| 68 |
### Fixed |
| 69 |
|
| 70 |
- Improve XLSX parsing speed if no readFilter is applied - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/772#772](https://github.com/PHPOffice/PhpSpreadsheet/issues/772](https://github.com/PHPOffice/PhpSpreadsheet/issues/772) |
| 71 |
- Fix column names if read filter calls in XLSX reader skip columns - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/777#777](https://github.com/PHPOffice/PhpSpreadsheet/pull/777](https://github.com/PHPOffice/PhpSpreadsheet/pull/777) |
| 72 |
- XLSX reader can now ignore blank cells, using the setReadEmptyCells(false) method. - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/810#810](https://github.com/PHPOffice/PhpSpreadsheet/issues/810](https://github.com/PHPOffice/PhpSpreadsheet/issues/810) |
| 73 |
- Fix LOOKUP function which was breaking on edge cases - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/796#796](https://github.com/PHPOffice/PhpSpreadsheet/issues/796](https://github.com/PHPOffice/PhpSpreadsheet/issues/796) |
| 74 |
- Fix VLOOKUP with exact matches - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/809#809](https://github.com/PHPOffice/PhpSpreadsheet/pull/809](https://github.com/PHPOffice/PhpSpreadsheet/pull/809) |
| 75 |
- Support COUNTIFS multiple arguments - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/830#830](https://github.com/PHPOffice/PhpSpreadsheet/pull/830](https://github.com/PHPOffice/PhpSpreadsheet/pull/830) |
| 76 |
- Change `libxml_disable_entity_loader()` as shortly as possible - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/819#819](https://github.com/PHPOffice/PhpSpreadsheet/pull/819](https://github.com/PHPOffice/PhpSpreadsheet/pull/819) |
| 77 |
- Improved memory usage and performance when loading large spreadsheets - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/822#822](https://github.com/PHPOffice/PhpSpreadsheet/pull/822](https://github.com/PHPOffice/PhpSpreadsheet/pull/822) |
| 78 |
- Improved performance when loading large spreadsheets - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/825#825](https://github.com/PHPOffice/PhpSpreadsheet/pull/825](https://github.com/PHPOffice/PhpSpreadsheet/pull/825) |
| 79 |
- Improved performance when loading large spreadsheets - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/824#824](https://github.com/PHPOffice/PhpSpreadsheet/pull/824](https://github.com/PHPOffice/PhpSpreadsheet/pull/824) |
| 80 |
- Fix color from CSS when reading from HTML - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/831#831](https://github.com/PHPOffice/PhpSpreadsheet/pull/831](https://github.com/PHPOffice/PhpSpreadsheet/pull/831) |
| 81 |
- Fix infinite loop when reading invalid ODS files - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/832#832](https://github.com/PHPOffice/PhpSpreadsheet/pull/832](https://github.com/PHPOffice/PhpSpreadsheet/pull/832) |
| 82 |
- Fix time format for duration is incorrect - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/666#666](https://github.com/PHPOffice/PhpSpreadsheet/pull/666](https://github.com/PHPOffice/PhpSpreadsheet/pull/666) |
| 83 |
- Fix iconv unsupported `//IGNORE//TRANSLIT` on IBM i - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/791#791](https://github.com/PHPOffice/PhpSpreadsheet/issues/791](https://github.com/PHPOffice/PhpSpreadsheet/issues/791) |
| 84 |
|
| 85 |
### Changed |
| 86 |
|
| 87 |
- `master` is the new default branch, `develop` does not exist anymore |
| 88 |
|
| 89 |
## [1.5.2] - 2018-11-25 |
| 90 |
|
| 91 |
### Security |
| 92 |
|
| 93 |
- Improvements to the design of the XML Security Scanner - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/771#771](https://github.com/PHPOffice/PhpSpreadsheet/issues/771](https://github.com/PHPOffice/PhpSpreadsheet/issues/771) |
| 94 |
|
| 95 |
## [1.5.1] - 2018-11-20 |
| 96 |
|
| 97 |
### Security |
| 98 |
|
| 99 |
- Fix and improve XXE security scanning for XML-based and HTML Readers - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/771#771](https://github.com/PHPOffice/PhpSpreadsheet/issues/771](https://github.com/PHPOffice/PhpSpreadsheet/issues/771) |
| 100 |
|
| 101 |
### Added |
| 102 |
|
| 103 |
- Support page margin in mPDF - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/750#750](https://github.com/PHPOffice/PhpSpreadsheet/issues/750](https://github.com/PHPOffice/PhpSpreadsheet/issues/750) |
| 104 |
|
| 105 |
### Fixed |
| 106 |
|
| 107 |
- Support numeric condition in SUMIF, SUMIFS, AVERAGEIF, COUNTIF, MAXIF and MINIF - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/683#683](https://github.com/PHPOffice/PhpSpreadsheet/issues/683](https://github.com/PHPOffice/PhpSpreadsheet/issues/683) |
| 108 |
- SUMIFS containing multiple conditions - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/704#704](https://github.com/PHPOffice/PhpSpreadsheet/issues/704](https://github.com/PHPOffice/PhpSpreadsheet/issues/704) |
| 109 |
- Csv reader avoid notice when the file is empty - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/743#743](https://github.com/PHPOffice/PhpSpreadsheet/pull/743](https://github.com/PHPOffice/PhpSpreadsheet/pull/743) |
| 110 |
- Fix print area parser for XLSX reader - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/734#734](https://github.com/PHPOffice/PhpSpreadsheet/pull/734](https://github.com/PHPOffice/PhpSpreadsheet/pull/734) |
| 111 |
- Support overriding `DefaultValueBinder::dataTypeForValue()` without overriding `DefaultValueBinder::bindValue()` - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/735#735](https://github.com/PHPOffice/PhpSpreadsheet/pull/735](https://github.com/PHPOffice/PhpSpreadsheet/pull/735) |
| 112 |
- Mpdf export can exceed pcre.backtrack_limit - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/637#637](https://github.com/PHPOffice/PhpSpreadsheet/issues/637](https://github.com/PHPOffice/PhpSpreadsheet/issues/637) |
| 113 |
- Fix index overflow on data values array - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/748#748](https://github.com/PHPOffice/PhpSpreadsheet/pull/748](https://github.com/PHPOffice/PhpSpreadsheet/pull/748) |
| 114 |
|
| 115 |
## [1.5.0] - 2018-10-21 |
| 116 |
|
| 117 |
### Added |
| 118 |
|
| 119 |
- PHP 7.3 support |
| 120 |
- Add the DAYS() function - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/594#594](https://github.com/PHPOffice/PhpSpreadsheet/pull/594](https://github.com/PHPOffice/PhpSpreadsheet/pull/594) |
| 121 |
|
| 122 |
### Fixed |
| 123 |
|
| 124 |
- Sheet title can contain exclamation mark - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/325#325](https://github.com/PHPOffice/PhpSpreadsheet/issues/325](https://github.com/PHPOffice/PhpSpreadsheet/issues/325) |
| 125 |
- Xls file cause the exception during open by Xls reader - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/402#402](https://github.com/PHPOffice/PhpSpreadsheet/issues/402](https://github.com/PHPOffice/PhpSpreadsheet/issues/402) |
| 126 |
- Skip non numeric value in SUMIF - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/618#618](https://github.com/PHPOffice/PhpSpreadsheet/pull/618](https://github.com/PHPOffice/PhpSpreadsheet/pull/618) |
| 127 |
- OFFSET should allow omitted height and width - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/561#561](https://github.com/PHPOffice/PhpSpreadsheet/issues/561](https://github.com/PHPOffice/PhpSpreadsheet/issues/561) |
| 128 |
- Correctly determine delimiter when CSV contains line breaks inside enclosures - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/716#716](https://github.com/PHPOffice/PhpSpreadsheet/issues/716](https://github.com/PHPOffice/PhpSpreadsheet/issues/716) |
| 129 |
|
| 130 |
## [1.4.1] - 2018-09-30 |
| 131 |
|
| 132 |
### Fixed |
| 133 |
|
| 134 |
- Remove locale from formatting string - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/644#644](https://github.com/PHPOffice/PhpSpreadsheet/pull/644](https://github.com/PHPOffice/PhpSpreadsheet/pull/644) |
| 135 |
- Allow iterators to go out of bounds with prev - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/587#587](https://github.com/PHPOffice/PhpSpreadsheet/issues/587](https://github.com/PHPOffice/PhpSpreadsheet/issues/587) |
| 136 |
- Fix warning when reading xlsx without styles - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/631#631](https://github.com/PHPOffice/PhpSpreadsheet/pull/631](https://github.com/PHPOffice/PhpSpreadsheet/pull/631) |
| 137 |
- Fix broken sample links on windows due to $baseDir having backslash - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/653#653](https://github.com/PHPOffice/PhpSpreadsheet/pull/653](https://github.com/PHPOffice/PhpSpreadsheet/pull/653) |
| 138 |
|
| 139 |
## [1.4.0] - 2018-08-06 |
| 140 |
|
| 141 |
### Added |
| 142 |
|
| 143 |
- Add excel function EXACT(value1, value2) support - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/595#595](https://github.com/PHPOffice/PhpSpreadsheet/pull/595](https://github.com/PHPOffice/PhpSpreadsheet/pull/595) |
| 144 |
- Support workbook view attributes for Xlsx format - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/523#523](https://github.com/PHPOffice/PhpSpreadsheet/issues/523](https://github.com/PHPOffice/PhpSpreadsheet/issues/523) |
| 145 |
- Read and write hyperlink for drawing image - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/490#490](https://github.com/PHPOffice/PhpSpreadsheet/pull/490](https://github.com/PHPOffice/PhpSpreadsheet/pull/490) |
| 146 |
- Added calculation engine support for the new bitwise functions that were added in MS Excel 2013 |
| 147 |
- BITAND() Returns a Bitwise 'And' of two numbers |
| 148 |
- BITOR() Returns a Bitwise 'Or' of two number |
| 149 |
- BITXOR() Returns a Bitwise 'Exclusive Or' of two numbers |
| 150 |
- BITLSHIFT() Returns a number shifted left by a specified number of bits |
| 151 |
- BITRSHIFT() Returns a number shifted right by a specified number of bits |
| 152 |
- Added calculation engine support for other new functions that were added in MS Excel 2013 and MS Excel 2016 |
| 153 |
- Text Functions |
| 154 |
- CONCAT() Synonym for CONCATENATE() |
| 155 |
- NUMBERVALUE() Converts text to a number, in a locale-independent way |
| 156 |
- UNICHAR() Synonym for CHAR() in PHPSpreadsheet, which has always used UTF-8 internally |
| 157 |
- UNIORD() Synonym for ORD() in PHPSpreadsheet, which has always used UTF-8 internally |
| 158 |
- TEXTJOIN() Joins together two or more text strings, separated by a delimiter |
| 159 |
- Logical Functions |
| 160 |
- XOR() Returns a logical Exclusive Or of all arguments |
| 161 |
- Date/Time Functions |
| 162 |
- ISOWEEKNUM() Returns the ISO 8601 week number of the year for a given date |
| 163 |
- Lookup and Reference Functions |
| 164 |
- FORMULATEXT() Returns a formula as a string |
| 165 |
- Financial Functions |
| 166 |
- PDURATION() Calculates the number of periods required for an investment to reach a specified value |
| 167 |
- RRI() Calculates the interest rate required for an investment to grow to a specified future value |
| 168 |
- Engineering Functions |
| 169 |
- ERF.PRECISE() Returns the error function integrated between 0 and a supplied limit |
| 170 |
- ERFC.PRECISE() Synonym for ERFC |
| 171 |
- Math and Trig Functions |
| 172 |
- SEC() Returns the secant of an angle |
| 173 |
- SECH() Returns the hyperbolic secant of an angle |
| 174 |
- CSC() Returns the cosecant of an angle |
| 175 |
- CSCH() Returns the hyperbolic cosecant of an angle |
| 176 |
- COT() Returns the cotangent of an angle |
| 177 |
- COTH() Returns the hyperbolic cotangent of an angle |
| 178 |
- ACOT() Returns the cotangent of an angle |
| 179 |
- ACOTH() Returns the hyperbolic cotangent of an angle |
| 180 |
- Refactored Complex Engineering Functions to use external complex number library |
| 181 |
- Added calculation engine support for the new complex number functions that were added in MS Excel 2013 |
| 182 |
- IMCOSH() Returns the hyperbolic cosine of a complex number |
| 183 |
- IMCOT() Returns the cotangent of a complex number |
| 184 |
- IMCSC() Returns the cosecant of a complex number |
| 185 |
- IMCSCH() Returns the hyperbolic cosecant of a complex number |
| 186 |
- IMSEC() Returns the secant of a complex number |
| 187 |
- IMSECH() Returns the hyperbolic secant of a complex number |
| 188 |
- IMSINH() Returns the hyperbolic sine of a complex number |
| 189 |
- IMTAN() Returns the tangent of a complex number |
| 190 |
|
| 191 |
### Fixed |
| 192 |
|
| 193 |
- Fix ISFORMULA() function to work with a cell reference to another worksheet |
| 194 |
- Xlsx reader crashed when reading a file with workbook protection - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/553#553](https://github.com/PHPOffice/PhpSpreadsheet/pull/553](https://github.com/PHPOffice/PhpSpreadsheet/pull/553) |
| 195 |
- Cell formats with escaped spaces were causing incorrect date formatting - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/557#557](https://github.com/PHPOffice/PhpSpreadsheet/issues/557](https://github.com/PHPOffice/PhpSpreadsheet/issues/557) |
| 196 |
- Could not open CSV file containing HTML fragment - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/564#564](https://github.com/PHPOffice/PhpSpreadsheet/issues/564](https://github.com/PHPOffice/PhpSpreadsheet/issues/564) |
| 197 |
- Exclude the vendor folder in migration - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/481#481](https://github.com/PHPOffice/PhpSpreadsheet/issues/481](https://github.com/PHPOffice/PhpSpreadsheet/issues/481) |
| 198 |
- Chained operations on cell ranges involving borders operated on last cell only [](https://github.com/PHPOffice/PhpSpreadsheet/issues/428#428](https://github.com/PHPOffice/PhpSpreadsheet/issues/428](https://github.com/PHPOffice/PhpSpreadsheet/issues/428) |
| 199 |
- Avoid memory exhaustion when cloning worksheet with a drawing [](https://github.com/PHPOffice/PhpSpreadsheet/issues/437#437](https://github.com/PHPOffice/PhpSpreadsheet/issues/437](https://github.com/PHPOffice/PhpSpreadsheet/issues/437) |
| 200 |
- Migration tool keep variables containing $PHPExcel untouched [](https://github.com/PHPOffice/PhpSpreadsheet/issues/598#598](https://github.com/PHPOffice/PhpSpreadsheet/issues/598](https://github.com/PHPOffice/PhpSpreadsheet/issues/598) |
| 201 |
- Rowspans/colspans were incorrect when adding worksheet using loadIntoExisting [](https://github.com/PHPOffice/PhpSpreadsheet/issues/619#619](https://github.com/PHPOffice/PhpSpreadsheet/issues/619](https://github.com/PHPOffice/PhpSpreadsheet/issues/619) |
| 202 |
|
| 203 |
## [1.3.1] - 2018-06-12 |
| 204 |
|
| 205 |
### Fixed |
| 206 |
|
| 207 |
- Ranges across Z and AA columns incorrectly threw an exception - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/545#545](https://github.com/PHPOffice/PhpSpreadsheet/issues/545](https://github.com/PHPOffice/PhpSpreadsheet/issues/545) |
| 208 |
|
| 209 |
## [1.3.0] - 2018-06-10 |
| 210 |
|
| 211 |
### Added |
| 212 |
|
| 213 |
- Support to read Xlsm templates with form elements, macros, printer settings, protected elements and back compatibility drawing, and save result without losing important elements of document - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/435#435](https://github.com/PHPOffice/PhpSpreadsheet/issues/435](https://github.com/PHPOffice/PhpSpreadsheet/issues/435) |
| 214 |
- Expose sheet title maximum length as `Worksheet::SHEET_TITLE_MAXIMUM_LENGTH` - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/482#482](https://github.com/PHPOffice/PhpSpreadsheet/issues/482](https://github.com/PHPOffice/PhpSpreadsheet/issues/482) |
| 215 |
- Allow escape character to be set in CSV reader – [](https://github.com/PHPOffice/PhpSpreadsheet/issues/492#492](https://github.com/PHPOffice/PhpSpreadsheet/issues/492](https://github.com/PHPOffice/PhpSpreadsheet/issues/492) |
| 216 |
|
| 217 |
### Fixed |
| 218 |
|
| 219 |
- Subtotal 9 in a group that has other subtotals 9 exclude the totals of the other subtotals in the range - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/332#332](https://github.com/PHPOffice/PhpSpreadsheet/issues/332](https://github.com/PHPOffice/PhpSpreadsheet/issues/332) |
| 220 |
- `Helper\Html` support UTF-8 HTML input - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/444#444](https://github.com/PHPOffice/PhpSpreadsheet/issues/444](https://github.com/PHPOffice/PhpSpreadsheet/issues/444) |
| 221 |
- Xlsx loaded an extra empty comment for each real comment - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/375#375](https://github.com/PHPOffice/PhpSpreadsheet/issues/375](https://github.com/PHPOffice/PhpSpreadsheet/issues/375) |
| 222 |
- Xlsx reader do not read rows and columns filtered out in readFilter at all - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/370#370](https://github.com/PHPOffice/PhpSpreadsheet/issues/370](https://github.com/PHPOffice/PhpSpreadsheet/issues/370) |
| 223 |
- Make newer Excel versions properly recalculate formulas on document open - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/456#456](https://github.com/PHPOffice/PhpSpreadsheet/issues/456](https://github.com/PHPOffice/PhpSpreadsheet/issues/456) |
| 224 |
- `Coordinate::extractAllCellReferencesInRange()` throws an exception for an invalid range – [](https://github.com/PHPOffice/PhpSpreadsheet/issues/519#519](https://github.com/PHPOffice/PhpSpreadsheet/issues/519](https://github.com/PHPOffice/PhpSpreadsheet/issues/519) |
| 225 |
- Fixed parsing of conditionals in COUNTIF functions - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/526#526](https://github.com/PHPOffice/PhpSpreadsheet/issues/526](https://github.com/PHPOffice/PhpSpreadsheet/issues/526) |
| 226 |
- Corruption errors for saved Xlsx docs with frozen panes - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/532#532](https://github.com/PHPOffice/PhpSpreadsheet/issues/532](https://github.com/PHPOffice/PhpSpreadsheet/issues/532) |
| 227 |
|
| 228 |
## [1.2.1] - 2018-04-10 |
| 229 |
|
| 230 |
### Fixed |
| 231 |
|
| 232 |
- Plain text and richtext mixed in same cell can be read - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/442#442](https://github.com/PHPOffice/PhpSpreadsheet/issues/442](https://github.com/PHPOffice/PhpSpreadsheet/issues/442) |
| 233 |
|
| 234 |
## [1.2.0] - 2018-03-04 |
| 235 |
|
| 236 |
### Added |
| 237 |
|
| 238 |
- HTML writer creates a generator meta tag - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/312#312](https://github.com/PHPOffice/PhpSpreadsheet/issues/312](https://github.com/PHPOffice/PhpSpreadsheet/issues/312) |
| 239 |
- Support invalid zoom value in XLSX format - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/350#350](https://github.com/PHPOffice/PhpSpreadsheet/pull/350](https://github.com/PHPOffice/PhpSpreadsheet/pull/350) |
| 240 |
- Support for `_xlfn.` prefixed functions and `ISFORMULA`, `MODE.SNGL`, `STDEV.S`, `STDEV.P` - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/390#390](https://github.com/PHPOffice/PhpSpreadsheet/pull/390](https://github.com/PHPOffice/PhpSpreadsheet/pull/390) |
| 241 |
|
| 242 |
### Fixed |
| 243 |
|
| 244 |
- Avoid potentially unsupported PSR-16 cache keys - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/354#354](https://github.com/PHPOffice/PhpSpreadsheet/issues/354](https://github.com/PHPOffice/PhpSpreadsheet/issues/354) |
| 245 |
- Check for MIME type to know if CSV reader can read a file - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/167#167](https://github.com/PHPOffice/PhpSpreadsheet/issues/167](https://github.com/PHPOffice/PhpSpreadsheet/issues/167) |
| 246 |
- Use proper € symbol for currency format - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/379#379](https://github.com/PHPOffice/PhpSpreadsheet/pull/379](https://github.com/PHPOffice/PhpSpreadsheet/pull/379) |
| 247 |
- Read printing area correctly when skipping some sheets - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/371#371](https://github.com/PHPOffice/PhpSpreadsheet/issues/371](https://github.com/PHPOffice/PhpSpreadsheet/issues/371) |
| 248 |
- Avoid incorrectly overwriting calculated value type - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/394#394](https://github.com/PHPOffice/PhpSpreadsheet/issues/394](https://github.com/PHPOffice/PhpSpreadsheet/issues/394) |
| 249 |
- Select correct cell when calling freezePane - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/389#389](https://github.com/PHPOffice/PhpSpreadsheet/issues/389](https://github.com/PHPOffice/PhpSpreadsheet/issues/389) |
| 250 |
- `setStrikethrough()` did not set the font - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/403#403](https://github.com/PHPOffice/PhpSpreadsheet/issues/403](https://github.com/PHPOffice/PhpSpreadsheet/issues/403) |
| 251 |
|
| 252 |
## [1.1.0] - 2018-01-28 |
| 253 |
|
| 254 |
### Added |
| 255 |
|
| 256 |
- Support for PHP 7.2 |
| 257 |
- Support cell comments in HTML writer and reader - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/308#308](https://github.com/PHPOffice/PhpSpreadsheet/issues/308](https://github.com/PHPOffice/PhpSpreadsheet/issues/308) |
| 258 |
- Option to stop at a conditional styling, if it matches (only XLSX format) - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/292#292](https://github.com/PHPOffice/PhpSpreadsheet/pull/292](https://github.com/PHPOffice/PhpSpreadsheet/pull/292) |
| 259 |
- Support for line width for data series when rendering Xlsx - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/329#329](https://github.com/PHPOffice/PhpSpreadsheet/pull/329](https://github.com/PHPOffice/PhpSpreadsheet/pull/329) |
| 260 |
|
| 261 |
### Fixed |
| 262 |
|
| 263 |
- Better auto-detection of CSV separators - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/305#305](https://github.com/PHPOffice/PhpSpreadsheet/issues/305](https://github.com/PHPOffice/PhpSpreadsheet/issues/305) |
| 264 |
- Support for shape style ending with `;` - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/304#304](https://github.com/PHPOffice/PhpSpreadsheet/issues/304](https://github.com/PHPOffice/PhpSpreadsheet/issues/304) |
| 265 |
- Freeze Panes takes wrong coordinates for XLSX - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/322#322](https://github.com/PHPOffice/PhpSpreadsheet/issues/322](https://github.com/PHPOffice/PhpSpreadsheet/issues/322) |
| 266 |
- `COLUMNS` and `ROWS` functions crashed in some cases - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/336#336](https://github.com/PHPOffice/PhpSpreadsheet/issues/336](https://github.com/PHPOffice/PhpSpreadsheet/issues/336) |
| 267 |
- Support XML file without styles - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/331#331](https://github.com/PHPOffice/PhpSpreadsheet/pull/331](https://github.com/PHPOffice/PhpSpreadsheet/pull/331) |
| 268 |
- Cell coordinates which are already a range cause an exception [](https://github.com/PHPOffice/PhpSpreadsheet/issues/319#319](https://github.com/PHPOffice/PhpSpreadsheet/issues/319](https://github.com/PHPOffice/PhpSpreadsheet/issues/319) |
| 269 |
|
| 270 |
## [1.0.0] - 2017-12-25 |
| 271 |
|
| 272 |
### Added |
| 273 |
|
| 274 |
- Support to write merged cells in ODS format - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/287#287](https://github.com/PHPOffice/PhpSpreadsheet/issues/287](https://github.com/PHPOffice/PhpSpreadsheet/issues/287) |
| 275 |
- Able to set the `topLeftCell` in freeze panes - [](https://github.com/PHPOffice/PhpSpreadsheet/pull/261#261](https://github.com/PHPOffice/PhpSpreadsheet/pull/261](https://github.com/PHPOffice/PhpSpreadsheet/pull/261) |
| 276 |
- Support `DateTimeImmutable` as cell value |
| 277 |
- Support migration of prefixed classes |
| 278 |
|
| 279 |
### Fixed |
| 280 |
|
| 281 |
- Can read very small HTML files - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/194#194](https://github.com/PHPOffice/PhpSpreadsheet/issues/194](https://github.com/PHPOffice/PhpSpreadsheet/issues/194) |
| 282 |
- Written DataValidation was corrupted - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/290#290](https://github.com/PHPOffice/PhpSpreadsheet/issues/290](https://github.com/PHPOffice/PhpSpreadsheet/issues/290) |
| 283 |
- Date format compatible with both LibreOffice and Excel - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/298#298](https://github.com/PHPOffice/PhpSpreadsheet/issues/298](https://github.com/PHPOffice/PhpSpreadsheet/issues/298) |
| 284 |
|
| 285 |
### BREAKING CHANGE |
| 286 |
|
| 287 |
- Constant `TYPE_DOUGHTNUTCHART` is now `TYPE_DOUGHNUTCHART`. |
| 288 |
|
| 289 |
## [1.0.0-beta2] - 2017-11-26 |
| 290 |
|
| 291 |
### Added |
| 292 |
|
| 293 |
- Support for chart fill color - @CrazyBite [](https://github.com/PHPOffice/PhpSpreadsheet/pull/158#158](https://github.com/PHPOffice/PhpSpreadsheet/pull/158](https://github.com/PHPOffice/PhpSpreadsheet/pull/158) |
| 294 |
- Support for read Hyperlink for xml - @GreatHumorist [](https://github.com/PHPOffice/PhpSpreadsheet/pull/223#223](https://github.com/PHPOffice/PhpSpreadsheet/pull/223](https://github.com/PHPOffice/PhpSpreadsheet/pull/223) |
| 295 |
- Support for cell value validation according to data validation rules - @SailorMax [](https://github.com/PHPOffice/PhpSpreadsheet/pull/257#257](https://github.com/PHPOffice/PhpSpreadsheet/pull/257](https://github.com/PHPOffice/PhpSpreadsheet/pull/257) |
| 296 |
- Support for custom implementation, or configuration, of PDF libraries - @SailorMax [](https://github.com/PHPOffice/PhpSpreadsheet/pull/266#266](https://github.com/PHPOffice/PhpSpreadsheet/pull/266](https://github.com/PHPOffice/PhpSpreadsheet/pull/266) |
| 297 |
|
| 298 |
### Changed |
| 299 |
|
| 300 |
- Merge data-validations to reduce written worksheet size - @billblume [](https://github.com/PHPOffice/PhpSpreadSheet/issues/131#131](https://github.com/PHPOffice/PhpSpreadSheet/issues/131](https://github.com/PHPOffice/PhpSpreadSheet/issues/131) |
| 301 |
- Throws exception if a XML file is invalid - @GreatHumorist [](https://github.com/PHPOffice/PhpSpreadsheet/pull/222#222](https://github.com/PHPOffice/PhpSpreadsheet/pull/222](https://github.com/PHPOffice/PhpSpreadsheet/pull/222) |
| 302 |
- Upgrade to mPDF 7.0+ - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/144#144](https://github.com/PHPOffice/PhpSpreadsheet/issues/144](https://github.com/PHPOffice/PhpSpreadsheet/issues/144) |
| 303 |
|
| 304 |
### Fixed |
| 305 |
|
| 306 |
- Control characters in cell values are automatically escaped - [](https://github.com/PHPOffice/PhpSpreadsheet/issues/212#212](https://github.com/PHPOffice/PhpSpreadsheet/issues/212](https://github.com/PHPOffice/PhpSpreadsheet/issues/212) |
| 307 |
- Prevent color changing when copy/pasting xls files written by PhpSpreadsheet to another file - @al-lala [](https://github.com/PHPOffice/PhpSpreadsheet/issues/218#218](https://github.com/PHPOffice/PhpSpreadsheet/issues/218](https://github.com/PHPOffice/PhpSpreadsheet/issues/218) |
| 308 |
- Add cell reference automatic when there is no cell reference('r' attribute) in Xlsx file. - @GreatHumorist [](https://github.com/PHPOffice/PhpSpreadsheet/pull/225#225](https://github.com/PHPOffice/PhpSpreadsheet/pull/225](https://github.com/PHPOffice/PhpSpreadsheet/pull/225) Refer to [](https://github.com/PHPOffice/PhpSpreadsheet/issues/201issue#201](https://github.com/PHPOffice/PhpSpreadsheet/issues/201](https://github.com/PHPOffice/PhpSpreadsheet/issues/201) |
| 309 |
- `Reader\Xlsx::getFromZipArchive()` function return false if the zip entry could not be located. - @anton-harvey [](https://github.com/PHPOffice/PhpSpreadsheet/pull/268#268](https://github.com/PHPOffice/PhpSpreadsheet/pull/268](https://github.com/PHPOffice/PhpSpreadsheet/pull/268) |
| 310 |
|
| 311 |
### BREAKING CHANGE |
| 312 |
|
| 313 |
- Extracted coordinate method to dedicate class [](./docs/topics/migration-from-PHPExcel.mdmigration guide](./docs/topics/migration-from-PHPExcel.md](./docs/topics/migration-from-PHPExcel.md). |
| 314 |
- Column indexes are based on 1, see the [](./docs/topics/migration-from-PHPExcel.mdmigration guide](./docs/topics/migration-from-PHPExcel.md](./docs/topics/migration-from-PHPExcel.md). |
| 315 |
- Standardization of array keys used for style, see the [](./docs/topics/migration-from-PHPExcel.mdmigration guide](./docs/topics/migration-from-PHPExcel.md](./docs/topics/migration-from-PHPExcel.md). |
| 316 |
- Easier usage of PDF writers, and other custom readers and writers, see the [](./docs/topics/migration-from-PHPExcel.mdmigration guide](./docs/topics/migration-from-PHPExcel.md](./docs/topics/migration-from-PHPExcel.md). |
| 317 |
- Easier usage of chart renderers, see the [](./docs/topics/migration-from-PHPExcel.mdmigration guide](./docs/topics/migration-from-PHPExcel.md](./docs/topics/migration-from-PHPExcel.md). |
| 318 |
- Rename a few more classes to keep them in their related namespaces: |
| 319 |
- `CalcEngine` => `Calculation\Engine` |
| 320 |
- `PhpSpreadsheet\Calculation` => `PhpSpreadsheet\Calculation\Calculation` |
| 321 |
- `PhpSpreadsheet\Cell` => `PhpSpreadsheet\Cell\Cell` |
| 322 |
- `PhpSpreadsheet\Chart` => `PhpSpreadsheet\Chart\Chart` |
| 323 |
- `PhpSpreadsheet\RichText` => `PhpSpreadsheet\RichText\RichText` |
| 324 |
- `PhpSpreadsheet\Style` => `PhpSpreadsheet\Style\Style` |
| 325 |
- `PhpSpreadsheet\Worksheet` => `PhpSpreadsheet\Worksheet\Worksheet` |
| 326 |
|
| 327 |
## [1.0.0-beta] - 2017-08-17 |
| 328 |
|
| 329 |
### Added |
| 330 |
|
| 331 |
- Initial implementation of SUMIFS() function |
| 332 |
- Additional codepages |
| 333 |
- MemoryDrawing not working in HTML writer [](https://github.com/PHPOffice/PHPExcel/issues/808#808](https://github.com/PHPOffice/PHPExcel/issues/808](https://github.com/PHPOffice/PHPExcel/issues/808) |
| 334 |
- CSV Reader can auto-detect the separator used in file [](https://github.com/PHPOffice/PhpSpreadsheet/pull/141#141](https://github.com/PHPOffice/PhpSpreadsheet/pull/141](https://github.com/PHPOffice/PhpSpreadsheet/pull/141) |
| 335 |
- HTML Reader supports some basic inline styles [](https://github.com/PHPOffice/PhpSpreadsheet/pull/180#180](https://github.com/PHPOffice/PhpSpreadsheet/pull/180](https://github.com/PHPOffice/PhpSpreadsheet/pull/180) |
| 336 |
|
| 337 |
### Changed |
| 338 |
|
| 339 |
- Start following [](https://semver.orgSemVer](https://semver.org](https://semver.org) properly. |
| 340 |
|
| 341 |
### Fixed |
| 342 |
|
| 343 |
- Fix to getCell() method when cell reference includes a worksheet reference - @MarkBaker |
| 344 |
- Ignore inlineStr type if formula element exists - @ncrypthic [](https://github.com/PHPOffice/PHPExcel/issues/570#570](https://github.com/PHPOffice/PHPExcel/issues/570](https://github.com/PHPOffice/PHPExcel/issues/570) |
| 345 |
- Excel 2007 Reader freezes because of conditional formatting - @rentalhost [](https://github.com/PHPOffice/PHPExcel/issues/575#575](https://github.com/PHPOffice/PHPExcel/issues/575](https://github.com/PHPOffice/PHPExcel/issues/575) |
| 346 |
- Readers will now parse files containing worksheet titles over 31 characters [](https://github.com/PHPOffice/PhpSpreadsheet/pull/176#176](https://github.com/PHPOffice/PhpSpreadsheet/pull/176](https://github.com/PHPOffice/PhpSpreadsheet/pull/176) |
| 347 |
|
| 348 |
### General |
| 349 |
|
| 350 |
- Whitespace after toRichTextObject() - @MarkBaker [](https://github.com/PHPOffice/PHPExcel/issues/554#554](https://github.com/PHPOffice/PHPExcel/issues/554](https://github.com/PHPOffice/PHPExcel/issues/554) |
| 351 |
- Optimize vlookup() sort - @umpirsky [](https://github.com/PHPOffice/PHPExcel/issues/548#548](https://github.com/PHPOffice/PHPExcel/issues/548](https://github.com/PHPOffice/PHPExcel/issues/548) |
| 352 |
- c:max and c:min elements shall NOT be inside c:orientation elements - @vitalyrepin [](https://github.com/PHPOffice/PHPExcel/pull/869#869](https://github.com/PHPOffice/PHPExcel/pull/869](https://github.com/PHPOffice/PHPExcel/pull/869) |
| 353 |
- Implement actual timezone adjustment into PHPExcel_Shared_Date::PHPToExcel - @sim642 [](https://github.com/PHPOffice/PHPExcel/pull/489#489](https://github.com/PHPOffice/PHPExcel/pull/489](https://github.com/PHPOffice/PHPExcel/pull/489) |
| 354 |
|
| 355 |
### BREAKING CHANGE |
| 356 |
|
| 357 |
- Introduction of namespaces for all classes, eg: `PHPExcel_Calculation_Functions` becomes `PhpOffice\PhpSpreadsheet\Calculation\Functions` |
| 358 |
- Some classes were renamed for clarity and/or consistency: |
| 359 |
|
| 360 |
For a comprehensive list of all class changes, and a semi-automated migration path, read the [](./docs/topics/migration-from-PHPExcel.mdmigration guide](./docs/topics/migration-from-PHPExcel.md](./docs/topics/migration-from-PHPExcel.md). |
| 361 |
|
| 362 |
- Dropped `PHPExcel_Calculation_Functions::VERSION()`. Composer or git should be used to know the version. |
| 363 |
- Dropped `PHPExcel_Settings::setPdfRenderer()` and `PHPExcel_Settings::setPdfRenderer()`. Composer should be used to autoload PDF libs. |
| 364 |
- Dropped support for HHVM |
| 365 |
|
| 366 |
## Previous versions of PHPExcel |
| 367 |
|
| 368 |
The changelog for the project when it was called PHPExcel is [](./CHANGELOG.PHPExcel.mdstill available](./CHANGELOG.PHPExcel.md](./CHANGELOG.PHPExcel.md). |
| 369 |
|