# ExVEx v0.2.0 - Table of Contents

Pure Elixir library for reading and editing existing .xlsx / .xlsm files with round-trip fidelity — no Rust, no Python, no NIFs.

## Pages

- [ExVEx](readme.md)
- [Changelog](changelog.md)
- [License](license.md)

## Modules

- [ExVEx](ExVEx.md): Pure-Elixir reader and editor for `.xlsx` / `.xlsm` workbooks.
- [ExVEx.Formula.Reference](ExVEx.Formula.Reference.md): Absolute-or-relative A1-style cell references, as they appear inside
Excel formula tokens.
- [ExVEx.Formula.Serializer](ExVEx.Formula.Serializer.md): Turns a list of `ExVEx.Formula.Token` records back into the formula
string. Each token carries its canonical textual form in the `:text`
field (populated by the tokenizer) OR derived from structured fields
after a shift operation.

- [ExVEx.Formula.Shift](ExVEx.Formula.Shift.md): Applies a `%ExVEx.Mutation.Shift{}` to a token stream produced by
`ExVEx.Formula.Tokenizer`, rewriting cell and range references so
they continue to point at the same logical cells after the shift.
- [ExVEx.Formula.Token](ExVEx.Formula.Token.md): A single token produced by `ExVEx.Formula.Tokenizer`. Every formula is
a flat list of these tokens, preserving enough structure for
shift-on-insert/delete to walk the stream and rewrite cell references.
- [ExVEx.Formula.Tokenizer](ExVEx.Formula.Tokenizer.md): Tokenises an Excel formula string into a flat list of
`ExVEx.Formula.Token` records.
- [ExVEx.Mutation.Shift](ExVEx.Mutation.Shift.md): A row/column insertion or deletion expressed as a single data record.
- [ExVEx.OOXML.AutoFilter](ExVEx.OOXML.AutoFilter.md): Cascades a `%ExVEx.Mutation.Shift{}` through an `<autoFilter>` node by
rewriting its `ref` attribute (a single rectangular range).

- [ExVEx.OOXML.Comments](ExVEx.OOXML.Comments.md): Parse, shift, and serialize an `xl/comments*.xml` part.
- [ExVEx.OOXML.ConditionalFormatting](ExVEx.OOXML.ConditionalFormatting.md): Cascades a `%ExVEx.Mutation.Shift{}` through a `<conditionalFormatting>`
SimpleForm node: its `sqref` attribute (space-separated ranges) and any
`<formula>` text inside child `<cfRule>` elements.

- [ExVEx.OOXML.DataValidations](ExVEx.OOXML.DataValidations.md): Cascades a `%ExVEx.Mutation.Shift{}` through a `<dataValidations>` node:
the `sqref` attribute and any `<formula1>` / `<formula2>` text children
of each child `<dataValidation>` element.

- [ExVEx.OOXML.Drawing](ExVEx.OOXML.Drawing.md): Parse, shift, and serialize an `xl/drawings/drawing*.xml` part.
- [ExVEx.OOXML.SharedStrings](ExVEx.OOXML.SharedStrings.md): The shared string table (`xl/sharedStrings.xml`).
- [ExVEx.OOXML.SheetSatellites](ExVEx.OOXML.SheetSatellites.md): Cascades a `%ExVEx.Mutation.Shift{}` into the satellite parts linked
from a worksheet's `.rels` file — comments, tables, and drawings.
- [ExVEx.OOXML.SqrefShift](ExVEx.OOXML.SqrefShift.md): Shifts an OOXML `sqref` string — a space-separated list of cell
references and/or rectangular ranges (e.g. `"A1:B2 D4 F1:F10"`) — under
a `%ExVEx.Mutation.Shift{}`.
- [ExVEx.OOXML.Styles](ExVEx.OOXML.Styles.md): Parser for `xl/styles.xml`.
- [ExVEx.OOXML.Styles.AlignmentRecord](ExVEx.OOXML.Styles.AlignmentRecord.md): Raw alignment attributes attached to an `<xf>` in `xl/styles.xml`. This
is the internal OOXML-shaped representation; end users read alignment
off the flattened `%ExVEx.Style.Alignment{}` returned by
`ExVEx.get_style/3`.

- [ExVEx.OOXML.Styles.CellFormat](ExVEx.OOXML.Styles.CellFormat.md): A single `<xf>` record from `cellXfs`. Cells reference these by index via
the `s` attribute (`<c r="A1" s="3"/>` → `cell_formats[3]`).

- [ExVEx.OOXML.Styles.NumFmt](ExVEx.OOXML.Styles.NumFmt.md): A custom number format declared in `xl/styles.xml`. IDs 0..163 are
reserved for built-in formats defined by the OOXML spec; IDs 164 and
above are custom formats authored by the workbook.

- [ExVEx.OOXML.Table](ExVEx.OOXML.Table.md): Parse, shift, and serialize an `xl/tables/table*.xml` part.
- [ExVEx.OOXML.Workbook](ExVEx.OOXML.Workbook.md): Parser for `xl/workbook.xml` — the per-workbook manifest of sheets.
- [ExVEx.OOXML.Workbook.DefinedName](ExVEx.OOXML.Workbook.DefinedName.md): A single `<definedName>` record from `xl/workbook.xml`. Named ranges
and named formulas live here.
- [ExVEx.OOXML.Workbook.SheetRef](ExVEx.OOXML.Workbook.SheetRef.md): A reference to a worksheet as declared in `xl/workbook.xml`.
- [ExVEx.OOXML.Worksheet](ExVEx.OOXML.Worksheet.md): Parser and surgical mutator for `xl/worksheets/sheet*.xml`.
- [ExVEx.OOXML.Worksheet.Cell](ExVEx.OOXML.Worksheet.Cell.md): The raw, untyped-value form of a cell as it lives in worksheet XML.
- [ExVEx.OOXML.Worksheet.Editable](ExVEx.OOXML.Worksheet.Editable.md): ETS-backed editable representation of a worksheet. The parsed SimpleForm
tree is converted on first access and materialised back to a tree at
serialise time.
- [ExVEx.Packaging.ContentTypes](ExVEx.Packaging.ContentTypes.md): The `[Content_Types].xml` manifest that lives at the root of every OPC
package.
- [ExVEx.Packaging.ContentTypes.Default](ExVEx.Packaging.ContentTypes.Default.md): A default content type mapping: every part whose path ends in `extension`
has `content_type` unless overridden.

- [ExVEx.Packaging.ContentTypes.Override](ExVEx.Packaging.ContentTypes.Override.md): A per-part content type override. `part_name` is an absolute path with a
leading `/` (e.g. `"/xl/workbook.xml"`) per the OPC spec.

- [ExVEx.Packaging.Relationships](ExVEx.Packaging.Relationships.md): An OPC `.rels` file — a graph of `<Relationship>` records linking parts
of the package together.
- [ExVEx.Packaging.Relationships.Relationship](ExVEx.Packaging.Relationships.Relationship.md): A single `<Relationship>` record: an opaque `id`, a type URI, and a
`target` path that is resolved relative to the directory containing
the `.rels` file that declared it.

- [ExVEx.Packaging.Zip](ExVEx.Packaging.Zip.md): Archive IO for the Open Packaging Convention container used by `.xlsx` /
`.xlsm` / `.xltx` files.
- [ExVEx.Packaging.Zip.Entry](ExVEx.Packaging.Zip.Entry.md): A single member of an xlsx ZIP archive — a path inside the package and the
raw bytes at that path. Directory entries (zero-length, name ending in `/`)
are dropped by `:zip.unzip/2` and are not represented here.

- [ExVEx.Style](ExVEx.Style.md): A resolved, flattened style for a single cell.
- [ExVEx.Style.Alignment](ExVEx.Style.Alignment.md): Alignment and wrapping options declared on a `<xf>` record.
- [ExVEx.Style.Border](ExVEx.Style.Border.md): The four sides of a cell border as `%ExVEx.Style.Side{}` records.
- [ExVEx.Style.Builder](ExVEx.Style.Builder.md): Translates the keyword-style options accepted by `ExVEx.put_style/4`
into updated `%Font{}`, `%Fill{}`, `%Border{}`, `%Alignment{}` records,
merging with the cell's existing style.
- [ExVEx.Style.Color](ExVEx.Style.Color.md): A colour reference from the OOXML style model. Colours can be declared
as a concrete RGB value, a reference to a theme palette entry, or a
reference to the legacy indexed palette.

- [ExVEx.Style.Fill](ExVEx.Style.Fill.md): A fill record (the cell background) — a pattern type plus optional
foreground and background colours.

- [ExVEx.Style.Font](ExVEx.Style.Font.md): A font record from `xl/styles.xml` — a name, size, colour, and the usual
decoration flags.

- [ExVEx.Style.Side](ExVEx.Style.Side.md): One side of a cell border: a line style and a colour.
- [ExVEx.Utils.Coordinate](ExVEx.Utils.Coordinate.md): A1-style cell coordinate parsing and emission.
- [ExVEx.Utils.Range](ExVEx.Utils.Range.md): Rectangular cell ranges (`"A1:B2"` in Excel's notation).
- [ExVEx.Workbook](ExVEx.Workbook.md): The in-memory representation of a workbook.

## Mix Tasks

- [mix bench.comparative](Mix.Tasks.Bench.Comparative.md): Runs the rotating 4-phase xlsx benchmark across Elixir / Python / Rust.

