On-device AI — professional-grade, fully private.

Convert Excel to HTML

Excel to HTML tables with headers, merges and ranges

  • XLSX, XLSB, ODS, CSV
  • Merged cells kept
  • Four styling modes

Drop a spreadsheet here

XLSX, XLSM, XLSB, XLS, ODS, FODS, CSV or TSV · up to 25 MB

Result

Your table will appear here

Add a spreadsheet to see it converted straight away.

Conversion settingsEvery option is free. Changes mark the result out of date until you re-apply.
Preset
Preset

A starting point. Change anything afterwards.

Sheets and range
Convert

Which part of the workbook becomes a table.

Structure
Headers
Merged cells
Empty rows and columns

What the table means, not how it looks.

Cell content
Values
Line breaks in a cell
Hyperlinks

What goes inside each cell.

Styling
CSS
Caption

Where the table is going decides this.

Output
Wrap
Format

How the markup is written.

Files and limits

Free converts one workbook at a time, up to 25 MB and 500,000 cells.

Pro converts a batch and returns one ZIP.

No file yet

How to convert Excel to HTML

  1. 1

    Add your spreadsheet

    Drag an XLSX, XLSM, XLSB, XLS, ODS, FODS, CSV or TSV file onto the page, or browse for it. The workbook is read on your device and the table appears straight away with the default settings.

  2. 2

    Pick the sheet and the range

    Choose one sheet or convert every sheet in the workbook. If the data does not start at A1, type an A1 range such as A3:F120 to skip a title block or a totals row.

  3. 3

    Set the table structure

    Turn the first row into a thead of th cells, the first column into row headers, or both. Decide whether merged cells become colspan and rowspan, and whether empty rows and columns are trimmed.

  4. 4

    Choose how it is styled

    Pick a stylesheet block for a web page, inline styles for an email, class names only for a CMS with its own CSS, or no styling at all. Add a table class, id or caption if you need one.

  5. 5

    Copy or download

    Copy the markup to the clipboard, or download it as an HTML file. Change any setting afterwards and the finished result is marked out of date until you re-apply it, so the file always matches the panel beside it.

What this Excel to HTML converter offers

Convert Excel spreadsheets to an HTML table. Turn XLSX/XLS into reusable HTML tables with controls for headers, CSS output, and all-sheet export.

This is a spreadsheet-to-markup tool rather than a screenshot tool. It reads the workbook on your device and writes the table you would have written by hand: td and th elements, colspan and rowspan where the sheet has merges, real anchors where the sheet has links, and nothing else. There are no generated cell ids, no data attributes carrying a second copy of every value, and no wrapper document hidden inside the fragment. On a 20,000-row sheet that difference is 13.2 MB of markup against 3.6 MB.

  • Every common spreadsheet format. XLSX, XLSM, XLSB and legacy XLS, OpenDocument ODS and FODS, plus CSV and TSV. Anything else is refused by name at the file picker with a route to the right tool.
  • Structure you control. Header row, header column, both or neither. Merged cells kept as spans or flattened. Empty rows and columns kept, trimmed from the end, or dropped wherever they occur.
  • A range, not just a sheet. Convert A3:F120 when the data does not start at A1. Merges that cross the boundary are clipped rather than lost.
  • Four ways to style it. A scoped stylesheet, inline styles that survive an email client, class names for a CMS that has its own CSS, or nothing at all.
  • Five output shapes. Compact, two-space, four-space, tab-indented or fully minified — and every one of them produces the same table, only laid out differently.
  • The values you meant. Formatted cell values as Excel displays them, or the underlying raw numbers when the table will be parsed rather than read.
  • Batch as one archive. Pro converts up to 50 workbooks and hands back a single ZIP, with duplicate names numbered instead of overwritten.
  • Nothing is uploaded. The file is opened, converted and delivered on your device, and the preview runs in a sandboxed frame with scripts disabled.

Table structure: headers, merges and empty rows

The structure controls decide what the table means, not just what it looks like. They are the difference between a grid of text and a table a screen reader, a search engine and a spreadsheet importer can all read correctly.

Header rows and header columns

A header row turns the first row into a thead containing th cells with scope="col". A header column turns the first cell of every remaining row into a th with scope="row". You can have either, both, or neither. The scope attribute is what tells assistive technology which cells a header governs, and it costs nothing — most converters omit it entirely.

Merged cells

  • Kept. A merged range becomes a single cell with colspan, rowspan or both, and the cells it covered are not emitted at all. This is what the sheet actually means.
  • Flattened. Every cell is emitted separately and the merge is discarded, leaving the covered cells empty. Use this when the table is going to be parsed by something that does not understand spans.
  • Clipped at a boundary. When a range or an empty-column drop cuts through a merged block, the span shrinks to the part that survives. It is never silently discarded, which is what made the previous version's preview disagree with its download.
  • Never crossing a thead. A rowspan cannot legally span from a thead into the tbody, so a merge in the header row is truncated to the header and the cells below it are emitted as ordinary empty cells. Every row keeps the same width.

Empty rows and columns

Real spreadsheets are full of blank spacer rows and a stray formatted cell far below the data. Keep leaves the sheet exactly as it is. Trim removes empty rows and columns from the end, which is the fix for a sheet whose used range reaches Z1000 for no reason. Drop removes every empty row and column wherever it occurs, and it correctly treats a cell covered by a merge as occupied rather than blank.

Converting part of a sheet with an A1 range

A spreadsheet is rarely just a table. There is a title in A1, a note in the margin, a totals row at the bottom that should not be part of the markup. The range field takes ordinary A1 notation — A3:F120 — and converts only that rectangle.

  • Clamped, not refused. A range that reaches past the end of the data converts the overlap. Guessing at the shape of your own sheet is normal; an error message for it would not help.
  • Reversed ranges work. F50:A1 is read as A1:F50. You plainly meant that rectangle.
  • A single cell is a range. A1 on its own converts one cell, which is occasionally exactly what you want for a snippet.
  • The preview follows it. Large sheets preview their first 200 rows and say so on screen. The downloaded file is never truncated.

Styling: stylesheet, inline, classes or none

There is no single correct answer here, which is why it is a choice rather than a checkbox. Where the table is going decides it.

  • Stylesheet. A style block with borders, a header background, striped rows and hover states. Every selector is qualified by this tool's own class name, so pasting it into a page cannot restyle that page's other tables — the usual failure of a converter that emits bare table { } rules.
  • Inline styles. The same appearance written as a style attribute on every element. Verbose by nature, and the only styling most email clients will not strip.
  • Classes only. Class hooks and no rules at all, for a CMS or design system that already styles tables and only needs something to hang CSS on.
  • None. Markup and nothing else. The shortest output, and the right one for a site whose stylesheet already covers tables.

Column alignment

Numeric columns are right-aligned, as they are in the spreadsheet, because a column of figures reading left-aligned is the first thing that makes a converted table look wrong. In stylesheet mode a uniformly numeric column becomes a single nth-child rule instead of a class on every cell in it — one rule rather than 20,000 attributes, which on a large sheet is two megabytes of difference.

Output formats and where the markup goes

The output controls change how the markup is written, never what it contains. The table means the same thing in all five formats, which is asserted directly: the produced HTML is parsed back into a grid and compared cell by cell against the spreadsheet.

  • Full document. A complete HTML file with a doctype, a charset, a viewport meta and a title. Open it in a browser or hand it to someone who just needs the table to render.
  • Body fragment. The table alone, ready to paste into a page or a post. In stylesheet mode the style block leads the fragment so the styling comes with it.
  • Compact. One line per row. Readable in a diff, and about as short as markup gets while still being legible.
  • Indented. Two spaces, four spaces or a tab, one element per line. Cell contents are never broken across lines, because that would insert whitespace into the cell and change what the table renders.
  • Minified. No whitespace between tags at all, for the smallest possible payload.

Class, id and caption

Add a class to the table for your framework (table table-striped, prose-table, whatever your CSS expects), an id for JavaScript to find it by, and a caption taken from the sheet name or typed yourself. All three are restricted to characters that are legal in a CSS identifier, so a value that could never have worked visibly loses those characters rather than being silently escaped into nonsense.

Supported spreadsheet formats

The accepted list is closed and it is enforced at the file picker, not at conversion time. A file this tool cannot open is refused the moment you choose it, with what it is, what the tool takes, and where to go instead — never a spinner that fails a minute later, and never a silent nothing.

Accepted

  • XLSX and XLSM. Excel 2007 and later, including macro-enabled workbooks. The macros are ignored; the data is not.
  • XLSB. Excel's binary workbook format, which is common for very large files.
  • XLS. Legacy Excel 97-2003, including the XML Spreadsheet variants that Excel has also shipped under that extension.
  • ODS and FODS. OpenDocument spreadsheets from LibreOffice, OpenOffice and Google Sheets exports.
  • CSV and TSV. A delimited file is a one-sheet workbook, and it converts to a table exactly the same way. UTF-8 is assumed, which is what stops an accented character arriving as mojibake.

Refused, and what to do instead

  • Apple Numbers. Export as XLSX from Numbers first. The format cannot be reproduced in a test fixture, so it is not claimed as supported rather than being half-supported.
  • Word documents. DOC, DOCX and RTF go to the Word to HTML converter, which is linked from the refusal.
  • PowerPoint and PDF. Neither is a spreadsheet. Both are named specifically rather than lumped into an unsupported-file message.
  • Password-protected workbooks. Remove the password in Excel and convert the unprotected copy. An encrypted file is identified as encrypted rather than reported as corrupt.
  • A file whose extension lies. An image or a PDF renamed to .xlsx is caught by its first bytes before anything tries to parse it.

Why convert Excel to HTML?

A spreadsheet is a poor way to publish data. It needs an application to open, it does not render in a browser tab, it is invisible to search engines, and it is unreadable on a phone. An HTML table is none of those things: it renders everywhere, it can be styled to match the page around it, its contents are indexable text, and a screen reader can navigate it by row and column headers.

  • Publishing data on a page. Price lists, specification tables, schedules and results all live in a spreadsheet and belong on a web page. This is the step between them.
  • Email that renders. A table pasted from Excel into a mail client arrives as an unpredictable mess of proprietary markup. Inline-styled HTML arrives as the table.
  • Documentation and wikis. Most documentation systems accept raw HTML in a block, and a fragment with class hooks drops into a template without fighting it.
  • A step in a pipeline. Raw values, no styling, minified output is a compact intermediate format that anything can parse.
  • Accessibility. A proper thead with scope attributes is the difference between a table a screen reader can read out sensibly and a grid of disconnected values.

How the conversion stays on your device

Every step happens on your own device. There is no upload, no queue on a server and no temporary copy anywhere — which matters here more than on most tools, because the files people convert are budgets, salary tables, customer lists and price lists.

  • Read on your device. The workbook is opened off the main thread, so the page stays responsive even on a large file, and the bytes never travel.
  • Escaped, always. Cell contents become text and attribute values through one escaping path, so a value containing a quote or an angle bracket can never turn into markup. That is a structural property of how the output is built, not a filter applied afterwards.
  • Previewed in a sandbox. The generated table renders inside a frame with scripts disabled and no access to the page around it, so a workbook that arrived by email is inert.
  • Links checked. A hyperlink in a cell is carried across only if its target is a scheme a spreadsheet link can legitimately use. Anything else becomes plain text.
  • Nothing retained. Closing the tab is all the cleanup there is. Removing a file from the queue frees it immediately.

The workbook is read and converted off the main thread, so the page keeps responding while it works. A 240,000-cell sheet converts in well under a second on a desktop machine.

Free and Pro

Free is not a demonstration version. Every formatting control on this page — all four header modes, all four styling modes, all five output formats, merges, ranges, captions, class and id — is free, and produces exactly the same markup a Pro user gets. What Pro buys is scale.

  • Free. One workbook at a time, up to 25 MB and 500,000 cells. Enough for the great majority of real business spreadsheets.
  • Pro. Up to 50 workbooks in one batch, delivered as a single ZIP, with no cell ceiling — the limit is what your device can handle.
  • Why cells and not rows. A three-column sheet with 200,000 rows and a 200-column sheet with 3,000 rows are the same amount of work. Counting cells is the honest measure; counting rows would refuse one and wave the other through.
  • The cap is explained, never bare. A refused file tells you its actual size or cell count, the limit, and the one thing that fixes it — with a link to the splitter, which is the free way to convert a workbook that is too large.

Frequently asked questions

How does the Excel to HTML converter work?

Add an XLSX, XLSM, XLSB, XLS, ODS, FODS, CSV or TSV file and the workbook is opened on your device. Each cell is read into a table model that keeps the displayed value, the underlying value, the alignment and any hyperlink, and that model is turned into HTML using the options you choose. It all runs on your device, not our servers.

What HTML markup does it produce?

A plain semantic table. Cells are td elements; when you ask for a header row they become th elements with scope=col inside a thead, and a header column gives th with scope=row. Merged ranges become colspan and rowspan attributes. There are no framework attributes, no generated ids and no data attributes on the cells, so the markup is short enough to read and to paste anywhere.

Are merged cells supported?

Yes. A merged range becomes one cell carrying colspan, rowspan or both, and the cells it covers are not emitted. Merges are also clipped correctly when you convert only part of the sheet: a range that cuts through a merged block shrinks the span to fit rather than dropping it, so the table you see always has the same shape as the file you download.

Can I convert only part of a sheet?

Type an A1 range like A3:F120 in the range field. It is the answer to the most common problem with real spreadsheets, where the data is not the whole sheet: a title block above it, notes to the side, a totals row below. A range that reaches past the end of the data is clamped to what exists rather than refused, and a reversed range such as F50:A1 is read as the rectangle you obviously meant.

Which styling mode should I pick?

Stylesheet for a web page: a style block scoped to this tool's own class names, so it cannot restyle other tables on the page. Inline styles for email, because most mail clients strip a style block and inline is the only thing that survives. Classes only when your CMS or design system already styles tables and you just need hooks. None when you want nothing but the structure.

Does it keep number formats, dates and currency?

Yes, if you want it to. Formatted values give you exactly what Excel displays, so a cell holding 0.5 with a percentage format converts as 50.00% and a date serial converts as the date. Switch to raw values when you want the underlying numbers instead, which is what you need if the table is going to be parsed rather than read.

Which spreadsheet formats can I convert?

XLSX and XLSM from Excel 2007 onward, the binary XLSB format, legacy XLS from Excel 97-2003, OpenDocument ODS and FODS from LibreOffice and Google Sheets, and CSV and TSV. Anything else is refused by name at the moment you pick it, with the one action that fixes it, rather than being accepted and failing later.

How large a workbook can I convert?

Free converts one workbook at a time, up to 25 MB and 500,000 cells, which covers the great majority of real business spreadsheets. Pro removes the count and the cell ceiling and is limited only by what your device can handle. The reading and the conversion both happen off the main thread, so the page stays responsive while a large workbook is processed.

Can I convert several workbooks at once?

Pro converts up to 50 files in one go and delivers them as a single ZIP rather than 50 separate download prompts. Each file keeps its own name, duplicate names are numbered rather than overwritten, and unusual characters in a name are made safe before they become archive entries.

Is my spreadsheet data private?

It all runs on your device, not our servers. There is no upload, no server-side conversion and no copy kept anywhere. The preview is rendered inside a sandboxed frame with scripts disabled, so a workbook that arrived by email cannot run anything in the page, and the markup that is produced is escaped so that cell contents can never become attributes or tags.

4.8out of 5

from 165 ratings

Rate this tool

Tap a star — it takes a second