How to convert XLS to XLSX
The fastest way: drop your old .xls file into the converter at the top of this page, then click Download as .xlsx. The conversion runs entirely in your browser using SheetJS — no upload, no signup.
- Drop the .xls file onto the dropzone (or click to browse).
- Review the summary — sheet count, sheet names, file size before/after.
- Click Download as .xlsx. The file is saved with the same base name (
Q3_report.xlsbecomesQ3_report.xlsx).
If you have Excel installed, you can also do this from the desktop app — see “Excel built-in: Save As” below. For dozens or hundreds of files, see the batch section.
What’s the difference between XLS and XLSX?
They’re two completely different file formats wearing similar names.
- XLS is the legacy BIFF (Binary Interchange File Format) used by Excel 97–2003. It’s a single binary blob. Maximum 65,536 rows × 256 columns per sheet. Limited to 4,000 cell formats. The format is over 25 years old and Microsoft has dropped support in several newer products.
- XLSX is the modern Office Open XML (OOXML) format introduced with Excel 2007 — it’s a ZIP archive containing XML files. Maximum 1,048,576 rows × 16,384 columns per sheet. Supports unlimited formats, modern features (sparklines, slicers, dynamic arrays), and is an ECMA-376 / ISO standard.
You can rename an .xlsx to .zip and unzip it — you’ll see the XML guts. Try it once, it’s enlightening.
| XLS | XLSX | |
|---|---|---|
| Format | Binary (BIFF8) | Zipped XML (OOXML) |
| Row limit | 65,536 | 1,048,576 |
| Column limit | 256 | 16,384 |
| Macros | Yes | No (use .xlsm) |
| File size | Larger | Usually 50–80% smaller |
| Modern tool support | Patchy | Universal |
Excel built-in: Save As
If you already have Excel installed, the built-in path works fine for one or two files:
- File → Open and pick your
.xlsfile. Excel opens it in Compatibility Mode (you’ll see “[Compatibility Mode]” in the title bar). - File → Save As (or press
F12). - In the Save as type dropdown, pick Excel Workbook (*.xlsx).
- Click Save. Excel may show a dialog warning about features being upgraded — accept it.
- Close the file. The original
.xlsis left untouched alongside the new.xlsx.
On Mac the menus are the same: File → Save As → File Format: Excel Workbook (.xlsx) → Save.
The browser-based converter on this page does the equivalent without needing Excel installed.
Batch converting XLS files
If you have a folder of .xls files to upgrade, automate it.
PowerShell + Excel.Application (Windows, requires Excel)
This drives Excel itself, so all features (charts, pivots, macros — though macros are stripped on the .xlsx save) are handled exactly as Excel would handle them.
$folder = "C:\OldFiles"
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false
# 51 = xlOpenXMLWorkbook (.xlsx)
Get-ChildItem -Path $folder -Filter *.xls | ForEach-Object {
$wb = $excel.Workbooks.Open($_.FullName)
$newPath = [System.IO.Path]::ChangeExtension($_.FullName, ".xlsx")
$wb.SaveAs($newPath, 51)
$wb.Close($false)
Write-Host "Converted: $($_.Name)"
}
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
The magic number 51 is XlFileFormat.xlOpenXMLWorkbook. If your files contain macros, use 52 (xlOpenXMLWorkbookMacroEnabled) and a .xlsm extension instead.
Python with pandas (cross-platform, no Excel needed)
For data-only workbooks (no charts, no formulas you need to preserve), pandas is the simplest path:
import pandas as pd
from pathlib import Path
for xls in Path("./old_files").glob("*.xls"):
sheets = pd.read_excel(xls, sheet_name=None) # dict of sheet_name -> DataFrame
out = xls.with_suffix(".xlsx")
with pd.ExcelWriter(out, engine="openpyxl") as writer:
for name, df in sheets.items():
df.to_excel(writer, sheet_name=name, index=False)
This strips formulas, charts, and formatting — pandas only sees values. Use the PowerShell approach if you need fidelity.
Python with win32com (Windows, requires Excel, full fidelity)
Same idea as the PowerShell script but in Python:
import win32com.client
from pathlib import Path
excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = False
excel.DisplayAlerts = False
for xls in Path(r"C:\OldFiles").glob("*.xls"):
wb = excel.Workbooks.Open(str(xls.resolve()))
wb.SaveAs(str(xls.with_suffix(".xlsx").resolve()), FileFormat=51)
wb.Close(SaveChanges=False)
excel.Quit()
What gets preserved vs lost
| Feature | Preserved? | Notes |
|---|---|---|
| Cell values | Yes | Numbers, text, dates, booleans all carry over. |
| Formulas | Yes | Standard formulas (SUM, VLOOKUP, IF, INDEX/MATCH, etc.) survive. |
| Cached formula results | Yes | The file shows correct values even before Excel recalculates. |
| Number formats | Yes | Currency, dates, percentages, custom formats. |
| Cell styling | Yes | Fonts, colors, borders, fills, alignment. |
| Conditional formatting | Usually | Modern rules carry over; some legacy color-scale variants may differ. |
| Charts | Mostly | Standard chart types (bar, line, pie, scatter) translate. Rare legacy chart types may need re-creation. |
| Pivot tables | Structure yes | You may need to refresh the pivot once after opening. |
| Named ranges | Yes | Both workbook-scoped and sheet-scoped names. |
| Data validation | Yes | Dropdowns, range checks, etc. |
| Macros (VBA) | No | .xlsx cannot contain macros by design. Save as .xlsm in Excel if you need them. |
| ActiveX controls | No | Tied to the binary format and macros. |
| Print settings | Yes | Page setup, headers/footers, print areas. |
The key thing to remember: macros need .xlsm, not .xlsx. This is intentional — .xlsx was designed as a “data-only” safe format, which is why most enterprise email filters allow .xlsx attachments but block .xlsm.
When to keep XLS instead
There are a few cases where you genuinely need to stay on .xls:
- Legacy ERP / accounting integrations that only ingest .xls. Some older SAP, Oracle, Sage, or QuickBooks export pipelines accept only the binary format.
- Ancient internal tools that use BIFF-only libraries (e.g., very old Java apps using JExcelApi rather than Apache POI’s XSSF).
- Recipients on Office 2003 or earlier without the Compatibility Pack installed. Vanishingly rare in 2026, but it happens.
In those cases, keep the .xls original and only convert when sharing externally or migrating off the legacy system.
Privacy: nothing is uploaded
The XLS-to-XLSX conversion runs entirely in your browser using SheetJS. The binary is parsed in JavaScript, rewritten as Office Open XML, and handed back as a Blob — no file ever reaches a server. Verify in DevTools → Network: drop a file, confirm zero requests fire. Useful when the spreadsheet contains payroll, customer records, financials, or anything internal.
After converting, you can view the data, convert it to PDF, or build new .xlsx files from CSV.
Related tools
Convert any CSV file to a real .xlsx Excel workbook in seconds. Free, no signup, files never leave your browser.
Turn any .xlsx or .xls Excel file into a clean CSV. Pick the sheet, pick the delimiter, download. No upload.
Convert any Excel workbook (.xlsx or .xls) to a printable PDF in seconds. Pick the sheet, pick orientation, download. 100% private.
Convert any CSV file to a clean PDF table in seconds. Free, no signup, files never leave your browser.
Frequently asked questions
- Why upgrade .xls to .xlsx?
.xlsx is the modern Office Open XML format used by every version of Excel since 2007. It supports over a million rows per sheet (vs ~65,000 in .xls), produces smaller files, is supported by every modern tool (Google Sheets, Numbers, LibreOffice, Python, Node), and is required by many systems that have dropped legacy .xls support.
- Are formulas preserved?
Yes. Standard Excel formulas (SUM, VLOOKUP, IF, INDEX/MATCH, etc.) carry over because they're written into the .xlsx file as text and recalculated when opened. Cached values are also preserved so the file shows correct results even before recalculation.
- Are macros preserved?
No — macros are intentionally stripped. Macros (VBA code) live in a different modern format called .xlsm. .xlsx files cannot contain macros by design (security feature). If you need to keep macros, save as .xlsm in Excel instead. See the article below for details.
- Will the .xlsx file be smaller?
Usually yes. .xlsx files are zipped XML, so text-heavy sheets compress dramatically — often 50–80% smaller than the original .xls. Sheets full of binary number data may stay roughly the same size.
- Can I batch convert many .xls files at once?
This tool converts one file at a time in the browser. For batch conversion, use Excel's File → Open All or the PowerShell / Python scripts in the article below — they automate Excel itself or use the openpyxl / pandas libraries.
- Are charts and conditional formatting kept?
Charts: usually preserved with this converter, though some legacy .xls chart types may render differently. Conditional formatting: typically preserved. Cell formatting (fonts, colors, borders, number formats): preserved. Pivot tables: structure is preserved but you may need to refresh data after opening.
- Is anything uploaded?
No. The conversion runs entirely in your browser using SheetJS. Your file is never sent to a server — verify in DevTools → Network. Useful when the .xls contains payroll, customer data, or anything internal.
- What if my file is actually .xlsx with the wrong extension?
If you drop an .xlsx file, the tool detects it and tells you no conversion is needed. If the file is .xls but contains SYLK or HTML data (Excel sometimes saved old exports this way), the converter will surface an error and you'll need to open and re-save in Excel first.