Epplus →
EPPlus, he remembered from the documentation, wasn’t just a writer. It maintained a full object model of the spreadsheet in RAM: styles, formulas, comments, hidden rows. Every cell you touched became a ExcelRangeBase object, a tiny ghost in memory. After three years of patches and feature creep, his app was loading the entire source template—all forty-two sheets, all conditional formatting, all pivot caches—just to write a single new column of data.
Processing: 63,000 rows. 24 columns. Formulas that referenced only the current row. No inter-sheet dependencies. Time to generate: 1.2 seconds. Peak memory: 142 MB. epplus
EPPlus, like all great libraries, had taught him a deeper lesson: EPPlus abstracts away the horror of Open XML’s SharedStringTable and CellValue types, but it cannot abstract away memory. The “deep story” isn’t about Excel—it’s about the gap between what we ask computers to hold and what they can actually hold. EPPlus, he remembered from the documentation, wasn’t just
The ExcelPackage.Load() call hung for twelve seconds—an eternity. Then, a NullReferenceException on a cell that should never be empty. Arjun traced it back to line 847: worksheet.Cells["M" + rowIndex].Value = null; After three years of patches and feature creep,