You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 23bba2d
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: README.md
+16Lines changed: 16 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -206,6 +206,22 @@ Without headers, dynamic keys use the actual Excel column names such as `A`, `B`
206
206
207
207
Merged cells retain only their physical top-left value by default. Use `ReadOptions::with_fill_merged_cells(true)` to project that value across the merged range for dynamic, typed, and byte queries. Structured queries remain sparse and expose only physically stored cells.
208
208
209
+
### Named Table Query
210
+
211
+
Query an OpenXML table by its metadata name without reading cells outside its declared range:
The comparison uses the .NET public APIs, their controlling implementations, and focused tests under the sibling `../MiniExcel` checkout. Rust status is based on the public `MiniExcel` facade, options, integration tests, and [compatibility boundary](compatibility.md).
15
15
16
16
Status meanings:
17
17
18
+
-**Implemented**: the useful observable XLSX behavior is covered by a Rust-native API and focused cross-project evidence.
18
19
-**Partial**: Rust covers the core scenario but not the full observable .NET behavior.
19
20
-**Missing**: no equivalent public Rust capability exists.
20
21
-**Different by design**: Rust provides a native alternative, but it is not API or behavior parity.
| Area | Status | Capability available in .NET but not fully implemented in Rust |
29
30
| --- | --- | --- |
30
-
| Named tables |Missing|Query an OpenXML table by table name (`QueryTable`), including table-specific headers and bounds. |
31
-
| DataReader and DataTable |Missing |`IDataReader`/async reader access, schema tables, typed getters, `NextResult` sheet traversal, and `DataTable` materialization. |
31
+
| Named tables |Implemented|Dynamic/typed path queries, byte queries, and borrowed-reader visitors use table metadata headers and bounds with case-insensitive table-name matching. |
32
+
| DataReader and DataTable |Different by design | Rust exposes iterators and borrowed visitors instead of .NET tabular interfaces. A Rust-native Arrow/record-batch adapter is deferred until a concrete integration requires it and does not block parity completion. |
32
33
| Caller-owned streams | Partial | Borrowed synchronous dynamic/typed/structured visitors, metadata reads, dynamic/schema/typed/multi-sheet writers, and separate reader-to-writer Insert are implemented with leave-open semantics. Borrowed lazy iterators, async streams, and template streams remain unsupported. |
33
34
| Async and cancellation | Partial | Optional runtime-neutral async row production and cancellation are implemented for explicit-schema path Insert. Async query/export/template operations, typed async sources, and progress callbacks remain unsupported. ZIP and filesystem work remains blocking on a dedicated worker. |
34
35
| General save inputs | Partial | Export from general objects/enumerables, dictionaries, `DataTable`, `IDataReader`, and async enumerables, with progress. Rust accepts dynamic or same-type Serde slices and reports per-sheet row counts. |
| Area | Rust evidence | .NET evidence in `../MiniExcel`|
51
52
| --- | --- | --- |
52
53
| Public read/write boundary |`miniexcel/src/facade.rs`, `miniexcel/src/options.rs`|`src/MiniExcel.OpenXml/Api/OpenXmlImporter.cs`, `OpenXmlExporter.cs`|
53
-
| Tables |No public table API|`OpenXmlImporter.QueryTableAsync`; `tests/MiniExcel.OpenXml.Tests/Tables/`|
54
-
| DataReader/DataTable |No public tabular adapter |`OpenXmlImporter.GetDataReader`, `GetAsyncDataReader`, `QueryAsDataTableAsync`; `tests/MiniExcel.OpenXml.Tests/DataReader/`|
54
+
| Tables |`MiniExcel::query_table*`; Rust focused tests use the exact `TestQueryTable.xlsx` fixture (SHA-256 `04F719BF9F9E99D9B437A8FB32F8111FD92580A1D29ACAD10B6ED128C0564501`)|`OpenXmlImporter.QueryTableAsync`; `tests/MiniExcel.OpenXml.Tests/Tables/`|
55
+
| DataReader/DataTable |Rust iterators and borrowed visitors are the native abstraction; no literal .NET tabular adapter is planned|`OpenXmlImporter.GetDataReader`, `GetAsyncDataReader`, `QueryAsDataTableAsync`; `tests/MiniExcel.OpenXml.Tests/DataReader/`|
55
56
| Multi-sheet and workbook edits | Writer creates multiple sheets; existing workbooks support append and strict replacement with package preservation and bounded explicit-schema producers |`OpenXmlExporter.InsertSheetAsync`, `CopyAndAddSheetAsync`, `AlterSheetAsync`; `tests/MiniExcel.OpenXml.Tests/MultipleSheets/` and `AlterSheets/`|
56
57
| Templates/pictures/merges | Basic template fill implemented; advanced directives and authoring remain deferred |`src/MiniExcel.OpenXml/Api/OpenXmlTemplater.cs`; `tests/MiniExcel.OpenXml.Tests/Templates/`|
@@ -63,13 +64,13 @@ The .NET APIs marked with `Async` also have generated synchronous counterparts t
63
64
64
65
## Suggested Implementation Order
65
66
66
-
1.**Named-table query and comments**: focused OpenXML read features with clear fixtures and public result models.
67
+
1.**Comments and notes**: focused OpenXML read features with clear public result models.
67
68
2.**CSV provider**: keep a separate format boundary rather than conditionals inside the XLSX parser.
68
69
3.**Async query/export/template APIs**: extend runtime-neutral producer/cancellation patterns without presenting blocking ZIP work as async I/O.
69
70
4.**Advanced templates and Fluent Mapping**: add grouped/conditional templates, parametrized sheets, and mapping through separate compatibility milestones.
70
71
5.**Remaining workbook edits**: copy/add, rename, reorder, and standalone visibility mutation require their own preservation contracts.
71
72
72
-
DataReader/DataTable are .NET ecosystem abstractions and should not be ported literally. A Rust-native record-batch or tabular adapter is appropriate only when a concrete integration requires it.
73
+
DataReader/DataTable are .NET ecosystem abstractions and are intentionally not literal Rust parity requirements. A Rust-native record-batch or tabular adapter is appropriate only when a concrete integration requires it.
0 commit comments