Excel to Code
excel_to_c - roughly translate some Excel files into C.
excel_to_ruby - roughly translate some Excel files into Ruby.
This allows spreadsheets to be:
- Embedded in other programs, such as web servers, or optimisers
- Without depending on any Microsoft code
For example, running these commands turns this spreadsheet into this Ruby code or this C code.
Install
Requires Ruby. Install by:
gem install excel_to_code
Run
To just have a go:
excel_to_c <excel_file_name>
This will produce a file called excelspreadsheet.c
For a more complex spreadsheet:
excel_to_c --compile --run-tests --settable <name of input worksheet> --prune-except <name of output worksheet> <excel file name>
See the full list of options:
excel_to_c --help
Gotchas, limitations and bugs
- No custom functions, no macros for generating results
- Results are cached. So you must call reset(), then set values, then read values.
- It must be possible to replace INDIRECT and OFFSET formula with standard references at compile time (e.g., INDIRECT("A"&"1") is fine, INDIRECT(userInput&"3") is not.
- Doesn't implement all functions. See which functions are implemented.
- Doesn't implement references that involve range unions and lists (but does implement standard ranges)
- Sometimes gives cells as being empty, when excel would give the cell as having a numeric value of zero
- The generated C version does not multithread and will give bad results if you try.
- The generated code uses floating point, rather than fully precise arithmetic, so results can differ slightly.
- The generated code uses the sprintf approach to rounding (even-odd) rather than excel's 0.5 rounds away from zero.
- Ranges like this: Sheet1!A10:Sheet1!B20 and 3D ranges don't work.
Report bugs: https://github.com/tamc/excel_to_code/issues
Changelog
See Changes.
License
See License
Hacking
Source code: https://github.com/tamc/excel_to_code
Documentation:
- Installing from source
- Structure of this project
- How does the calculation work
- How to fix parsing errors
- How to implement a new Excel function
Some notes on how Excel works under the hood: