Skip to content

Releases: tafia/calamine

v0.35.0 - 2026-5-10

10 May 18:12

Choose a tag to compare

Added

  • Added has_1904_epoch() method to Xls/Xlsx/Xlsb structs to allow the user to
    determine which date epoch is in use by Excel. PR #630.

  • Made RowDeserializer public to allow a custom DeserializeSeed.
    PR #635.

Changed

  • Added deserialization examples. PR #649.

  • Performance improvements:

    • Optimized <v> cell value parsing. PR #622
    • Optimized cell reference parsing. PR #623

Fixed

  • Fixed issue with redundant <v> value in inlineStr XLSX cells. Issue #633.

  • Fixed issue when processing XLSX files to ignore namespace prefix when reading
    relation ids. Previously accepted only r: and relationships: prefixes.
    Issue #634.

  • Fixed XLSX issue where rich text <r> elements were ignored after initial
    plain <t> elements. Issue #636.

  • Fixed XLS issue where date format was ignored for formula values.
    Issue #640.

  • Fixed XLSX shared formula expansion corrupting function names. The
    replace_cell_names() function treated LOG10 as a cell reference (column
    LOG, row 10). Issue #644.

  • Fixed XLSX inlineStr issue for elements that contain CDATA. Issue #648.

  • Fixed panic when parsing formulas in XLS BIFF5 workbooks.The parse_formula
    function decoded the non-3D PtgRef, PtgArea, PtgRefErr, and PtgAreaErr tokens
    assuming BIFF8 sizes. PR #643.

  • Fixed XLS panic with unsupported formula functions. Handle unsupported XLS
    function ids as formula parse errors instead of indexing past the function
    table. Issue #646.

What's Changed

New Contributors

Full Changelog: v0.34.0...v0.35.0

v0.34.0 - 2026-03-07

07 Mar 14:37

Choose a tag to compare

Changed

  • Updated benchmarking to uses the criterion.rs crate. This removed the
    requirement for using +nightly for cargo bench. PR #620.

  • Updated dependencies for release 0.34.0:

  • Refactored CFB to resolve special case in the caller of fn get_chain.
    PR #615.

  • Performance improvements:

    • Cell reader buffer reuse and optimised maps. PR #611
    • Optimised XLS sector chain reads. PR #609
    • Ensured fast_float2 is used at all float-parsing call sites. PR #608
    • Cached path and attr lookups, reused buffers, minimised allocations. PR #606

Fixed

  • Fixed capitalized workbook/book stream handling in XLS files. PR #618.

  • Fixed issue where BIFF5 Lbl and ExternSheet records were incorrectly
    parsed as BIFF8. PR #613.

  • Fixed VBA check_variable_record to handle optional records. PR #614.

  • Fixed premature error when BIFF version is not Biff8 in XLS files. PR #619.

  • Fixed issue where XLSX cells with an empty <v/> value returned a string with
    index 0 instead of an Empty value. Issue #607.

  • Fixed millisecond rounding issue where 1000 milliseconds weren't rounded up to
    the next second. Issue #602, PR #605.

What's Changed

New Contributors

Full Changelog: v0.33.0...v0.34.0

v0.33.0 - 2026-02-04

04 Feb 17:13

Choose a tag to compare

Added

  • Added support for reading data from Pivot Tables, which involves reading data
    from the internal Pivot Cache. PR #559.

Changed

  • Update dependencies for release 0.33.0:

    • zip: 4.2.0 -> 7.0.
    • atoi_simd: 0.16 -> 0.17

Fixed

  • Fixed potential memory exhaustion issue in ODS files that could be triggered
    via repeated empty rows/columns.

    The fix adds limits to prevent memory exhaustion from malicious ODS files that
    declare billions of repeated cells via table:number-rows-repeated and
    table:number-columns-repeated attributes.

    The change adds the following protection layers:

    • Add cap for columns per row at MAX_COLUMNS (16,384).
    • Add cap for total row repeats at MAX_ROWS (1,048,576).
    • Add cap for total cells at MAX_CELLS (100 million) in get_range().

    These limits match XLSX's existing row/column limits and prevent a 7KB
    malicious file from attempting to allocate memory for 17+ billion cells.

    When MAX_CELLS is exceeded, return OdsError::CellLimitExceeded instead
    of silently returning an empty range. This ensures callers are properly
    informed of truncation rather than receiving silent data loss.

    Issue #594, PR #596.

  • Fixed an issue where XLSX files with tables that had the internal insertRow
    attribute set returned a Dimensions object where the end row was less than
    the start row. This caused an assert/panic when trying to create a Range
    object to return the table range. Issue #589.

  • Fixed an issue with XLSX files where worksheet tables used the unusual, but
    valid, absolute reference system like "/xl/tables/table1.xml" instead of the
    common Excel generated relative system "../tables/table1.xml". Issue #587.

What's Changed

New Contributors

Full Changelog: v0.32.0...v0.33.0

v0.32.0 - 2025-11-20

20 Nov 19:35

Choose a tag to compare

Changed

  • Refactored VBA reading functions to be on-demand for better performance.

  • Simplified vba_project() function return type from Option<Result<T>> to
    Result<Option<T>> for more idiomatic error handling. This is a breaking
    change.

Fixed

  • Fixed out-of-memory vulnerabilities in XLS file parsing by bounding
    allocations.

  • Fixed and extended support for XLSX shared formulas with handling of ranges,
    absolute references, and column/row ranges in XLSX files.

  • Fixed XLSX issue with missing shared string sub-elements. Also improved error
    messages for shared string parsing issues.

  • Fixed acceptance of XLS XLUnicodeRichExtendedString records without reserved
    tags.

  • Fixed various edge cases in XLS handling that could lead to parsing errors.

What's Changed

New Contributors

Full Changelog: v0.31.0...v0.32.0

v0.31.0 - 2025-09-27

27 Sep 18:10

Choose a tag to compare

Changed

  • Upgraded quick-xml to v0.38. This was a significant change in quick-xml
    relative to v0.37 and required changes in calamine to entity handling. It
    also fixes EOL handling which may lead to regressions in calamine
    applications if they expected to see "\r\n" in strings instead of the
    correct (for XML and Excel) "\n".

    For most users these will be inconsequential changes but please take note
    before upgrading production code.

  • Renamed the "dates" feature flag to "chrono" since there is now some
    native date handling features without "chrono". The "chrono" flag is more
    specific and accurate. The "dates" flag is still supported as before for
    backward compatibility.

    This change also made some datatype methods related to date/times available in
    the "default" feature set. They were previously hidden unnecessarily behind
    the "dates/"chrono" flag.

Added

  • Added a conversion function to ExcelDateTime to convert the inner serial
    Excel datetime to standard year, month, date, hour, minute, second and
    millisecond components. Works for 1900 and 1904 epochs.

Fixed

  • Fixed issue where Excel xlsx shared formula failed if it contained Unicode
    characters. Issue #553.

  • Fixed issue where Excel XML escapes in strings weren't unescaped. For example
    "_x000D_" -> "\r". Issue #469.

What's Changed

New Contributors

Full Changelog: v0.30.1...v0.31.0

v0.30.1 - 2025-09-06

06 Sep 16:15

Choose a tag to compare

Added

  • Added Debug and Clone to Table for easier debugging. PR #547.

Fixed

  • Fixed issue Issue #548 for xls files where the SST record had an incorrect
    number of unique strings.

What's Changed

Full Changelog: v0.30.0...v0.30.1

v0.30.0 - 2025-08-07

07 Aug 08:33

Choose a tag to compare

Changed

  • Unpinned the zip.rs dependency from v4.2.0 to allow cargo to choose the
    correct version for the user's rustc version.

    The Rust MSRV was bumped to v1.75.0 (which it should have been for for
    zip.rs compatibility in previous releases).

    See the discussion at Issue #527.

What's Changed

  • small language changes to README.md by @mhogervo in #537
  • Fix typos and add typos GH Actions workflow to prevent future typos by @jqnatividad in #539
  • unpin zip and using MSRV-aware in CI by @Dirreke in #542

New Contributors

Full Changelog: v0.29.0...v0.30.0

v0.29.0 - 2025-07-17

17 Jul 10:46

Choose a tag to compare

Added

  • Add additional documentation and examples for the Range, Cell, XlsxError
    and Table structs, and Xlsx Table and Merge methods. Issue #459

Changed

  • Pin zip.rs to v4.2.0.

    The current latest release of zip.rs, v4.3.0, requires a MSRV of v1.85.0.
    This release pins zip.rs to v4.2.0 to allow users to maintain a MSRV of
    v1.73.0 for at least one more release. It is likely that calamine v0.30.0 or
    later will move back to the latest zip.rs v4.x and require rustc v1.85.0.

Fixed

  • Fixed issue where XLSX files had Windows style directory separators for
    internal paths instead of the required Unix style separators. Issue #530.
  • Fixed several XLS parsing issues which could lead to out-of-memory errors. PR
    #525.
  • Fixed numeric underflow in Xlsx::from_sparse() and also ensured that the
    associated Range of cells would be in row-column order. PR #524.

What's Changed

New Contributors

Full Changelog: v0.28.0...v0.29.0

v0.28.0 - 2025-06-19

04 Jul 23:36
61fc9b1

Choose a tag to compare

Changed

  • Bump zip to 4.0.

What's Changed

New Contributors

Full Changelog: v0.27.0...v0.28.0

v0.27.0 - 2025-04-22

04 Jul 23:37

Choose a tag to compare

Added

  • (xls): add one more Error variant related to formatting.

Changed

  • Bump dependencies.

Fixed

  • (xls): Invalid formats parsing.
  • Always parse string cell as string.
  • Pin zip crate to 2.5.
  • (xlsx): check 'closing' tag name with more prefixes.

What's Changed

New Contributors

Full Changelog: v0.26.1...v0.27.0