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

  1. 01Drop a .csv or .tsv above, or paste the rows straight into the box. Nothing leaves the tab.
  2. 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.
  3. 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.

docstomd.com