All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
AVERAGEIFS()
functions as part of a restructuring of Database functions and Conditional Statistical functions.Formula functions that previously called PHP functions directly are now processed through the Excel Functions classes; resolving issues with PHP8 stricter typing. #1789
The following MathTrig functions are affected:
ABS()
, ACOS()
, ACOSH()
, ASIN()
, ASINH()
, ATAN()
, ATANH()
,
COS()
, COSH()
, DEGREES()
(rad2deg), EXP()
, LN()
(log), LOG10()
,
RADIANS()
(deg2rad), SIN()
, SINH()
, SQRT()
, TAN()
, TANH()
.
One TextData function is also affected: REPT()
(str_repeat).
formatAsDate
correctly matches language metadata, reverting c55272e
Formulae that previously crashed on sub function call returning excel error value now return said value.
The following functions are affected CUMPRINC()
, CUMIPMT()
, AMORLINC()
,
AMORDEGRC()
.
Adapt some function error return value to match excel's error.
The following functions are affected PPMT()
, IPMT()
.
Calling many of the Excel formula functions directly rather than through the Calculation Engine.
The logic for these Functions is now being moved out of the categorised Database
, DateTime
, Engineering
, Financial
, Logical
, LookupRef
, MathTrig
, Statistical
, TextData
and Web
classes into small, dedicated classes for individual functions or related groups of functions.
This makes the logic in these classes easier to maintain; and will reduce the memory footprint required to execute formulae when calling these functions.
getCell()
method when trying to get a cell by defined name. #1858CUMPRINC()
, CUMIPMT()
, AMORLINC()
, AMORDEGRC()
usage. When those functions called one of YEARFRAC()
, PPMT()
, IPMT()
and they would get back an error value (represented as a string), trying to use numeral operands (+
, /
, -
, *
) on said return value and a number (float or
int`) would fail.LOGNORM.DIST()
, NORM.S.DIST()
, GAMMA()
and GAUSS()
functions. #1588B2
would be treated identically to a named range cell reference of $B2
or B$2
or $B$2
because the calculation engine treated then all as absolute references. These changes "fix" that, so the calculation engine now handles relative references in named ranges correctly.
This change that resolves previously incorrect behaviour in the calculation may affect users who have dynamically defined named ranges using relative references when they should have used absolute references.Settings::setHttpClient()
#1562src/
#1424@return $this
for fluent methods #1362#N/A
#1165*?~
Excel functionality, when match_type=0 #1116getSheetByName()
with tests for name with quote and spaces #739getCalculatedValue()
error with more than two INDIRECT #1115Detect double-encoded xml in the Security scanner, and reject as suspicious.
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.
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.
Provide a check to identify whether libxml_disable_entity_loader is thread-safe or not.
XmlScanner::threadSafeLibxmlDisableEntityLoaderAvailability()
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.
tsv
extension when opening CSV files #429=
libxml_disable_entity_loader()
as shortly as possible #819//IGNORE//TRANSLIT
on IBM i #791master
is the new default branch, develop
does not exist anymoreDefaultValueBinder::dataTypeForValue()
without overriding DefaultValueBinder::bindValue()
#735Worksheet::SHEET_TITLE_MAXIMUM_LENGTH
#482Helper\Html
support UTF-8 HTML input #444Coordinate::extractAllCellReferencesInRange()
throws an exception for an invalid range #519_xlfn.
prefixed functions and ISFORMULA
, MODE.SNGL
, STDEV.S
, STDEV.P
#390setStrikethrough()
did not set the font #403;
#304COLUMNS
and ROWS
functions crashed in some cases #336topLeftCell
in freeze panes #261DateTimeImmutable
as cell valueTYPE_DOUGHTNUTCHART
is now TYPE_DOUGHNUTCHART
.Reader\Xlsx::getFromZipArchive()
function return false if the zip entry could not be located. - @anton-harvey #268CalcEngine
=> Calculation\Engine
PhpSpreadsheet\Calculation
=> PhpSpreadsheet\Calculation\Calculation
PhpSpreadsheet\Cell
=> PhpSpreadsheet\Cell\Cell
PhpSpreadsheet\Chart
=> PhpSpreadsheet\Chart\Chart
PhpSpreadsheet\RichText
=> PhpSpreadsheet\RichText\RichText
PhpSpreadsheet\Style
=> PhpSpreadsheet\Style\Style
PhpSpreadsheet\Worksheet
=> PhpSpreadsheet\Worksheet\Worksheet
PHPExcel_Calculation_Functions
becomes PhpOffice\PhpSpreadsheet\Calculation\Functions
For a comprehensive list of all class changes, and a semi-automated migration path, read the migration guide.
PHPExcel_Calculation_Functions::VERSION()
. Composer or git should be used to know the version.PHPExcel_Settings::setPdfRenderer()
and PHPExcel_Settings::setPdfRenderer()
. Composer should be used to autoload PDF libs.The changelog for the project when it was called PHPExcel is still available.