xlsx_batch_reader 0.4.21

An Excel file(xlsx/xlsm) reader by batches, in pure Rust.
Documentation
# Changelogs

### [0.4.21] - 2026.07.25

#### Added

* add `CellValue::Formula` variant to support formula cell values
* add public function `resolve_formula` for resolving `${...}` template expressions in formula strings:
  - `$r` refers to the current row number (1-based)
  - `$c` refers to the current column letter (e.g., column 5 → `"E"`)
  - `col(N)` evaluates an expression and converts it to a column letter
  - `col(sheet!header)` lookups support header-name-based column resolution via the `headercols` parameter
  - arithmetic expressions with `+`, `-`, and parentheses are supported inside `${...}`
* `IntoExcelData` implementation for `CellValue` now handles the `Formula` variant — template expressions are automatically resolved and written as Excel formulas (both with and without custom format)
* add `"/"` to the list of values treated as empty (alongside `""`, `" "`, `"-"`, `"--"`, `"#N/A"`)

#### Changed

* `FromCellValue` implementations for all types now return an error for `CellValue::Formula` (formula cells are not supported for reading)
* examples now use `required-features = ["xlsxwriter"]` in `Cargo.toml` instead of `#[cfg(feature = "xlsxwriter")]` guards in source code
* `simple_batch_writer` example now demonstrates formula writing

#### Fixed

* properly set `required-features` for xlsxwriter-dependent examples in `Cargo.toml`

### [0.4.20] - 2026.07.09

#### Changed

* when `regex:` prefix is used, the entire value is treated as a single regex pattern (no pipe-splitting) to avoid conflict with regex alternation operator `|`
* internal field types changed from `Vec<Regex>` to `Option<Regex>` since only one regex is allowed per column

### [0.4.19] - 2026.07.08

#### Added

* support regex matching for `skip_until`, `skip_matched`, `catch_matched`, `read_before` and `header_check` — use `regex:` prefix in condition values to enable regex pattern matching alongside exact string matching
* add `regex` crate as a dependency

#### Changed

* `with_skip_until`, `with_skip_matched`, `with_catch_matched`, `with_read_before` and `with_header_check` now return `Result<()>` instead of `()` (regex compilation may fail)

### [0.4.18] - 2026.05.28

#### Added

* add function `with_catch_matched` for Worksheet

### [0.4.17] - 2026.05.17

#### Fixed

* Fixed issue where some xlsx files could not locate their corresponding sheet XML files correctly

### [0.4.16] - 2025.09.26

#### Added

* add function `get_header_row_with_empty_mark` for Worksheet

### [0.4.15] - 2025.09.06

#### Fixed

* unable to recognize html encoded string

### [0.4.13] - 2025.09.06

#### Added

* support to check header row
#### Fixed
* unable to recognize header row in cached sheet


### [0.4.12] - 2025.09.05

#### Added

* support to skip matched row(s) by all cell or any cell

### [0.4.10] - 2025.09.05

#### Fixed

* header row may be skiped when read xlsx file


### [0.4.9] - 2025.09.05

#### Added

* support to skip matched row(s) when read xlsx file


### [0.4.8] - 2025.08.10

#### Fixed

* Ubable to read inlineStr

#### Changed

* public use zip


### [0.4.7] - 2025.08.09

#### Fixed

* Ubable to read data if workbook.xml.rels use full path
* Improper omission of lifetime parameters

#### Changed

* public use rust_xlsxwriter
* Update dependency zip、rust_xlsxwriter to the latest version


### [0.4.2] - 2025.02.15

#### Changed

* public use chrono


### [0.4.1] - 2025.02.06

#### Changed

* the xlsxwriter feature keeps memory usage to a minimum when writing writing large files


### [0.3.5] - 2025.01.18

#### Changed

* rewrite xlsxwriter feature and allow to get raw Worksheet


### [0.3.3] - 2025.01.12

#### Changed

* update dependency zip to the latest version


### [0.3.2] - 2024.11.25

#### Added

* support to check whether the sheet is empty


### [0.3.1] - 2024.11.24

#### Fixed

* when retrieving numbers from CellValue(stored as string), comma separators will be recognized correctly.


### [0.3.0] - 2024.11.15

#### Changed

* when retrieving non String data from CellValue, return None for '', '-', '-', '#N/A'


### [0.2.3] - 2024.11.10

#### Added

* add with_capture_vals and get_captured_vals to XlsxSheet


### [0.2.2] - 2024.11.9

#### Added

* add data type Timesecond(seconds since midnight)


### [0.2.1] - 2024.11.9

#### Fixed

* unable to read data if skip_until is an empty hashmap


### [0.2.0] - 2024.11.5

#### Added

* support to read partial rows based on conditions


### [0.1.14] - 2024.6.1

#### Added

* add trait IntoCellValue and implement NaiveDate, NaiveDateTime, NaiveTime, Date32, Timestamp for it


### [0.1.13] - 2024.6.1

#### Changed

* update dependency rust_xlsxwriter to the latest version


### [0.1.12] - 2024.6.1

#### Added

* write row(s) by column name instead of position


### [0.1.11] - 2024.5.11

#### Fixed

* not full fetaures documnet


### [0.1.9] - 2024.5.5

#### Added

* add feature full and documnet full fetaures


### [0.1.8] - 2024.5.3

#### Added

* support xlsxwriter to append one row


### [0.1.7] - 2024.4.27

#### Added

* support to iter cached sheet by batches

#### Fixed

* column_range return the first and last column number


### [0.1.5] - 2024.4.26

#### Added

* support read all data into memory when sheet created(fearure `cached` should be enabled)

#### Fixed

* unable to read the size of sheet 


### [0.1.4] - 2024.4.15

#### Added

* get cell value as timestamp

#### Changed

* Optimaze date&time recognition algorithm for better performance


### [0.1.3] - 2024.4.14

#### Fixed

* unable to use feature xlsxwriter


### [0.1.2] - 2024.4.13

#### Added

* get cell value as datetime and time

#### Changed

* output error message in English


### [0.1.1] - 2024.4.13

#### Added

* simple writer example


### [0.1.0] - 2023.4.13

#### Added

* first release