CSV → HTML table
CSV to an HTML table.
Semantic, not a grid of divs.
The first row becomes a real <thead> with scope attributes, so screen readers can read the table as a table.
Quoted commas, embedded line breaks and European semicolon exports are all handled.
Drop a file here.
Or pick one with the button. Or just paste with Ctrl+V. Dozens at a time is fine.
.csv .tsv .txt / 25 MB per file / runs in your browser, nothing uploaded
Other formats: .md .markdown .mdown MD → HTML · .docx .doc DOCX → HTML · .html .htm Google Docs → HTML · .text Text → HTML · .xlsx Excel → table · .pdf docstomd.com
Or paste it here
Output
Output
Indent
Table CSS
Header row
Delimiter
How it works
- 01Drop a .csv or .tsv above, or paste the rows straight into the box. Nothing leaves the tab.
- 02The separator is worked out from the file — comma, semicolon, tab or pipe — and reported above the output. Override it if the guess is wrong.
- 03Choose whether the first row is a header and whether to include the responsive CSS, then copy the HTML or download the file.
What's supported
- Whatever separator the export used, worked out from the file or set by hand
- Quoted fields kept whole; a newline inside a cell becomes a <br> rather than a broken row
- German, French and Spanish exports, where the separator is a semicolon because the comma is the decimal point
- First row as <thead> with <th scope="col">, or no header at all
- A leading byte order mark, dropped so it doesn't end up inside your first <th>
- Short rows padded with empty <td> so every row carries the same cell count
What it won't do
- UTF-8 in and UTF-8 out, which is what the meta charset declares; other encodings may arrive garbled
- 25 MB of text and 100,000 cells in one go
- Cell text is escaped, never reformatted — 007 reaches the <td> as 007
- No sorting, filtering or totals — it converts, it doesn't compute
- No JavaScript in the output, so the table isn't interactive
- Unbalanced quotes defeat any CSV reader, and cells may land under the wrong column
Questions people ask
Because tabular data is what a table element is for. A screen reader announces the dimensions, lets the user move cell by cell, and reads the column header with each cell — none of which a grid of divs provides. Search engines read it as data too. Styling isn't a reason to give that up.
Going the other way?
DocsToMD is this same tool pointed in reverse — Word, PDF, Excel and HTML into Markdown. Same approach, same privacy model, opposite output.