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 2436ba0
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: README.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -271,7 +271,7 @@ let counts = MiniExcel::save_as_sheets(
271
271
272
272
Configure final sheet names as visible, hidden, or very hidden with `with_sheet_visibility(name, SheetVisibility::...)`. Matching is case-insensitive, the first visible sheet becomes active, and unknown names or an all-hidden workbook are rejected before output is created. Hidden states are UI organization, not data protection; hidden worksheets remain queryable.
273
273
274
-
## Append To An Existing Workbook
274
+
## Append Or Replace A Worksheet
275
275
276
276
Use `MiniExcel::insert()` to atomically append a visible worksheet. A missing path creates a new workbook with the same row-count semantics:
277
277
@@ -291,7 +291,7 @@ assert_eq!(count, 1);
291
291
292
292
`insert_with_schema()` accepts a fallible, one-pass dynamic iterator. Source rows are disk-spooled and the constant-memory backend retains only the current row while generating the donor workbook; style rebasing currently materializes the generated worksheet XML. `insert_serialized()` accepts Serde structs. Existing unrelated ZIP entries, worksheet identities, formulas, and cached values are preserved, and an existing workbook is replaced only after the rewritten package validates and syncs.
293
293
294
-
The default `ExistingSheetPolicy::Reject` rejects duplicate worksheet names case-insensitively. `ExistingSheetPolicy::Replace` and `TargetRelationshipPolicy::RemoveSupported`are reserved for the replacement milestone and currently return an error before output is created. Insert writes XLSX packages, rejects macro-enabled `.xlsm` paths, creates visible worksheets, and rejects `WriteOptions::with_overwrite_file(true)` because workbook replacement is controlled by the insert policy.
294
+
The default `ExistingSheetPolicy::Reject` rejects duplicate worksheet names case-insensitively. Use `ExistingSheetPolicy::Replace`to replace a worksheet in place while preserving its workbook order, ID, relationship/path, visibility, and active state. The default `TargetRelationshipPolicy::Reject` accepts only a plain target with no worksheet relationships. `RemoveSupported`can remove target-owned tables, drawings with exclusively owned images, comments, VML drawings, and external hyperlinks; pivots, external links, unknown relationships, and shared/global parts are rejected or preserved conservatively. Insert writes XLSX packages, rejects macro-enabled `.xlsm` paths, and rejects `WriteOptions::with_overwrite_file(true)` because workbook replacement is controlled by the insert policy.
| Multi-sheet export |`save_as_sheets()` / `save_as_serialized_sheets()`| Preserves input sheet order and returns data-row counts |
50
-
|`InsertSheet` append |`insert()` / `insert_with_schema()` / `insert_serialized()`|Atomically appends a visible worksheet; missing paths create a workbook; replacement is deferred|
50
+
|`InsertSheet` append/replace|`insert()` / `insert_with_schema()` / `insert_serialized()`|Atomic append; strict in-place replacement preserves sheet identity and has an explicit relationship policy|
51
51
| Per-sheet visibility |`WriteOptions::with_sheet_visibility()`| Visible, hidden, and very hidden; first visible sheet is active |
52
52
|`overwriteFile`|`WriteOptions::with_overwrite_file()`| Defaults to `false`; existing paths require explicit opt-in |
53
53
|`FreezeRowCount` / `FreezeColumnCount`|`WriteOptions::with_freeze_row_count()` / `with_freeze_column_count()`| Defaults to one frozen row and zero frozen columns |
@@ -174,12 +174,12 @@ The contract covers only the current common surface: dynamic/typed path queries,
174
174
| Addressed JSONL/Markdown/manifest RAG export | Rust research extension | No |
This matrix is the coverage claim: Rust does not yet provide complete API parity with the current .NET packages.
182
182
183
183
## Deferred Work
184
184
185
-
SQL text parsing, `HAVING`, `ORDER BY`, joins, windows, pivots, disk-spill aggregation, vector indexing, model calls, CSV providers, old Excel formats, advanced template directives and sheet cloning, images, merged-cell APIs, formula calculation/dependency expansion, formula authoring, general styling, replacing/editing existing worksheets, async I/O, and streaming from caller-owned readers require separate design and acceptance milestones.
185
+
SQL text parsing, `HAVING`, `ORDER BY`, joins, windows, pivots, disk-spill aggregation, vector indexing, model calls, CSV providers, old Excel formats, advanced template directives and sheet cloning, image authoring, merged-cell APIs, formula calculation/dependency expansion, formula authoring, general styling, replacement calculation-chain policy, async I/O, and streaming from caller-owned readers require separate design and acceptance milestones.
0 commit comments