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 & 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.
| Team | Attendees | Attendees |
| Team | Name | Note |
| Blue | 林 | Tea & toast |
| Blue | O'Brien | Line one Line two |
Table 2: Text identifiers
2 rows × 2 columns.
| ID | Value |
| 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.