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
Copy file name to clipboardExpand all lines: docs/compatibility.md
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -23,6 +23,7 @@ The Rust MVP implements the smallest useful MiniExcel-style XLSX read/write surf
23
23
|`serde_json`| 1.x | Query plans, analytics/RAG output, parity contracts, and CLI JSON | MIT OR Apache-2.0 | Checked with Rust 1.85 |
24
24
|`sha2`| 0.10 | Streaming SHA-256 source identity for RAG manifests | MIT OR Apache-2.0 | Checked with Rust 1.85 |
25
25
|`thiserror`| 2.x | Public error composition | MIT OR Apache-2.0 | Resolved by the workspace lockfile |
26
+
|`uuid`| 1.x | Typed threaded-comment, reply, person, and legacy-note identifiers | MIT OR Apache-2.0 | Resolved by the workspace lockfile |
26
27
|`zip`| 7.2 | Incremental worksheet entry decompression | MIT | Locked and checked with Rust 1.85 |
27
28
28
29
The latest `calamine 0.36` and `rust_xlsxwriter 0.97` require Rust 1.88. The MVP pins the preceding API lines so the declared Rust 1.85 MSRV is executable rather than aspirational.
@@ -43,6 +44,7 @@ The latest `calamine 0.36` and `rust_xlsxwriter 0.97` require Rust 1.88. The MVP
43
44
|`GetSheetDimensions`|`MiniExcel::get_sheet_dimensions()`| Returns used ranges in workbook order with 1-based indices |
44
45
|`GetColumns`|`MiniExcel::get_columns()`| Returns selected dynamic keys or an empty vector |
45
46
|`QueryTable`|`query_table()` / `query_table_as()` / byte and borrowed-reader variants | Case-insensitive table-name lookup, metadata headers, and inclusive table bounds |
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).
| Templates | Partial | Rust fills path/byte templates with scalar values and single-row arrays while preserving package parts. Streams, grouping, conditions, parametrized sheets, `$=` formulas, formula-reference updates, and calculation-chain handling remain unsupported. |
39
39
| Pictures and merge processing | Missing | Add anchored pictures and merge adjacent identical cells through the templater surface. Structured reads do not provide authoring parity. |
40
40
| CSV | Missing | Dynamic/typed CSV query and save, append, columns, DataReader/DataTable, delimiter/newline/encoding/quoting configuration, and CSV/XLSX conversion. |
41
-
| Comments and notes |Missing|Retrieve threaded comments, replies, people/authors, resolution state, timestamps, and legacy notes. |
41
+
| Comments and notes |Implemented|Path/bytes/borrowed APIs return threaded roots, replies, unresolved person IDs, people/provider/user IDs, resolution state, typed timestamps, and legacy notes. |
| Attribute-based mapping | Partial | Column index/name attributes, localized headers, formula metadata, custom dynamic formatters, field mapping, and dynamic column ordering/filtering remain. Serde covers rename, alias, defaults, skips, options, and custom serializers; `WriteOptions` covers width/hidden layout by final header name. |
44
44
| Read configuration | Partial | Culture-aware conversion, buffer/fast modes, and some null/empty-string behavior. Merged-cell filling and shared-string disk caching are implemented. |
45
45
| Write configuration and style | Partial | OOXML tables, shared versus inline strings, and broader cell styling remain. Rust exposes default/minimal cell style modes, header output/style, AutoFilter, right-to-left views, frozen rows/columns, bounded AutoWidth, body wrapping/alignment, and number formats. |
46
-
| Sheet metadata/workflow | Partial |Table metadata, comment metadata, dynamic sheet aliases, class-level sheet selection, and traversing all sheets through one reader. Rust already covers names, order, dimensions, visibility, and active state. |
46
+
| Sheet metadata/workflow | Partial |Dynamic sheet aliases, class-level sheet selection, and traversing all sheets through one reader remain. Rust covers names, order, dimensions, visibility, active state, table metadata, and comments/notes. |
47
47
| Provider/package model | Different by design | .NET composes OpenXML, CSV, templating, and fluent-mapping providers. Rust has a single XLSX crate plus CLI and WASM adapters; those adapters do not replace the missing provider capabilities. |
| 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/`|
56
57
| 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/`|
57
58
| Templates/pictures/merges | Basic template fill implemented; advanced directives and authoring remain deferred |`src/MiniExcel.OpenXml/Api/OpenXmlTemplater.cs`; `tests/MiniExcel.OpenXml.Tests/Templates/`|
The .NET APIs marked with `Async` also have generated synchronous counterparts through the repository's sync-version generation. The gap therefore concerns capability, not only method naming.
64
65
65
66
## Suggested Implementation Order
66
67
67
-
1.**Comments and notes**: focused OpenXML read features with clear public result models.
68
-
2.**CSV provider**: keep a separate format boundary rather than conditionals inside the XLSX parser.
69
-
3.**Async query/export/template APIs**: extend runtime-neutral producer/cancellation patterns without presenting blocking ZIP work as async I/O.
70
-
4.**Advanced templates and Fluent Mapping**: add grouped/conditional templates, parametrized sheets, and mapping through separate compatibility milestones.
71
-
5.**Remaining workbook edits**: copy/add, rename, reorder, and standalone visibility mutation require their own preservation contracts.
68
+
1.**CSV provider**: keep a separate format boundary rather than conditionals inside the XLSX parser.
69
+
2.**Async query/export/template APIs**: extend runtime-neutral producer/cancellation patterns without presenting blocking ZIP work as async I/O.
70
+
3.**Advanced templates and Fluent Mapping**: add grouped/conditional templates, parametrized sheets, and mapping through separate compatibility milestones.
71
+
4.**Remaining workbook edits**: copy/add, rename, reorder, and standalone visibility mutation require their own preservation contracts.
72
72
73
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