# Sheeter
Convert data files between formats from the command line.
**Seven formats, forty-two routes.** CSV, TSV, JSON, YAML, XML, TOML, XLSX —
any direction, through a single canonical hub.
## Install
cargo install sheeter-engine
The installed binary is `sheeter`.
## Usage
sheeter convert --from <FMT> --to <FMT> [--sheet NAME] <input> <output>
Formats: `csv`, `tsv`, `json`, `yaml`, `xml`, `toml`, `xlsx`.
# CSV → JSON
sheeter convert --from csv --to json data.csv data.json
# XLSX (multi-sheet) → CSV (one file per sheet)
sheeter convert --from xlsx --to csv report.xlsx report.csv
# writes report.Sheet1.csv, report.Sheet2.csv, ...
# XLSX → JSON (single document keyed by sheet name)
sheeter convert --from xlsx --to json report.xlsx report.json
# Extract a single sheet
sheeter convert --from xlsx --to csv --sheet Vendas report.xlsx vendas.csv
# JSON → XLSX (single sheet named Sheet1)
sheeter convert --from json --to xlsx config.json config.xlsx
## How it works
Every reader produces a `CanonicalValue`; every writer consumes one. Adding
a new format costs one reader and one writer, not `N-1` pairwise converters.
Multi-sheet XLSX inputs produce one output per sheet for CSV and TSV, and a
single merged document for JSON, YAML, XML, TOML, and XLSX. Output filenames
use the pattern `<stem>.<SheetName>.<ext>`, with sheet names sanitized to
filesystem-safe characters.
## Versioning
This project follows [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html).
Changelog follows [Keep a Changelog 1.1.0](https://keepachangelog.com/en/1.1.0/).
Commit messages follow [Conventional Commits 1.0.0](https://www.conventionalcommits.org/en/v1.0.0/).