Releases: tafia/calamine
v0.31.0 - 2025-09-27
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
v0.30.1 - 2025-09-06
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
v0.30.0 - 2025-08-07
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
v0.29.0 - 2025-07-17
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
v0.28.0 - 2025-06-19
v0.27.0 - 2025-04-22
Added
- (xls): add one more
Errorvariant 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
- README.md: (misc) Fix example by @simnalamburt in #475
- build(deps): bump quick-xml to 0.36 by @PrettyWood in #473
- fix: always parse a string cell as string by @PrettyWood in #472
- perf: accelerated datatype conversion by @jqnatividad in #482
- Bump to quick-xml 0.37 by @jqnatividad in #477
- Pin zip crate to 2.5.* by @prophittcorey in #497
- read_string: fix comparison with 'closing' tag name by @falconandy in #490
- Malformed format by @sftse in #479
New Contributors
- @simnalamburt made their first contribution in #475
- @falconandy made their first contribution in #490
Full Changelog: v0.26.1...v0.27.0
v0.26.1 - 2024-10-10
Fixed
- Sparse cells expect 0 index rows, even when using
header_row.
What's Changed
- fix: header row in the middle can break by @PrettyWood in #470
Full Changelog: v0.26.0...v0.26.1
v0.26.0 - 2024-10-08
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.
What's Changed
- Adding in ability to read merge cells from xls and xlsx files. by @magackame in #437
- bump zip from 1 to 2 by @jqnatividad in #439
- chore: make clippy happy by @PrettyWood in #448
- docs: fixes #436 by @mmorley0395 in #445
- Evaluate cell name directly instead of trying to be too smart by @tafia in #449
- add warning and return an empty range if not a worksheet by @tafia in #450
- feat: add worksheet_range_ref to xlsb, add ReaderRef trait by @dimastbk in #451
- skip minifat construction if length is zero by @tafia in #452
- fix broken tests by @sftse in #457
- docs: enable dates and picture features in docs.rs build by @paolobarbolini in #458
- fix(ods): support consecutive repeated empty cells by @PrettyWood in #456
- docs: fix README links to helper functions by @lucatrv in #461
- Ignore Annotations by @schrieveslaach in #467
- feat: named table data as
DataReftype by @wdoppenberg in #464 - feat: add option to set header row by @PrettyWood in #453
New Contributors
- @magackame made their first contribution in #437
- @mmorley0395 made their first contribution in #445
- @paolobarbolini made their first contribution in #458
- @schrieveslaach made their first contribution in #467
- @wdoppenberg made their first contribution in #464
Full Changelog: v0.25.0...v0.26.0
v0.25.0 - 2024-05-25
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.
What's Changed
- Issue401 by @tafia in #402
- bump to 0.24.0 by @tafia in #403
- feat: added is_error and get_error methods for the DataType trait by @lukapeschke in #409
- feat: add
with_deserialize_headersmethod for `RangeDeserializerBui… by @lucatrv in #408 - feat: add deserialize helper functions by @lucatrv in #406
- feat: add
Range::headersmethod by @lucatrv in #413 - docs: add note for
Xlsx::worksheet_range_refby @lucatrv in #414 - feat: Use std::cell::OnceLock instead of the once_cell crate by @softdevca in #412
- Support to get merged region by @gy0801151351 in #405
- Use case-insensitive comparison to find a part file in Xlsx ZIP archive by @andy128k in #419
- Replace
zipwithzip_nextby @Pr0methean in #423 - Shared formula by @ling7334 in #425
- Fixes #420 by @jlondonobo in #421
- Expose dimensions methods to the public by @MichelCarroll in #428
- Replace zip_next with zip by @Dirreke in #430
New Contributors
- @gy0801151351 made their first contribution in #405
- @Pr0methean made their first contribution in #423
- @ling7334 made their first contribution in #425
- @jlondonobo made their first contribution in #421
- @MichelCarroll made their first contribution in #428
- @Dirreke made their first contribution in #430
Full Changelog: v0.24.0...v0.25.0
v0.24.0 - 2024-02-08
Added
- Introduce a
DataTypetrait implemented by bothDataandDataRef. DataandDataTypenow returnSome(0{.0})andSome(1{.0})rather than
Nonewhen.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.
What's Changed
- Fix384 by @tafia in #388
- feat(ods): detect ods password protected files by @dimastbk in #392
- feat(xlsb): detect xlsb password protected files by @dimastbk in #393
- refactor: make
DataTypeRefpublic and introduce aDataTypeTraittrait by @lukapeschke in #390 - refactoring DateTime(f64) to DateTime(ExcelDateTime) by @dimastbk in #394
- docs: fix
de_opt_f64example by @lucatrv in #398 - derive Clone on iterators by @Expurple in #397
- feat: support bools in DataType.as_f64 and DataType.as_i64 variants by @lukapeschke in #399
New Contributors
Full Changelog: v0.23.1...v0.24.0