Browser-native file tools

Convert XLS to XLSX

Drop an old .xls file below — get a modern .xlsx with the same sheets, formulas, and formatting. Runs in your browser, no upload.

Drop your .xls file here

.xls only — files stay on your device

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.

  1. Drop the .xls file onto the dropzone (or click to browse).
  2. Review the summary — sheet count, sheet names, file size before/after.
  3. Click Download as .xlsx. The file is saved with the same base name (Q3_report.xls becomes Q3_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.

XLSXLSX
FormatBinary (BIFF8)Zipped XML (OOXML)
Row limit65,5361,048,576
Column limit25616,384
MacrosYesNo (use .xlsm)
File sizeLargerUsually 50–80% smaller
Modern tool supportPatchyUniversal

Excel built-in: Save As

If you already have Excel installed, the built-in path works fine for one or two files:

  1. File → Open and pick your .xls file. Excel opens it in Compatibility Mode (you’ll see “[Compatibility Mode]” in the title bar).
  2. File → Save As (or press F12).
  3. In the Save as type dropdown, pick Excel Workbook (*.xlsx).
  4. Click Save. Excel may show a dialog warning about features being upgraded — accept it.
  5. Close the file. The original .xls is 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

FeaturePreserved?Notes
Cell valuesYesNumbers, text, dates, booleans all carry over.
FormulasYesStandard formulas (SUM, VLOOKUP, IF, INDEX/MATCH, etc.) survive.
Cached formula resultsYesThe file shows correct values even before Excel recalculates.
Number formatsYesCurrency, dates, percentages, custom formats.
Cell stylingYesFonts, colors, borders, fills, alignment.
Conditional formattingUsuallyModern rules carry over; some legacy color-scale variants may differ.
ChartsMostlyStandard chart types (bar, line, pie, scatter) translate. Rare legacy chart types may need re-creation.
Pivot tablesStructure yesYou may need to refresh the pivot once after opening.
Named rangesYesBoth workbook-scoped and sheet-scoped names.
Data validationYesDropdowns, range checks, etc.
Macros (VBA)No.xlsx cannot contain macros by design. Save as .xlsm in Excel if you need them.
ActiveX controlsNoTied to the binary format and macros.
Print settingsYesPage 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

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.