Changes for version 0.21 - 2026-11-15

  • Decode XML entities and numeric character references once in worksheet names before optional character conversion (RT #50705). Support lookup by decoded names and report undefined name conversion results.
  • Abort with a clear error when a string converter returns undef (RT #84528), while continuing to accept empty converted strings.
  • Decode predefined XML entities and numeric character references once in shared and inline strings, including rich text and phonetic hints (RT #93962). Decode before the optional converter, preserve literal entity text and add the original workbook as a regression fixture.
  • Resolve built-in number formats and apply row/column default styles when a cell has no explicit style (RT #101636). Cell styles override row styles, which override column defaults; preserve raw values. Add regression tests for decimals, percentages and built-in dates.
  • Resolve absolute and relative worksheet relationship targets and normalize dot segments (RT #86667). Report missing targets with sheet and relationship details; reject external targets and root traversal. Preserve chartsheet placeholders and add regression tests.
  • Replace legacy match and postmatch variables with local captures and match lengths (RT #70879), without raising the minimum Perl version.
  • Preserve token boundaries around escaped and quoted literals when detecting date formats (RT #87746). Add the original workbook and regression tests for date types, raw values and formatted output.
  • Handle line breaks and other XML whitespace in Relationship tags (RT #111087). Add regression tests for LF, CRLF and attribute order.
  • Avoid uninitialized-value warnings for undefined shared-string cell values during parsing and formatting (RT #114521). Preserve raw undef values and add regression tests.
  • Fix short and long weekday formatting and recognize standalone date and AM/PM formats as date/time cells (RT #117007). Ignore quoted and escaped literals during date-type detection; add regression tests.
  • Support inlineStr cells (RT #117462, #83399), including rich text, whitespace, empty strings, converters and separate phonetic metadata. Share text extraction with shared strings; add regression tests.
  • Fix AM/PM and A/P time formatting, including uppercase tokens, noon and midnight (RT #119170). Preserve raw date/time values and types.
  • Ignore the x15:workbookPr extension instead of rejecting it as a prefixed data element. Add the original RT #119170 workbook as a test.
  • Keep phonetic hints out of shared-string cell values (RT #122340). Expose hints and their properties separately as RPh and PhoneticPr.
  • Report obvious XML syntax errors and unsupported prefixed elements with the XML member name; recommend Spreadsheet::ParseXLSX for prefixed files (RT #124409). Document that XML is not fully validated.
  • Include worksheet, XML member and invalid address in cell-reference errors. No new XML parser dependency is required.
  • Preserve custom number formats referenced by multiple cell styles (RT #132420). Add regression tests for repeated format IDs.
  • Move MaxCol initialization outside the row loop in the SYNOPSIS example (RT #140481).
  • Remove unused variables from ValFmt (RT #158167).
  • Fix multiline cell values and value tags with attributes (GitHub PR #1). Preserve whitespace and add regression tests.

Modules

Perl extension for reading MS Excel 2007 files.
A class for Cell formats.
Utility function for Spreadsheet::XLSX