I faced a comparable challenge. A bespoke Sax reader that can extract all rows from the first sheet was created by me after integrating a number of relevant SO replies.
Please let me know how my xlsx-sax-exporter github project works for you by taking a look at it.
The reader opens the worksheet very quickly and determines its dimensions by using the SheetDimensions reference while building.
After examining the workbook's cell and numbering formats, it may additionally format numbers and dates. Even the normal numbering format scenarios are attempted to be covered.
Because I wanted to allow pulling paged results from the server and because it works best when all pages are retrieved sequentially, the reader uses paging. Sax streaming makes it blazingly fast as predicted, and memory utilisation is maintained to a minimum. Benchmarking this, it never uses more than 10 MB while avoiding holding rows in memory (release build).
If you have a change you'd like to suggest, feel free to fork and send a pull request. You can also just post an issue, and I'll attempt to fix it when I have time.