A table on a web page is not always a simple <table> element. Modern applications may render the same visual structure with ARIA grids, CSS Grid, nested containers, sticky headers, or virtualized rows that only exist while they are visible. That makes a basic copy-and-paste workflow unreliable.
Why table exports break
The easy case is a semantic HTML table with one header row and a rectangular body. The harder cases introduce structure that spreadsheet software cannot infer on its own:
-
rowspanandcolspancreate merged regions. - ARIA grids communicate structure through roles rather than table tags.
- CSS Grid can look like a table without exposing row and column semantics.
- Virtualized lists may keep only a small portion of the dataset in the DOM.
- Sticky or repeated headers can be duplicated during extraction.
A dependable exporter therefore needs to reconstruct the logical grid before it serializes anything. It should map merged cells into the correct coordinates, identify real headers, preserve visible ordering, and avoid confusing decorative layout elements with data.
A privacy-first workflow
For sensitive business data, the safest workflow keeps processing inside the browser:
- Inspect the page locally and identify the table-like region.
- Reconstruct rows, columns, and merged-cell boundaries in memory.
- Normalize whitespace and repeated headers.
- Serialize the result to the format you actually need.
- Download the file without sending the table contents to a remote conversion service.
CSV and TSV are useful for portable raw data. XLSX is better when merged cells and spreadsheet structure matter. Markdown works well for documentation, issue reports, and AI prompts. Copying directly to the clipboard is often the fastest option for a one-off transfer.
A tool for the awkward cases
I built Table Exporter for these modern-page edge cases. It is a Chrome extension that exports HTML tables, merged cells, ARIA grids, CSS Grid layouts, and scrolling or virtualized tables to XLSX, CSV, TSV, Markdown, or the clipboard. Processing happens locally in the browser, and table data is not uploaded.
You can also find it in the Chrome Web Store.
Whether you use an extension or build your own extractor, the key idea is the same: treat the page as a logical grid first and a file format second. That separation makes exports much more predictable across older sites and modern web applications alike.
Disclosure: I built Table Exporter.
Top comments (0)