Excel to HTML Converter
Turn worksheet data into clean HTML table markup. Copy the table for docs, CMS pages, email drafts, or lightweight reports.
Drop your file here or click to upload
Supports .xlsx, .xls, .xlsm, .xlsb · up to 50MB · or paste a file from your clipboard
How to Convert Excel to HTML
- Upload your workbook - .xlsx, .xls, .xlsm and .xlsb are all read.
- Select a worksheet - Multi-sheet workbooks get a Sheet dropdown; one sheet is exported at a time.
- Set the two options - Decide whether the first row becomes
<th>cells and whether the sheet name is added as a<caption>. - Copy or download - Copy the markup to the clipboard, or save it as a .html file.
What the exporter writes
The output is deliberately plain: a <table>, an optional <caption> holding the worksheet name, and one <tr> per row with two-space indentation. There are no attributes on any element - no class, no style, no colspan, no inline widths - so the table inherits whatever CSS the page it lands in already has.
<table> <caption>Q1 Sales</caption> <tr><th>Region</th><th>Revenue</th></tr> <tr><td>North</td><td>42000</td></tr> <tr><td>South</td><td>36500</td></tr> </table>
With First row as headers on, row 1 is written with <th> cells and every other row with <td>. Turn it off and every row uses <td>. The preview above the output mirrors that choice, so what you see is what gets copied.
Escaping, and what it protects you from
Five characters are escaped in every cell and in the caption: & becomes &, < and > become < and >, and both quote characters become " and '. That matters because worksheet cells hold arbitrary text: a cell containing <script> markup is published as visible text rather than as running script, and a product name containing < does not silently swallow the rest of the row. Accented and non-Latin characters are left as themselves rather than turned into entities, so the markup stays readable as long as the page it goes into is served as UTF-8.
What the values look like
- Numbers - written as the stored value, with floating-point noise trimmed to twelve significant digits so a subtraction that Excel shows as
57.81is not published as57.809999999999945. - Dates and times - written as their underlying serial numbers. A cell displaying
15/03/2023exports as45000. - Currency and percentages - the number without its format, so
$1,234.50becomes1234.5and15%becomes0.15. - Formulas - the cached result, not the formula text.
- Booleans -
trueandfalse. - Errors -
#N/A,#DIV/0!and the rest export as empty cells.
Edge cases
- Merged cells are flattened. The top-left cell of a merged range keeps the value; the cells it covered export empty. No
colspanorrowspanis generated. - Blank leading rows and columns are kept.The export covers the sheet's used range, so a report that starts at C5 exports with the empty rows and columns in front of it. Delete them in the workbook first if you do not want them in the markup.
- Hidden rows and columns still export. Hiding a column in Excel does not remove it from the data, and this exporter writes the data.
- Cell formatting does not cross. Fonts, fills, borders, alignment, conditional formatting, column widths and images are not represented in the output at all.
- Line breaks inside a cell stay as newline characters in the markup, which HTML collapses to a single space when it renders. Add a
<br>yourself if you need the break to show. - The file is a fragment. The .html download is the table only. Paste it into a page, template or CMS field that already provides the document around it.
When to use a different tool
- You want the table back as a spreadsheet: HTML to Excel.
- You need a format for documentation or a repository: Excel to Markdown or Excel to LaTeX.
- You need the data for code or an API: Excel to JSON or Excel to XML.
- You need the sheet to look like it does in Excel: Excel to PDF or Excel to Image keep the layout; this page keeps the data.
Frequently Asked Questions
Because a date in Excel is a number - 45000 is 15 March 2023 - and the number format that displays it is a display rule, not part of the value. The exporter writes cell values, so a date cell becomes 45000 and a currency cell becomes 1234.5 without its symbol. If the dates matter in the output, add a text column in the workbook first (for example =TEXT(A2,"yyyy-mm-dd")) and export that column instead.
No. Merged ranges are flattened: the top-left cell keeps the value and the cells it covered come out empty. The generated markup uses no colspan, rowspan, style or class attributes at all, so a heavily merged report layout will not look the way it does in Excel.
No. It is the table markup on its own - a table element, an optional caption, and tr/th/td rows. There is no doctype, html, head or charset declaration, so drop it into a page or template that already has those. Opening the bare file straight from disk may render non-ASCII characters wrongly because nothing declares the encoding.
A formula cell exports its last calculated value, which is what Excel stored the last time the workbook was saved - the formula text itself is not written into the table. A cell holding an error such as #N/A or #DIV/0! exports as an empty cell.
No. One sheet is converted at a time, chosen from the Sheet dropdown, and each export is a separate table. Switch sheets and copy or download again for the next one.