FormatDrop
Document Format Comparison

XLS vs XLSX: Legacy vs Modern Excel Format

XLS is Excel's legacy binary format from 1987, used through Office 2003. XLSX replaced it in Excel 2007 as part of the shift to Office Open XML — the same standard that brought DOCX (Word) and PPTX (PowerPoint). XLSX files are ZIP archives of XML, making them smaller, more corruption-resistant, and readable by any XML-aware tool. The most significant practical difference: XLS supports only 65,536 rows, while XLSX supports over a million — critical for large datasets.

XLSvsXLSX

Quick Verdict

Use XLS when…

Use XLS only when you must support Excel 97–2003 or a legacy system that explicitly requires the binary XLS format. Otherwise, always use XLSX.

Use XLSX when…

Use XLSX for all new spreadsheets — smaller files, more rows/columns, better feature support, lower corruption risk, and compatibility with every modern application.

XLS vs XLSX: Feature Comparison

FeatureXLSXLSX
Introduced1987 (Excel 2.0 binary format)2007 (Office Open XML)
File structureBinary (BIFF8)ZIP of XML files
Max rows65,5361,048,576 (16× more)
Max columns25616,384
File sizeLargerSmaller (XML compresses well)
Corruption riskHigherLower (XML is recoverable)
Macro supportYes (VBA embedded)Disabled (use .xlsm for macros)
Google SheetsImport onlyFull import/export

When XLS wins

  • Introduced: 1987 (Excel 2.0 binary format)
  • File structure: Binary (BIFF8)
  • Max rows: 65,536

When XLSX wins

  • Introduced: 2007 (Office Open XML)
  • File structure: ZIP of XML files
  • Max rows: 1,048,576 (16× more)

Frequently asked questions

Can Excel 2003 open XLSX files?
Not natively. The free Microsoft Office Compatibility Pack allows Excel 2003 to open .xlsx files with some limitations. For true compatibility with Excel 2003, save as .xls from a modern Excel. However, you'll lose access to features and the extra rows/columns.
Do Python/pandas prefer XLS or XLSX?
Python's pandas supports both via openpyxl (XLSX) and xlrd (XLS). XLSX is preferred for new files — openpyxl is actively maintained while xlrd dropped XLSX support and xlwt (for writing XLS) is deprecated. Use pd.read_excel('file.xlsx') with openpyxl for modern workflows.