Show HN: tuisheet, a terminal spreadsheet compatible with OpenXML (xlsx) files
github.comPresenting tuisheet: A love letter to VisiCalc and Lotus 1-2-3.
The motive was to code a programme inspired by VisiCalc and Lotus 1-2-3 interface, running on terminal, but fully compatible with the current universal standard of OpenXML (xlsx files for spreadsheets). Coded in Go lang; apart from my being more familiar with this programming language, it helps making a single executable, low on resources. Also, I like Go's compiler ability to cross compile to many platforms and OSes (which I personally often meet through my daily job). By the way, tuisheet is much more thoroughly tested and used on Linux than on Windows (or Solaris, AIX, BSD).
Very cool project! For those of us old enough to remember working this way, it’s really nice to see a modern take on it.
Curious how extensive the formula support is. How many Excel functions do you currently support, and how do you handle more complex formulas and dependencies between cells or dynamic array formulas, etc.?
Thank you! Perhaps I should add the supported functions in README.md. There is a list in programme's help (F1) with a small summary from each one. I copy from there:
ABS, AND, AVERAGE, AVERAGEIF, COLUMN, COUNT, COUNTA, COUNTIF, COUNTIFS, DATE, DAY, DAYS, EXACT, EXP, FILTER, FIND, HLOOKUP, IF, IFERROR, IFNA, IFS, INDEX, INDIRECT, INT, IPMT, ISBLANK, ISERROR, ISNUMBER, ISTEXT, LEFT, LEN, LET, LN, LOWER, MATCH, MAX, MID, MOD, MONTH, NA, NOT, NOW, OFFSET, OR, PI, PMT, POWER, PPMT, PRODUCT, RIGHT, ROUND, ROUNDUP, ROW, ROWS, SQRT, SUBSTITUTE, SUBTOTAL, SUM, SUMIF, SUMIFS, SUMPRODUCT, TEXT, TEXTJOIN, TODAY, TRIM, TRUE/FALSE, UPPER, VALUE, VLOOKUP, WEEKDAY, XLOOKUP, YEAR,
Regarding the 2nd part of your question, I quote from the LLM: Complex scalar formulas with deep, cross-sheet, and indirect dependencies are fully evaluated with cycle safety; range/array inputs compose inside aggregations, but dynamic-array spilling is not implemented — multi-cell results surface as #VALUE! instead of spilling.
That’s actually quite impressive. Supporting functions like XLOOKUP, FILTER, INDIRECT, and LET is already a pretty capable calculation engine. Thanks for sharing the details!
I actually searched the web for popular functions to implement; I don't personally use all of them. If you have any other functions in mind, tell me to implement them also.