ToolLineup

HTML Table Generator

Fill in a grid — or paste a selection straight from a spreadsheet, which arrives tab-separated and is split into rows and columns automatically — and get clean HTML with real table semantics: a thead with scoped header cells, a tbody, an optional tfoot and a caption. That structure is what lets a screen reader announce which column a cell belongs to. Optional CSS, striping and a responsive scroll wrapper are included, and every cell is escaped. Everything is generated in your browser; nothing is uploaded and no result is recorded anywhere.

How it works

Fill in the grid below — or paste a selection straight from a spreadsheet, which arrives tab-separated and is split into rows and columns automatically. The markup updates as you type.

The output uses real table semantics: a thead withth scope="col" cells, atbody, an optionaltfoot and a caption. That structure is what lets a screen reader announce which column a cell belongs to instead of reading a wall of numbers.

Cell content is escaped, so pasted text containing angle brackets becomes visible characters rather than markup.

The last row becomes the footer rather than an extra row being added, so the row count stays what you set.

ContentTip: paste a range copied from a spreadsheet into any cell to fill the whole grid.
HTML
Preview

Frequently asked questions

Can I paste data from a spreadsheet?

Yes — copy a range from Excel, Numbers or Google Sheets and paste into any cell. Spreadsheets put tab-separated text on the clipboard, so the paste is split into rows and columns and the grid resizes to fit.

What makes the generated table accessible?

Header cells use th with a scope attribute, the sections are marked up as thead, tbody and tfoot, and the caption is a real caption element. Together these let a screen reader announce which column a cell belongs to rather than reading a wall of numbers.

What does the responsive option do?

It wraps the table in a container that scrolls horizontally. A wide table without one forces the whole page to scroll sideways on a phone, which breaks every other element on it.

Is my content escaped?

Yes. Angle brackets, ampersands and quotation marks in your cells become visible characters rather than markup, so pasted text containing HTML shows as text instead of being interpreted.

Why does the footer not add an extra row?

The last row becomes the footer instead, so the row count stays what you set. That matches how a totals row usually works — it is one of your rows, marked up differently.

Related tools