HTML table generator
Paste from a spreadsheet or a CSV and get accessible HTML table markup. Runs in this browser.
1 · Your data
The delimiter is detected automatically.
2 · Options
A table with no accessible name is an unlabelled region.
3 · Markup
4 · Preview
Built from the parsed cells, not by inserting the generated HTML, so a cell containing markup is shown as text here exactly as it will be in the output.
Every cell is escaped, so a value containing <script> or a quotation
mark comes out as visible text rather than markup. Header cells use
scope so a screen reader can announce which column a value belongs to,
which a bold <td> cannot.
Paste from anywhere
Copy a range out of Excel, Google Sheets or Numbers and paste it straight in. A spreadsheet paste is tab-separated, and the delimiter is detected rather than assumed, so commas inside your data do not split a column in half.
Real CSV parsing
Quoted fields are handled properly: a comma inside quotes is data, a doubled quote is a literal quote, and a line break inside quotes does not start a new row. Splitting on commas breaks on the first address or sentence in the data, which is why this does not do that.
Why the output is accessible
Generated tables usually miss the parts that make them usable without sight, so this adds them by default:
- Header cells are
<th scope="col">, so a screen reader can announce which column a value belongs to. A bold<td>is not a header to anybody who cannot see the bold. - An optional caption names the table, so it is not an unlabelled region.
- Row headers get
scope="row"when you ask for them.
None of it costs anything and all of it is usually absent.
Every cell is escaped
A cell containing <script> or a stray quotation mark comes out as visible text, not as markup. This tool produces HTML, which makes it exactly the kind of tool where an injection is easy to introduce by accident.
Example
Two columns headed Name and Age, with one row of Ann and 30, produce a table with a thead, two th scope="col" cells and a tbody row.
Limitations
Merged cells, colspans and rowspans are not produced — the input is a rectangle, so the output is one too. Ragged rows are padded with empty cells rather than emitted as broken markup.
Related tools
See the HTML to Markdown converter and comma separated list to column.
Rate this tool
Was this tool useful? Your feedback helps us improve it.