NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #2716 most downloaded on Packagist
Lightweight and very fast XLSX Excel Spreadsheet Writer in PHP
Last release 6 days ago
01 Oct 2026
Release timing varies
gaps range from 1 weeks to 3 months
Rarely documented
notes for 11 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
103 releases · first in 2020
One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
A string containing a line break now gets the wrap text automatically. If you relied on multi-line text being displayed in one line, turn it off with
A string containing a line break now gets the wrap text automatically. If you relied on multi-line text being displayed in one line, turn it off with the option auto_wrap_text => false or Excel::setAutoWrapText(false).
"\n"), rich text included. Excel displays such text in several lines only when the wrap text is on, so a multi-line header looked glued together, see #141. An explicit text-wrap of the cell style wins; the option auto_wrap_text (Options::autoWrapText()) and Excel::setAutoWrapText(false) turn the feature offstyles.xml – a cell font got only the properties set explicitly, so a bold header was written as <font><b/></font> without the name and the size, and applications like LibreOffice rendered it with their own default (serif) font, see #141. The name, size and color missing in a style are taken from the default font now; the same applies to Excel::setDefaultFontName() and setDefaultFont(), which used to drop the other properties of the default fontExcel::create([], ['default_font' => ['name' => 'Arial', 'size' => 14]]) produced Calibri 11; name, size, color and style work there now as they do in cell stylesnew RichText('')) was written as a 40-character hash – the key of the shared strings table instead of the textRequires avadim/fast-excel-helper ^1.4 – it carries the ST_Xstring escaping shared by the writer and the reader, so a control character written as _xH
Requires avadim/fast-excel-helper ^1.4 – it carries the ST_Xstring escaping shared by the writer and the reader, so a control character written as _xHHHH_ is decoded back on reading.
default_date_format, default_time_format, default_datetime_format and methods Excel::setDefaultDateFormat(), setDefaultTimeFormat(), setDefaultDateTimeFormat(), setDefaultFormat() (plus the matching methods of Options). They override the formats of the locale and survive a later setLocale()DataValidation::dropDown('=Lists!$A$1:$A$5')) is written to the x14 extension list, the way Excel writes it – the plain <dataValidation> element does not support such referencesWriter::MAX_CELL_LENGTH and Sheet::MAX_HYPERLINKS – the limits of Excel the library now respectsCR in cell values were silently replaced with a space; now they are written as _xHHHH_ / _x000D_ (OOXML ST_Xstring) and Excel restores them when the file is read_xHHHH_<dataValidation> were not escaped at all, so any & or quote in an error title or message produced broken XML; <formula2> is escaped too nowConditional::contains('R&D') or Conditional::expression('=B1<5') produced an unreadable file<selection> was written for the wrong pane (the selections of topRight and bottomLeft were swapped, and an active cell inside the frozen area was still reported as the selection of bottomRight); activePane now points to the pane that really holds the active cellauto_convert_number – IDs, barcodes and card numbers longer than 15 significant digits are kept as textsave() reported success when packing the xlsx failed – the result of closing the zip archive was ignored, which could leave a truncated file (zip64 is used automatically by libzip when the archive exceeds the plain zip limits)sheetN.xml.rels, so adding one more now throws a clear exception instead of writing a broken fileHistory anymore – the name is reserved by Excel (the change history sheet of a shared workbook), an underscore is appended to itsave(), the limits of Excel, the default formats of the workbook and the rules referring to another sheet (both languages)Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →