Shipping a converter nobody asked for
The problem
A client sent a 40-sheet workbook and needed it as clean JSON by Friday. Manual copy-paste was going to take two days; a script took an evening.
Every tool is a deadline wearing a trench coat.
Core loop:
for (const sheet of workbook) {
emit(parse(sheet));
}
The interesting part was not the parsing — it was deciding what not to support. Merged cells: yes. Formulas: evaluated, not preserved. Charts: ignored entirely.
What it taught me
Scope is a feature. The converter does one transformation well and refuses everything else, which is why it still works three years later.
Edited via the live editor to verify the save path.