WITAN
Witan Exec · Render · Calc · Lint · Alternatives · Pricing · Agent Skills · Install Witan
---
# See how Witan compares, then decide.
Agents may be able to edit spreadsheets with libraries like openpyxl
and LibreOffice, but they cannot verify their work. Witan closes
that gap.
## General / Deployment
| Feature | Witan | openpyxl | LibreOffice | Excel COM |
|-------------------------------------------|-----------|----------|-------------|-----------|
| Zero dependencies (single binary) | ✓ | ✗ | ✗ | ✗ |
| Agent native | ✓ | ✗ | ✗ | ✗ |
| Lightweight install | ✓ | ✓ | ✗ | ✗ |
| Runs in headless / CI environments | ✓ | ✓ | ✓ | ✗ |
| Runs in cloud sandboxes (Codex, Docker) | ✓ | ✓ | ✓ | ✗ |
| No GUI process required | ✓ | ✓ | ✓ | ✗ |
| Token-efficient output for agents | ✓ | ✗ | ✗ | ✗ |
| Sub-second startup time | ✓ | ✓ | ✗ | ✗ |
## Render
| Feature | Witan | openpyxl | LibreOffice | Excel COM |
|------------------------------------------------------|-----------|----------|-------------|-----------|
| Targeted cell-range rendering | ✓ | ✗ | ✗ | ✗ |
| Full-sheet rendering | ✓ | ✗ | ✓ | ✓ |
| Auto-DPR scaling for vision models | ✓ | ✗ | ✗ | ✗ |
| Pixel diffing (before/after) | ✓ | ✗ | ✗ | ✗ |
| PNG and WebP output | ✓ | ✗ | ✓ | ~ |
| Solid, gradient, and pattern fills | ✓ | ✗ | ✓ | ✓ |
| Font styling (bold, italic, underline, strikethrough)| ✓ | ✗ | ✓ | ✓ |
| Rich text (mixed formatting per cell) | ✓ | ✗ | ✓ | ✓ |
| Text rotation (-90° to +90°) | ✓ | ✗ | ✓ | ✓ |
| All 8 horizontal alignment modes | ✓ | ✗ | ✓ | ✓ |
| Wrap text and shrink to fit | ✓ | ✗ | ✓ | ✓ |
| All 13 Excel border styles | ✓ | ✗ | ~ | ✓ |
| Merged cells | ✓ | ✗ | ✓ | ✓ |
| Hidden rows and columns | ✓ | ✗ | ✓ | ✓ |
| 150+ locale-aware number formats | ✓ | ✗ | ✓ | ✓ |
| Conditional formatting (operators, text, color scales)| ✓ | ✗ | ✓ | ✓ |
| Embedded images and shapes | ✓ | ✗ | ✓ | ✓ |
| Text overflow into adjacent cells | ✓ | ✗ | ✓ | ✓ |
| Excel-accurate appearance | ✓ | ✗ | ~ | ✓ |
| Sub-second render speed | ✓ | ✗ | ✗ | ✗ |
## Calc
| Feature | Witan | openpyxl | LibreOffice | Excel COM |
|-----------------------------------------------|-----------|----------|-------------|-----------|
| Full workbook recalculation | ✓ | ✗ | ✓ | ✓ |
| Structured output (address, formula, value) | ✓ | ✗ | ✗ | ✗ |
| New-error-only filtering | ✓ | ✗ | ✗ | ✗ |
| Maths & statistics (SUM, AVERAGE, STDEV, etc.) | ✓ | ✗ | ✓ | ✓ |
| Lookup & reference (VLOOKUP, INDEX, MATCH, etc.)| ✓ | ✗ | ✓ | ✓ |
| XLOOKUP / XMATCH | ✓ | ✗ | ✓ | ✓ |
| Logical functions (IF, IFS, SWITCH, IFERROR) | ✓ | ✗ | ✓ | ✓ |
| Financial functions (NPV, IRR, XIRR, PMT, etc.)| ✓ | ✗ | ✓ | ✓ |
| Text functions (CONCATENATE, TEXTJOIN, etc.) | ✓ | ✗ | ✓ | ✓ |
| Date & time functions | ✓ | ✗ | ✓ | ✓ |
| Dynamic array functions (FILTER, SORT, UNIQUE)| ✓ | ✗ | ~ | ✓ |
| Spill range support | ✓ | ✗ | ~ | ✓ |
| CSE (legacy) array formulas | ✓ | ✗ | ✓ | ✓ |
| 3D references across sheets | ✓ | ✗ | ✓ | ✓ |
| Named ranges (workbook + sheet scoped) | ✓ | ✗ | ✓ | ✓ |
| Structured table references | ✓ | ✗ | ✓ | ✓ |
| Circular reference detection | ✓ | ✗ | ✓ | ✓ |
| Iterative calculation mode | ✓ | ✗ | ✓ | ✓ |
| Writes computed values back to file | ✓ | ✗ | ✓ | ✓ |
| 9 error codes with explanations | ✓ | ✗ | ✗ | ✗ |
| Range-scoped output display | ✓ | ✗ | ✗ | ✗ |
## Lint
| Feature | Witan | openpyxl | LibreOffice | Excel COM |
|------------------------------------------------|-----------|----------|-------------|-----------|
| D001 — Double counting detection | ✓ | ✗ | ✗ | ✗ |
| D002 — Unsorted lookup range detection | ✓ | ✗ | ✗ | ✗ |
| D003 — Empty cell coercion detection | ✓ | ✗ | ✗ | ✗ |
| D005 — Non-numeric values silently ignored | ✓ | ✗ | ✗ | ✗ |
| D006 — Broadcast surprise detection | ✓ | ✗ | ✗ | ✗ |
| D007 — Duplicate lookup keys detection | ✓ | ✗ | ✗ | ✗ |
| D009 — Mixed percent/non-percent addition | ✓ | ✗ | ✗ | ✗ |
| D030 — Merged cell reference (non-anchor) | ✓ | ✗ | ✗ | ✗ |
| D031 — Spell check (9 languages) | ✓ | ✗ | ✗ | ✗ |
| Rule filtering (skip/only) | ✓ | ✗ | ✗ | ✗ |
| Range-scoped linting | ✓ | ✗ | ✗ | ✗ |
| Severity levels (error, warning, info) | ✓ | ✗ | ✗ | ✗ |
Legend: ✓ = Yes, ✗ = No, ~ = Partial
---
© Witan Labs Inc. 2026
hello@witanlabs.com · API Docs · GitHub · Research · Terms · Privacy