Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,30 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
are written as NULL and counted into a per-column warning report; columns
without a schema export as text verbatim. A columnar document opens
unsaved so a later Save can never overwrite the binary source with CSV.
- **Excel `.xlsx` interoperability** (F34): read and produce Excel workbooks
without a detour through CSV, and without a formula engine. The open chooser
inspects a workbook up front — every sheet with its visibility (including
hidden and very-hidden sheets), named tables and named ranges, per-sheet used
ranges and dimensions, formula and merged-cell counts, detected header-row
candidates and a bounded preview. Import a chosen sheet, named table or named
range (optionally a specific `A1` cell range), with control over the header
row (first row, a chosen row, or none), merged cells (keep the top-left value
only, or repeat it across the region), formulas (cached result, formula text,
or blank — with a warning when a workbook has formulas but no cached results,
since CEESVEE never evaluates them) and blank-row/blank-column trimming.
Imports honour the workbook's 1900/1904 date system so dates never shift and
the Excel 1900 leap-year quirk is preserved, and leading-zero text (ZIP and
account codes) stays text — cell types are respected, never numeric-coerced.
Every import produces a fresh CEESVEE document (there is no in-place `.xlsx`
save); the original workbook is never modified. Export one sheet from one
document, or several sheets (one per open tab) into a single workbook, with
optional bold/filled header styling, a frozen header row, an autofilter, and
column widths from the grid or autofit. Typed columns (from the F31 schema)
export as real Excel numbers, booleans and dates; text stays text and cells
invalid under their schema fall back to text. Excel's 1,048,576-row ×
16,384-column limits are checked before writing (an over-limit export is
refused up front), and the workbook is committed through the atomic-save
pipeline, so a failed or cancelled export never touches an existing file.
- **Row bookmarks, tags & notes** (F40): mark and annotate records without
touching the source data. Star or flag a row, apply multiple named tags
(a per-document tag namespace with usage counts), and attach a row note or
Expand Down
19 changes: 19 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,17 @@ and faithful on large, real-world delimited files.**
explode into rows, or drop). Signed/unsigned 64-bit integers, exact
decimal precision/scale, timestamps with timezone, and null-vs-empty-string
all survive intact.
- **Open Excel `.xlsx`** — a chooser lists every sheet (including hidden and
very-hidden ones), named tables and ranges, used ranges and dimensions, and
formula/merged-cell counts. Pick a sheet, table or cell range; choose the
header row (first, a chosen row, or none), how merged cells are handled
(top-left value only, or repeated across the region) and how formulas are
handled (cached result, formula text, or blank — with a warning when a
workbook has formulas but no cached results), and blank-row/column trimming.
The workbook's 1900/1904 date system is honoured (no date shifting, the
1900 leap-year quirk preserved) and leading-zero text stays text. Every
import creates a new document — there is no in-place `.xlsx` save, so the
original workbook is never modified.
- Auto-detect the **delimiter** (comma, tab, semicolon, pipe) with a manual /
custom override — plus an **advanced import** for preambles, comment
lines, custom quoting/escaping, multi-row headers, and footers.
Expand Down Expand Up @@ -121,6 +132,14 @@ and faithful on large, real-world delimited files.**
column's declared logical type to the matching arrow type (preserving 64-bit
integer widths, decimal precision/scale, and timestamp timezones); cells
that can't be represented are written as NULL and reported per column.
- **Export to Excel `.xlsx`** — write one document — or several open tabs as
one sheet each — to a single workbook, with optional bold/filled header
styling, a frozen header row, an autofilter, and column widths from the grid
or autofit. Typed columns emit real Excel numbers, booleans, and dates from
the declared schema (text stays text; cells invalid under their schema fall
back to text). Excel's 1,048,576-row × 16,384-column limits are checked
before anything is written, and the workbook commits through the same atomic
save pipeline, so a failed or cancelled export never touches an existing file.

**Reliability**

Expand Down
115 changes: 113 additions & 2 deletions src-tauri/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,12 @@ zip = { version = "2", default-features = false, features = ["deflate"] }
# Parquet & Arrow interop (F32): typed columnar open/export.
arrow = { version = "59", default-features = false, features = ["ipc"] }
parquet = { version = "59", default-features = false, features = ["arrow", "snap", "zstd"] }
# Excel .xlsx interoperability (F34): calamine reads workbooks (the `dates`
# feature pulls in chrono so date cells honour the workbook epoch), and
# rust_xlsxwriter produces them (typed values via its native ExcelDateTime, so
# no extra chrono feature is needed on the writer).
calamine = { version = "0.36", features = ["dates"] }
rust_xlsxwriter = "0.96"

# Single-instance is desktop-only: it forwards a second "Open with" launch
# (and its file argument) to the already-running window instead of spawning a
Expand Down
Loading
Loading