calamine
An Excel/OpenDocument Spreadsheet reader and deserializer in pure Rust
0.36.1
11M downloads/mo
#2885 most downloaded on crates.io
tafia/calamine
What this package is like to depend on
Last release 27 days ago
27 Jul 2026
Ships fairly regularly
a new release about every 4 weeks
Nearly every release is documented
notes for 82 of 82 stable releases
Nothing withdrawn
no release was ever pulled
10 years old
82 releases · first in 2016
8 releases in the last 12 months
see the full history below
Release timeline
82 releases · Nov 2016 to Jul 2026Releases
latest 60 of 82-
0.36.127 Jul 2026Release notes
Open source →Fixed
-
Fixed a regression in 0.36.0 that broke Strict OOXML (ISO/IEC 29500)
_rels/.relslinks. -
Fixed XLS string handling to preserve empty strings instead of discarding
them. PR #679. -
Fixed XLSB workbook parsing to consume the body of unhandled workbook-global
records. A leftover body was misread as the next record id, which either
silently dropped the worksheet or panicked from an empty buffer. PR #675.
What's Changed
- Add support for OOXML format by @saks in #681
- xls: preserve empty strings by @aquasync in #679
- fix(xlsb): consume unmatched workbook-global record bodies by @momomuchu in #675
New Contributors
- @momomuchu made their first contribution in #675
Full Changelog: v0.36.0...v0.36.1
Release notes
Open source →Fixed
-
Fixed a regression in 0.36.0 that broke Strict OOXML (ISO/IEC 29500)
_rels/.relslinks. -
Fixed XLS string handling to preserve empty strings instead of discarding them. PR #679.
-
Fixed XLSB workbook parsing to consume the body of unhandled workbook-global records. A leftover body was misread as the next record id, which either silently dropped the worksheet or panicked from an empty buffer. PR #675.
-
-
0.36.006 Jul 2026Release notes
Open source →Added
-
Added an XLSX streaming API for cell and formula records, including shared
formula metadata. There are two new APIs:
XlsxCellReader::next_cell_with_formula()and
XlsxCellReader::next_cell_with_formula_metadata(). Previously it required 2
separate reads to get similar information. PR #654. -
Added a per-sheet, lazy XLSX API to read worksheet hyperlinks:
Xlsx::hyperlinks_by_sheet_name()andXlsx::hyperlinks_by_sheet_id(). Each
hyperlink reports its anchor range (Dimensions), external target
(URL/file/mailto), optional internal location, displayed text, and optional
tooltip. PR #659. -
Extended the
picturefeature to also extract cell position information and
the raw image data, and to handle newer Excel 365 style embedded images.
PR #652. -
Added support for reading XLSX rich string (
rstring) records. Issue #655.
Changed
-
Updated dependencies and the minimum supported Rust version (MSRV) for
release 0.36.0:atoi_simd: 0.17 → 0.18. PR #672zip: 7.0 → 8.6. This raises the MSRV from 1.83 to 1.88. PR #672quick-xml: 0.39 → 0.41, to address advisories RUSTSEC-2026-0194 and
RUSTSEC-2026-0195. Issue #674.
-
Performance improvements:
-
Refactored and unified the merged-cell handling APIs. For historical reasons
the XLSX methods for accessing merged cells were duplicated. This change
introduces a cleaner API, deprecates the older methods, and aligns the XLS
merged-cell handling with the new XLSX APIs. Issue #536. -
Made XLSX package path resolution more robust for non-standard package
layouts. Issue #638. -
Changed XLSX
<t>text handling in shared strings and inline strings to trim
leading and trailing ASCII whitespace (space, tab, CR, LF) unless the element
carriesxml:space="preserve". See PR #671 and PR #673.
Fixed
-
Fixed XLSX shared-formula cell-name replacement to be more precise for defined
names. PR #664. -
Fixed XLSX custom number-format detection to treat the
*(fill/repeat)
operator as escaping the character that follows it. PR #667. -
Improved the XLS error message when a file is too small to be a valid
workbook. PR #670.
What's Changed
- xlsx: handle minimal package structure by @aquasync in #639
- Refactor the APIs/code for merge cells/range handling by @jmcnamara in #651
- xlsx: add support for rstring records by @aquasync in #656
- feat(xlsx): add XLSX cell+formula streaming records with shared formula metadata by @PSU3D0 in #654
- xlsx: add worksheet hyperlink reading API by @adstep in #659
- picture: extend the picture feature to include more image metadata by @jmcnamara in #652
- perf: optimise buffer use for XLSB cell reads by @alexander-beedie in #662
- perf: custom zero-overhead attribute extraction by @alexander-beedie in #621
- tests(xlsx): add regression for date cells with quoted custom number formats by @jnsn99 in #665
- Handle the
*fill operator in custom number format detection by @greymoth-jp in #667 - More informative error if the file is very short by @sftse in #670
- fix: strip whitespace from elements without xml:space="preserve" by @dayongxie in #671
- Make shared formula cell replacement more greedy by @OSjoerdWie in #664
- example: fix cargo test warning for read_picture_data example by @jmcnamara in #676
- fix(xlsx): fix whitespace trimming bug introduced in #671 by @dayongxie in #673
New Contributors
- @PSU3D0 made their first contribution in #654
- @adstep made their first contribution in #659
- @jnsn99 made their first contribution in #665
- @greymoth-jp made their first contribution in #667
- @dayongxie made their first contribution in #671
- @OSjoerdWie made their first contribution in #664
Full Changelog: v0.35.0...v0.36.0
Release notes
Open source →Added
-
Added an XLSX streaming API for cell and formula records, including shared formula metadata. There are two new APIs:
XlsxCellReader::next_cell_with_formula()andXlsxCellReader::next_cell_with_formula_metadata(). Previously it required 2 separate reads to get similar information. PR #654. -
Added a per-sheet, lazy XLSX API to read worksheet hyperlinks:
Xlsx::hyperlinks_by_sheet_name()andXlsx::hyperlinks_by_sheet_id(). Each hyperlink reports its anchor range (Dimensions), external target (URL/file/mailto), optional internal location, displayed text, and optional tooltip. PR #659. -
Extended the
picturefeature to also extract cell position information and the raw image data, and to handle newer Excel 365 style embedded images. PR #652. -
Added support for reading XLSX rich string (
rstring) records. Issue #655.
Changed
-
Updated dependencies and the minimum supported Rust version (MSRV) for release 0.36.0:
atoi_simd: 0.17 → 0.18. PR #672zip: 7.0 → 8.6. This raises the MSRV from 1.83 to 1.88. PR #672quick-xml: 0.39 → 0.41, to address advisories RUSTSEC-2026-0194 and RUSTSEC-2026-0195. Issue #674.
-
Performance improvements:
-
Refactored and unified the merged-cell handling APIs. For historical reasons the XLSX methods for accessing merged cells were duplicated. This change introduces a cleaner API, deprecates the older methods, and aligns the XLS merged-cell handling with the new XLSX APIs. Issue #536.
-
Made XLSX package path resolution more robust for non-standard package layouts. Issue #638.
-
Changed XLSX
<t>text handling in shared strings and inline strings to trim leading and trailing ASCII whitespace (space, tab, CR, LF) unless the element carriesxml:space="preserve". See PR #671 and PR #673.
Fixed
-
Fixed XLSX shared-formula cell-name replacement to be more precise for defined names. PR #664.
-
Fixed XLSX custom number-format detection to treat the
*(fill/repeat) operator as escaping the character that follows it. PR #667. -
Improved the XLS error message when a file is too small to be a valid workbook. PR #670.
-
-
0.35.010 May 2026Release notes
Open source →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
RowDeserializerpublic to allow a customDeserializeSeed.
PR #635.
Changed
-
Added deserialization examples. PR #649.
-
Performance improvements:
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 onlyr:andrelationships: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 treatedLOG10as a cell reference (column
LOG, row 10). Issue #644. -
Fixed XLSX
inlineStrissue 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
- perf: optimise
<v>cell value parsing by @alexander-beedie in #622 - perf: optimise cell reference parsing by @alexander-beedie in #623
- Allow (and ignore) v nodes in an inlineStr cell. by @aquasync in #631
- lib: expose 1900/1904 epoch for xls/xlsx/xlsb files by @jmcnamara in #630
- Use namespace-aware XML parsing for workbook. by @aquasync in #632
- de: make RowDeserializer public to allow a custom DeserializeSeed by @jmcnamara in #635
- xlsx: fix ignoring rich text after initial plain by @aquasync in #637
- xls: fix date format ignored for formula values by @aquasync in #641
- xls: fix panic parsing formulas in BIFF5 workbooks by @mogery in #643
- xlsx: fix shared formula expansion corrupting function names by @cilladev in #645
- xlsx: fix inlineStr elements that contain CDATA by @jmcnamara in #650
- docs: add deserialize examples by @jmcnamara in #649
New Contributors
- @aquasync made their first contribution in #631
- @mogery made their first contribution in #643
- @cilladev made their first contribution in #645
Full Changelog: v0.34.0...v0.35.0
Release notes
Open source →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
RowDeserializerpublic to allow a customDeserializeSeed. PR #635.
Changed
-
Added deserialization examples. PR #649.
-
Performance improvements:
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:andrelationships: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 treatedLOG10as a cell reference (column LOG, row 10). Issue #644. -
Fixed XLSX
inlineStrissue for elements that contain CDATA. Issue #648. -
Fixed panic when parsing formulas in XLS BIFF5 workbooks.The
parse_formulafunction 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.
-
-
0.34.007 Mar 2026Release notes
Open source →Changed
-
Updated benchmarking to uses the
criterion.rscrate. This removed the
requirement for using+nightlyforcargo bench. PR #620. -
Updated dependencies for release 0.34.0:
quick-xml: 0.38 -> 0.39. PR #617
-
Refactored CFB to resolve special case in the caller of
fn get_chain.
PR #615. -
Performance improvements:
Fixed
-
Fixed capitalized workbook/book stream handling in XLS files. PR #618.
-
Fixed issue where BIFF5
LblandExternSheetrecords were incorrectly
parsed as BIFF8. PR #613. -
Fixed VBA
check_variable_recordto 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
- ci: add wasm32-unknown-unknown compilation check by @Goldziher in #604
- datetime: fix millisecond rounding issue by @jmcnamara in #605
- perf: cache path and attr lookups, reuse buffers, minimise allocs by @alexander-beedie in #606
- perf: ensure
fast_float2used at all float-parsing call sites by @alexander-beedie in #608 - Fix: t=s cells with empty return strings[0] instead of Empty by @omarirfa in #610
- perf: optimise
xlssector chain reads by @alexander-beedie in #609 - fix(xls): do not prematurely error when biff != Biff8 by @sftse in #619
- deps: bump quick-xml from 0.38 to 0.39 by @jqnatividad in #617
New Contributors
- @Goldziher made their first contribution in #604
- @omarirfa made their first contribution in #610
Full Changelog: v0.33.0...v0.34.0
Release notes
Open source →Changed
-
Updated benchmarking to uses the
criterion.rscrate. This removed the requirement for using+nightlyforcargo bench. PR #620. -
Updated dependencies for release 0.34.0:
quick-xml: 0.38 -> 0.39. PR #617
-
Refactored CFB to resolve special case in the caller of
fn get_chain. PR #615. -
Performance improvements:
Fixed
-
Fixed capitalized workbook/book stream handling in XLS files. PR #618.
-
Fixed issue where BIFF5
LblandExternSheetrecords were incorrectly parsed as BIFF8. PR #613. -
Fixed VBA
check_variable_recordto 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.
-
-
0.33.004 Feb 2026Release notes
Open source →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 viatable:number-rows-repeatedand
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) inget_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::CellLimitExceededinstead
of silently returning an empty range. This ensures callers are properly
informed of truncation rather than receiving silent data loss. - Add cap for columns per row at
-
Fixed an issue where XLSX files with tables that had the internal
insertRow
attribute set returned aDimensionsobject where the end row was less than
the start row. This caused an assert/panic when trying to create aRange
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
- xlsx: fix two table issues by @jmcnamara in #588
- ods: fix DoS via repeated rows/columns (issue #594) by @withzombies in #596
- feat: reading PivotTable (PivotCache) by @siqpush in #559
New Contributors
- @withzombies made their first contribution in #596
- @siqpush made their first contribution in #559
Full Changelog: v0.32.0...v0.33.0
Release notes
Open source →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-repeatedandtable: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) inget_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::CellLimitExceededinstead of silently returning an empty range. This ensures callers are properly informed of truncation rather than receiving silent data loss. - Add cap for columns per row at
-
Fixed an issue where XLSX files with tables that had the internal
insertRowattribute set returned aDimensionsobject where the end row was less than the start row. This caused an assert/panic when trying to create aRangeobject 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.
- Added support for reading data from Pivot Tables, which involves reading data
-
0.32.020 Nov 2025Release notes
Open source →Changed
-
Refactored VBA reading functions to be on-demand for better performance.
-
Simplified
vba_project()function return type fromOption<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
XLUnicodeRichExtendedStringrecords without reserved
tags. -
Fixed various edge cases in XLS handling that could lead to parsing errors.
What's Changed
- typos: update list for latest version by @jmcnamara in #569
- Accept XLUnicodeRichExtendedString without reserved tag by @sftse in #571
- Oom alloc by @sftse in #575
- chore: applied some minor clippy lint suggestions by @jqnatividad in #578
- Fix issue with empty si element in xlsx shared string element by @jmcnamara in #576
- Delay reading of vba project by @sftse in #574
- Fix dragged formula multiple axes by @louisdewar in #566
- Fix absolute shared formulas by @louisdewar in #568
- refactor: dont need ref and ref mut by @sftse in #580
- XLSX: support replacing row/column ranges by @louisdewar in #582
New Contributors
- @louisdewar made their first contribution in #566
Full Changelog: v0.31.0...v0.32.0
Release notes
Open source →Changed
-
Refactored VBA reading functions to be on-demand for better performance.
-
Simplified
vba_project()function return type fromOption<Result<T>>toResult<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
XLUnicodeRichExtendedStringrecords without reserved tags. -
Fixed various edge cases in XLS handling that could lead to parsing errors.
-
-
0.31.027 Sep 2025Release notes
Open source →Changed
-
Upgraded
quick-xmlto v0.38. This was a significant change inquick-xml
relative to v0.37 and required changes incalamineto entity handling. It
also fixes EOL handling which may lead to regressions incalamine
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
ExcelDateTimeto 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
- fix: xlsx cell name handling for non-ASCII characters by @hayandev in #552
- xls: add simple Debug trait for Record struct by @jmcnamara in #554
- clippy: fix clippy warnings by @jmcnamara in #555
- clippy: ensure clippy is installed in github action by @jmcnamara in #564
- xml: make parsing changes for quick-xml v0.38 by @jmcnamara in #561
- datetime: add native conversion from excel datetime by @jmcnamara in #546
New Contributors
Full Changelog: v0.30.1...v0.31.0
Release notes
Open source →Changed
-
Upgraded
quick-xmlto v0.38. This was a significant change inquick-xmlrelative to v0.37 and required changes incalamineto entity handling. It also fixes EOL handling which may lead to regressions incalamineapplications 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
ExcelDateTimeto 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.
-
-
0.30.106 Sep 2025Release notes
Open source →Added
- Added
DebugandClonetoTablefor easier debugging. PR #547.
Fixed
- Fixed issue Issue #548 for xls files where the
SSTrecord had an incorrect
number of unique strings.
What's Changed
- feat:
#[derive(Debug, Clone)]onTableby @lukapeschke in #547 - xls: fix issue with incorrect SST record by @jmcnamara in #549
Full Changelog: v0.30.0...v0.30.1
Release notes
Open source →Added
-
Added
DebugandClonetoTablefor easier debugging. PR #547.
Fixed
-
Fixed issue Issue #548 for xls files where the
SSTrecord had an incorrect number of unique strings.
- Added
-
0.30.007 Aug 2025Release notes
Open source →Changed
-
Unpinned the
zip.rsdependency 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.rscompatibility 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
Release notes
Open source →Changed
-
Unpinned the
zip.rsdependency 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.rscompatibility in previous releases).See the discussion at Issue #527.
-
-
0.29.017 Jul 2025Release notes
Open source →Added
- Add additional documentation and examples for the
Range,Cell,XlsxError
andTablestructs, andXlsxTable 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 pinszip.rsto v4.2.0 to allow users to maintain a MSRV of
v1.73.0 for at least one more release. It is likely thatcalaminev0.30.0 or
later will move back to the latestzip.rsv4.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
associatedRangeof cells would be in row-column order. PR #524.
What's Changed
- Fix wrong comment by @YichiZhang0613 in #518
- docs: fixes and additions by @jmcnamara in #519
- Refactors by @sftse in #520
- Add GitHub issue templates by @jmcnamara in #523
- Numeric underflow by @sftse in #524
- More OOM fixes by @sftse in #525
- Some Changelog improvements by @jmcnamara in #522
- Pin zip.rs to v4.2.0 (for now) by @jmcnamara in #532
- Add tests and fixes for issues with Excel packaging part names by @jmcnamara in #531
- Documentation updates by @jmcnamara in #526
- docs: add documentation to the example files by @jmcnamara in #534
New Contributors
- @YichiZhang0613 made their first contribution in #518
- @jmcnamara made their first contribution in #519
Full Changelog: v0.28.0...v0.29.0
Release notes
Open source →Added
- Add additional documentation and examples for the
Range,Cell,XlsxErrorandTablestructs, andXlsxTable 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 pinszip.rsto v4.2.0 to allow users to maintain a MSRV of v1.73.0 for at least one more release. It is likely thatcalaminev0.30.0 or later will move back to the latestzip.rsv4.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 associatedRangeof cells would be in row-column order. PR #524.
- Add additional documentation and examples for the
-
0.28.019 Jun 2025 -
0.27.022 Apr 2025Release notes
Open source →Added
- (xls): add one more
Errorvariant related to formatting.
Changed
- Bump dependencies.
- (xls): Invalid formats parsing.
- Always parse string cell as string.
- Pin zip crate to 2.5.
- (xlsx): check 'closing' tag name with more prefixes.
- (xls): add one more
-
0.26.110 Oct 2024 -
0.26.008 Oct 2024Release notes
Open source →Added
- Ability to merge cells from xls and xlsx.
- Options to keep first empty rows for xlsx.
- Support consecutive repeated empty cells for ods.
- New
header_rowconfig.
Changed
- Bump MSRV to 1.73.
- Fix broken links in README.
- Enable dates and pictures features in
docs.rsbuild. - Fix broken fuzzer.
-
0.25.024 May 2024Release notes
Open source →Added
- Add
is_errorandget_errormethods to theDataTypetrait. - Add deserializer helper functions.
- Support getting merged region.
Range::headersmethod.- Expose some
Dimensionsmethods.
Changed
- Use
OnceLockinstead ofonce_cellcrate (MSRV: 1.71).
Fixed
- Use case insensitive comparison when searching for file in xlsx.
- Do not panic when reading cell format with invalid index.
- Add
-
0.24.008 Feb 2024Release notes
Open source →Added
- Introduce a
DataTypetrait implemented by bothDataandDataRef. DataandDataTypenow returnSome(0{.0})andSome(1{.0})rather thanNonewhen.as_i64or.as_f64is used on a Bool value.- Detect xlsb/ods password protected files.
- Introduce
is_xmethods for date and time variants.
Changed
- BREAKING: rename
DataTypeenum toDataandDataTypeReftoDataRef. - DateTime(f64) to DateTime(ExcelDateTime).
Fixed
- Getting tables names from xlsx workbooks without
_relsfiles.
- Introduce a
-
0.23.119 Dec 2023 -
0.23.012 Dec 2023Release notes
Open source →Added
- New
DataTypeRefavailable fromworksheet_range_refto reduce memory usage. - Detect if workbook is password protected.
Changed
- Add benchmark plot.
Fixed
- Truncated text in xls.
- New
-
0.22.108 Oct 2023Release notes
Open source →Added
- Support label cells for xls.
Changed
- Update GitHub actions.
- Clippy.
- Preallocate several buffers.
Fixed
- Regression on
Range::get. - Spelling of formula error type.
-
0.22.004 Sep 2023Release notes
Open source →Added
- Add support of sheet type and visibility.
- Implement blank string handling.
Changed
- Improve
de_opt_f64example. - Remove datetime notice from README.
- Clippy.
- Bump MSRV to 1.63 (breaking).
- Set edition to 2021.
-
0.21.225 Jun 2023 -
0.21.116 Jun 2023Release notes
Open source →Changed
- Bump MSRV to 1.60.0 due to log dependencies.
Fixed
- Xls: formula values ignored.
- Xls: formula (string) not displayed properly.
-
0.21.013 Jun 2023Release notes
Open source →Added
- Support for duration.
Changed
- Add MSRV.
Fixed
- (xlsx) support
rattribute. - Support
PROJECTCOMPATVERSIONin vba. - Incorrect date parsing due to excel bug.
-
0.20.029 May 2023Release notes
Open source →Added
- (all) parse format/style information to infer cell as datetime.
- (ods) support number-columns-repeated attribute.
Changed
- Bump dependencies.
- Multiple clippy refactorings.
-
0.19.120 Oct 2022 -
0.19.019 Oct 2022Release notes
Open source →Added
- Always return sheet names in lexicographic order (
BTreeMap).
Changed
- Bump dependencies (quick-xml in particular and chrono).
- Remove travis.
Fixed
- Several decoding issues in xls and xlsb.
- Wrong decimal parsing.
- Always return sheet names in lexicographic order (
-
0.18.023 Feb 2021Release notes
Open source →Added
- Improve conversions from raw data to primitives.
- Replace macro matches! by match expression to reduce MSRV.
Changed
- Fix two typos in README.
Fixed
- Allow empty value cells in xlsx.
- Obscure xls parsing errors (#195).
-
0.17.003 Feb 2021Release notes
Open source →Added
- Use
chunks_exactinstead of chunks where possible. - Detect date/time formatted cells in XLSX.
- Brute force file detection if extension is not known.
- Support xlsx sheet sizes beyond
u32::MAX.
Changed
- Add regression tests that fail with miri.
- Ensure doctest functions actually run.
- Run cargo fmt to fix travis tests.
Fixed
- Make
to_u32,read_slicesafe and sound. - Security issue #199.
- Fix Float reading for XLSB.
- Use
-
0.16.226 Sep 2020Release notes
Open source →Changed
- Add
deserialize_withexample in README. - Correct MBSC to MBCS in vba.rs (misspelled before).
- Use 2018 edition paths.
Fixed
- Skip phonetic run.
- Fix XLS float parsing error.
- Add the ability to read formula values from XLSB.
- Support integral date types.
- Add
-
0.16.120 Nov 2019Release notes
Open source →Added
- Make
Metadata.sheets(andReader.sheet_names) always return names in workbook order.
Changed
- Fix warnings in tests.
- Make
-
0.16.015 Oct 2019Release notes
Open source →Added
- Deprecate failure and impl
std::error::Errorfor all errors. - Add
datesfeature to enrichDataTypewith date conversions functions.
- Deprecate failure and impl
-
0.15.624 Aug 2019 -
0.15.515 Jul 2019 -
0.15.411 Apr 2019 -
0.15.314 Dec 2018Release notes
Open source →Added
- Add several new convenient fn to
DataType. - Add a
Range::rangefn to get sub-ranges. - Add a new
Range::cellsiterator. - Implement
DoubleEndedIteratorwhen possible. - Add a
Range::getfn (similar to slice's).
Changed
- Add some missing
size_hintimpl in iterators. - Add some
ExactSizeIterator.
- Add several new convenient fn to
-
0.15.214 Dec 2018Release notes
Open source →Added
- Consider empty cell as empty str if deserializing to str or String.
-
0.15.113 Dec 2018 -
0.15.013 Dec 2018 -
0.14.1023 Nov 2018 -
0.14.923 Nov 2018Release notes
Open source →Fixed
- Do not return map keys for empty cells. Fixes not working
#[serde(default)].
- Do not return map keys for empty cells. Fixes not working
-
0.14.823 Nov 2018Release notes
Open source →Added
- Bump dependencies.
- Add a
RangeDeserializerBuilder::with_headersfn to improve serde deserializer.
-
0.14.723 Oct 2018 -
0.14.620 Sep 2018 -
0.14.528 Aug 2018 -
0.14.428 Aug 2018 -
0.14.309 Aug 2018 -
0.14.203 Aug 2018Release notes
Open source →Changed
- Bump dependencies.
Fixed
- Boolean detection and missing repeated cells in ODS.
-
0.14.108 May 2018Release notes
Open source →Fixed
- Possibility of index out of bound in
get_valueand eventually in Index<(usize, usize)>.
- Possibility of index out of bound in
-
0.14.027 Apr 2018Release notes
Open source →Added
- Have Range
start/endreturn None if the range is actually empty. - Have
Range::get_valuereturn an Option if the index is out of range.
- Have Range
-
0.13.123 Mar 2018 -
0.13.027 Jan 2018Release notes
Open source →Added
- Migrate from error-chain to failure.
- More documentation on error.
- Bump dependencies (calamine,
encoding_rsand zip). - Process any Read not only Files.
Changed
- Simplify Reader trait (enable direct Xlsx read etc ...).
- Always initialize at creation.
- Fix various typos.
-
0.12.127 Nov 2017 -
0.12.027 Oct 2017 -
0.11.822 Aug 2017 -
0.11.708 Jul 2017 -
0.11.605 Jul 2017 -
0.11.512 May 2017 -
0.11.408 May 2017 -
0.11.305 May 2017Release notes
Open source →Added
- Implement
DisplayforDataTypeandCellTypeError. - Add a
CellTypealias trait.
- Implement
-
0.11.204 May 2017