HTML Table to CSV / Excel

Paste HTML tables, choose a table and expand rowspan/colspan into a rectangular preview. Download matching CSV and real Excel files without running scripts or loading embedded resources.

Choose an HTML table and expand its cells

Paste HTML, read tables locally, choose among multiple tables and download CSV or a real XLSX workbook. Repeat each merged cell's text across its rectangle, or keep only its top-left value. Both formats use the same expanded rows. All rows remain data; XLSX cells are text, retaining leading zeros and formula-looking strings. CSV has no cell types; spreadsheet apps may reinterpret numbers or leading = signs.

Original two-table sample

<table>
  <caption>Workshop roster</caption>
  <thead><tr><th rowspan="2">Team</th><th colspan="2">Attendees</th></tr>
  <tr><th>Name</th><th>Note</th></tr></thead>
  <tbody><tr><td rowspan="2">Blue</td><td>林</td><td>Tea &amp; toast</td></tr>
  <tr><td>O'Brien</td><td>Line one<br>Line two</td></tr></tbody>
</table>
<table><caption>Text identifiers</caption><tr><th>ID</th><th>Value</th></tr>
<tr><td>00123</td><td>=1+1</td></tr></table>

Table 1: Workshop roster

4 rows × 3 columns.

TeamAttendeesAttendees
TeamNameNote
Blue林Tea & toast
BlueO'BrienLine one Line two

Table 2: Text identifiers

2 rows × 2 columns.

IDValue
00123=1+1

Original CC0 data. The interactive preview shows the first 20 rows and 12 columns; downloads include every cell.

Text extraction and bounded processing

HTML is parsed only as data in a Worker and is never inserted as HTML. Scripts, styles, templates, embedded documents, SVG and MathML are ignored. Images, URLs, attributes, form values and CSS are not loaded or rendered. CSS-hidden text may be included. Nested tables are separate choices, excluded from parent cell text. Source whitespace collapses, with line breaks for br and basic paragraph/div/list boundaries.

Rows follow parsed source order. Rowspan zero reaches its own row-group end. Other rowspans are clipped to existing rows in the group, with a note; no synthetic rows are added. Invalid attributes default to one. Overlaps and excessive spans are rejected. Empty cells/rows remain, and shorter rows are padded. No merged formatting, styling or formulas are retained.

Local limits: 500,000 input characters, 20 nonempty tables, 10,000 rows / 256 columns per table, 100,000 cells total, 64 nesting levels and 32,767 characters per cell. Cancel terminates processing. Editing source or policy clears old exports. No upload or storage. Reviewed October 18, 2026: HTML table model, parse5 8.0.1, MIT license, entities BSD license, SheetJS CE 0.20.3 license.