Open or paste a CSV file and get a <table> with a <thead> of <th scope="col"> headings and one <tr> per row, or a complete HTML page you can open directly. Every value is HTML-escaped, so <script> or & in your data shows as text and never becomes markup. The file is converted in your browser and never uploaded.
How to convert CSV to HTML
- Select Open file, drop a
.csv,.tsvor.txtfile on the tool, or choose Paste. Adjust the delimiter or encoding under Import settings if the columns look wrong. - Under Output, choose Table only to paste the markup into an existing page or CMS, or Complete HTML page for a standalone file.
- Add a Caption (optional), decide on styling and line breaks, then select Copy or Download HTML.
For a README or wiki, a Markdown table is usually easier to edit; for a printable file, use CSV to PDF.
HTML table options
| Table only | The default. Just the <table> element, ready to paste into a page, an email template or a CMS HTML block. |
|---|---|
| Complete HTML page | Adds <!doctype html>, <html lang="en">, <meta charset="utf-8"> and a <title> (the caption, or Table without one), so the file opens correctly in any browser. |
| Caption (optional) | Writes a <caption> as the table’s first child: the accessible name screen readers announce for the table. |
| Add simple styling | On by default. On a complete page it embeds a small stylesheet: borders, a shaded header row and right-aligned numbers. With Table only it adds class="csv-table" to the table and class="num" to number cells instead, so your own CSS decides the look. |
| Show line breaks inside cells | On by default. A line break inside a value becomes <br>. Off, the break stays in the source, where browsers display it as a space. |
Escaping, text direction and numbers
&,<,>,"and'are written as&,<,>,"and'in every cell, header and caption. Tags in your data appear as text, which also means existing HTML in the CSV is not rendered.- Each cell has
dir="auto", so Arabic or Hebrew values display right-to-left even inside a left-to-right page. - A column counts as numeric only if every non-empty value is a plain number; an ID column such as
0042is left as text and not right-aligned. Values themselves are never reformatted. - Quoted commas, quotes and line breaks are read per RFC 4180. A blank header becomes
Column 3and a repeated onename (2). - The output is UTF-8. A complete page declares it with
<meta charset="utf-8">; when you paste Table only into another page, that page must be UTF-8 too.
When the HTML table looks wrong
- Accented letters look like é in the source file. The CSV is not UTF-8. Choose its encoding (often Windows-1252 for older Excel exports) under Import settings and open it again.
- Tags from my data show as text. The HTML in your cells was escaped on purpose so it cannot run as markup. Edit the result if you trust the content and want it rendered.
- The pasted table has no borders. Table only adds class names (with styling on), not CSS. Style
.csv-tableandtd.numin your site’s stylesheet, or choose Complete HTML page to get the built-in styles. - One column holds every value. The delimiter was guessed wrong; set it under Import settings.
Limits and privacy
Files up to 25 MB, 100,000 rows or 2 million cells open with a live preview of the first 200 rows. Larger files are converted in streaming mode: the file is read twice in chunks (once to measure the columns and which ones are numeric, once to write), a notice says the download covers the whole file, and Copy is not offered. A single output file is capped at 4 GB.
The conversion runs in a background worker in this tab, so the page stays responsive and Cancel stops it. The CSV is never sent to a server.
Example: an order list with HTML-sensitive characters
An order list with an ampersand, an apostrophe, quotes and HTML inside a two-line comment, converted with the default settings (Table only, styled, line breaks shown). qty is all numbers, so its cells get class="num".
id,product,qty,comment 0042,Fish & Chips,2,"<b>Extra</b> vinegar no salt" 0043,"O'Brien's ""Stout""",12,
<table class="csv-table">
<thead>
<tr>
<th scope="col">id</th>
<th scope="col">product</th>
<th scope="col">qty</th>
<th scope="col">comment</th>
</tr>
</thead>
<tbody>
<tr>
<td dir="auto">0042</td>
<td dir="auto">Fish & Chips</td>
<td class="num" dir="auto">2</td>
<td dir="auto"><b>Extra</b> vinegar<br>no salt</td>
</tr>
<tr>
<td dir="auto">0043</td>
<td dir="auto">O'Brien's "Stout"</td>
<td class="num" dir="auto">12</td>
<td dir="auto"></td>
</tr>
</tbody>
</table>Questions and answers
Is it safe to paste the output into my website?
The data cannot inject markup: every value, header and the caption is HTML-escaped, and no value is ever placed in an attribute. The only tags in the output are the table elements the converter writes itself.
Why does the page say lang="en"?
A complete page takes its language tag from the language of the site you are using. Change the lang attribute after downloading if your data is in another language.
Can I sort or filter the HTML table?
The output is a static table without scripts. Sort or filter the data first with Sort CSV rows or Filter CSV, then convert it.