Note
While use of LLMs for generating code is encouraged, LLM-generated prose is severely restricted. See the LLM policy for more details.
visi is a CLI application for editing and evaluating Excel spreadsheets.
- Match Excel's execution behavior 100%, including pivot tables and macros (VBA).
- In some cases, visieven produces more numerically accurate results
- Excludes some functionality that require Microsoft web services
- visiaims to match the classes of errors that Excel produces, but not the error message itself (- visimay be able to improve upon Excel here)
- Documented discrepancies
- In some cases,
- Prioritize performance
- Written in Rust to maximize potential performance capacity
- Fast startup time
- Handle large workflows
LLMs are good at authoring spreadsheets with existing tools
(such as openpyxl for Python), but in order
to evaluate the formula results, you need a real
spreadsheet application. Excel is
unsuitable for headless evaluation of
spreadsheet files, especially on non-Windows
platforms (e.g. no COM automation).
visi aims to bridge this gap by providing an
execution/verification layer for spreadsheets.
brew install albert-yu/tap/visi# Display summary of sheets, dimensions, and formula counts
visi info data.xlsx
# Output summary as JSON
visi info data.xlsx --json# View first sheet as a formatted ASCII table in the terminal
visi read data.xlsx
# View specific sheet and range
visi read data.xlsx --sheet Sheet1 --range A1:C10
# Read a single cell result or raw formula
visi read data.xlsx --cell A1
visi read data.xlsx --cell A3 --raw
visi read data.xlsx --format csv
visi read data.xlsx --format jsonYou can take a spreadsheet authored with openpyxl and
perform the computation with eval.
# --in-place or -i will write back to the input file
visi eval data.xlsx --in-place
# Recalculate and print to stdout,
# leaving the original workbook unmodified
visi eval data.xlsx --print --format tablevisi set data.xlsx --sheet Sheet1 --cell A1 --value 100 --output updated.xlsx
# Set multiple cell values and formulas at once
visi set data.xlsx -s Sheet1 -S A1=100 -S A2=200 -S A3="=A1+A2" -S A4="=AVERAGE(A1:A2)" -i
# Cross-sheet reference
visi set data.xlsx -s Sheet2 -S B1="=Sheet1!A3 + 50" -ivisi sheet list data.xlsx
visi sheet add data.xlsx --name "Summary" -i
visi sheet rename data.xlsx --old "Sheet1" --new "Data" -i
visi sheet delete data.xlsx --name "OldSheet" -iUse --index for a 0-based offset or --label
if you want to follow the UI labels.
# Insert a new row at start
visi row delete data.xlsx --sheet Sheet1 --label 1 -i
visi row insert data.xlsx --sheet Sheet1 --index 0 -i
# Delete column label 'C'
visi col delete data.xlsx --sheet Sheet1 --label C -i
visi col delete data.xlsx --sheet Sheet1 --index 2 -ivisi export data.xlsx --sheet Sheet1 --format csv --output sheet1.csv
visi export data.xlsx --sheet Sheet1 --format json --output sheet1.jsonThis monorepo is structured follows:
- visi-core: embeddable spreadsheet engine that parses and executes the formulas in the workbook
- visi: Command-line application using- visi-corewhich can edit and execute Excel files headlessly
visi aims for feature parity with Excel by using
a harness that drives a real copy of Excel via AppleScript or COM automation,
runs computations, and compares the results. Both the cell values and types
should match exactly. See fuzz for more details.
- LLMs may be used for source code generation
- No LLM-generated comments in source code
- No LLM use for writing prose, unless clearly attributed at the beginning of the content
- EXCEPTION: commit messages may be 100% LLM-authored
- AGENTS.md should automatically enforce this
Dual-licensed: