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.

Structure

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.

No ratings yet — be the first to rate this tool.
Your rating (required)
0 / 2000

Please do not include passwords, payment details or other sensitive information.

Your feedback is sent privately to the A2Z.Tools team and will not be posted publicly.