Guide · CSV → table
CSV to an HTML table, including the big ones
A CSV is a text file with a punctuation convention, and there are several conventions. Most conversion problems are really disagreements about which one a file is using.
This covers how the delimiter gets picked, what quoting does, and where the size limits actually sit.
The delimiter is detected, not assumed
Commas, semicolons, tabs and pipes are all in use. Semicolons especially: export a spreadsheet in a locale where the comma is the decimal separator and you'll get semicolons, because commas are already taken.
Detection reads the first ten rows, tries each candidate, and picks the one that gives a consistent column count. A file whose first rows are unusual — a title line above the header, say — can be misread, so the detected delimiter is stated in the output. If it's wrong, override it.
- 01Drop the file and look at the note above the table saying which delimiter was used.
- 02If the table has one column when it should have six, set the delimiter by hand from the dropdown.
- 03Check the first row landed in the header. If the file has no header, switch that off and every row becomes a body row.
Quoted fields, and the comma inside a cell
A field wrapped in double quotes can contain the delimiter, and a doubled quote inside it means a literal quote character. That's RFC 4180 and it's handled properly.
A quoted field can also contain a newline. In the HTML those become <br> inside the cell, so a two-line address stays on two lines instead of breaking the row apart.
name,note
Bolt,"M6, 40mm"
<tr>
<td>Bolt</td>
<td>M6, 40mm</td>
</tr>The one-column file warning
A single-column CSV reports a delimiter problem. It's worth explaining because the file is usually fine.
Detection works by finding which character splits rows consistently. With one column there's nothing to split on, so nothing looks like a delimiter and it says so. The output is still correct: one column, every row present.
If you'd rather not see it, set the delimiter explicitly instead of leaving it on automatic.
What "large" means here
Two separate ceilings. 25 MB per file, and 100,000 cells — that's rows times columns, so a six-column file gets you to about 16,000 rows and a hundred-column file stops at around a thousand.
The cell limit is the one you'll hit first, and it's about the browser rather than the parser. Every cell becomes DOM nodes in the preview, and a table of a few hundred thousand cells will lock up the tab. Refusing is better than freezing.
For something genuinely bigger, split it by rows and convert each piece — the header row can be repeated in each one. Empty rows are dropped automatically, including rows that are nothing but delimiters, which is what a trailing block of ",,," usually is.
What the table looks like
The header row becomes a <thead> with <th scope="col"> cells; everything else goes in <tbody>. Ragged rows are padded out to the widest row so the table stays rectangular, and the output says how many rows needed it — usually a sign something upstream is broken.
Nothing is type-converted. 007 stays 007, and a value like 1-2 doesn't turn into a date. Excel does that to you; this doesn't.
With the responsive option on, the table is wrapped in a <div class="table-wrap"> that scrolls sideways. A twelve-column table can't fit on a phone, and letting it overflow stretches the whole page instead of just itself.
Drop the CSV or paste the rows straight in. Files are parsed in your browser, so client data never leaves the machine.
CSV → table