You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ExcelFormat::AS_TEXT data type for ExcelSheet::write()/writeCol(): writes the string verbatim with no leading-quote stripping, no implicit formula promotion, and no numeric coercion. Use it when writing untrusted input to prevent formula injection.
Changed
The implicit "leading '=' becomes a formula" promotion now applies only when no data type argument is passed; an explicitly passed type (e.g. AS_NUMERIC_STRING) is honored instead of being overridden.
Fixed
excel.skip_empty was backed by an int global while OnUpdateLong stores a zend_long; the setting read as 0 on big-endian 64-bit. The field is now zend_long.
ExcelAutoFilter::getRef() returned rowLast as col_first and colFirst as row_last; the libxl call passed the output pointers in the wrong order.
ExcelAutoFilter::setRef() declared its parameters as (row_first, col_first, row_last, col_last) while the implementation reads (row_first, row_last, col_first, col_last); named-argument callers got rows and columns crossed. The signature now matches the implementation.
Methods on wrappers derived from a subclassed Excel class (e.g. class MyBook extends ExcelBook) failed with a spurious "handle is stale" warning; the book resolver now walks the parent chain with instanceof checks.
ExcelSheet::printArea() returned rowLast as col_start and colFirst as row_end; the libxl call passed the output pointers in the wrong order.
ExcelSheet::setNamedRange() declared its parameters as (row, col, to_row, to_col) while the implementation reads (row_first, row_last, col_first, col_last); the signature now matches, fixing named-argument callers.
ExcelFilterColumn::setTop10() required all three arguments despite the declared defaults; $top and $percent are now optional ($top defaults true).
ExcelFilterColumn::setCustomFilter() now accepts null for $value_2 and declares the -1/null no-second-criterion defaults; passing the previously documented defaults (0, "") warned and failed.
ExcelFont::name() crashed on a null name from libxl; it now returns false.
Declared defaults corrected to match behavior: addTable() $hasHeaders (true), rowColToAddr() relatives (true), named-range $scope_id (-1, workbook scope), setProtect() $enhancedProtection (-1, libxl default), setAutoFitArea() ends (-1, no limit).
Return types corrected for the stale-book error path: dataValidationSize() is int|false, the nine ExcelCoreProperties string getters are string|null|false.
The module now unregisters its INI entries at shutdown; previously they stayed registered after a dl-unload and dangled.