>As a consequence, each template could handle only about 65,000 rows of data
Oh? Like 65,535 or so? That seemed weird a first that even as old as xls is that only 16bits were allocated to max rows.
But then maybe not. Each row might get an ID, so that's 16bits * rows you have. I wonder if when XLS was designed they considered it very unlikely many people would have 500MB of db of empty rows and then would needed more data added to each one?
Simplified of course, I bet even original format had some explicit row identifier that could be shortened with optimizations and increment tags.