sheetLimit=1000 (header included), 2500 data rows sheet 1 "Sales": last row index 999, first data cell 1 sheet 2 "Sales 2": last row index 999, first data cell 1000 sheet 3 "Sales 3": last row index 502, first data cell 1999 XSSF and SXSSF files: same sheets, same formatted cell values on every 97th row styling of a 5,000-row SXSSF file, read back with XSSF header cell A1 text=Order id bold=true freeze pane: row split at 1 auto filter: A1:I1 cell styles in the workbook: 5 (for 5,000 rows x 9 cells) B2 as Excel shows it: 30-May-2025 amount number format: [>=10000000]##\,##\,##\,##0.00;[>=100000]##\,##\,##0.00;##,##0.00 the sheet limit createRow(1048575) ok createRow(1048576) -> IllegalArgumentException: Invalid row number (1048576) outside allowable range (0..1048575) lakh/crore number format, rendered by POI's DataFormatter (not by Excel) 999.50 -> 999.50 99,999.50 -> 99,999.50 123,456.78 -> 1,23,456.78 1,234,567.89 -> 12,34,567.89 12,345,678.90 -> 1,23,45,678.90 123,456,789.10 -> 12,34,56,789.10