scalpel@labs: ~/glossary/copy-a-table-to-google-sheets.mdx5 sections

Copy a Web Table into Google Sheets Without Losing Columns

Copying a table for a spreadsheet means putting two flavours on the clipboard at once: tab-separated plain text and a real HTML <table>. Sheets, Excel and Numbers each read whichever they prefer, so a paste keeps every row and column instead of dumping into one cell.

extension: Scalpel Tablesupdated: 2026-08-14read_time: 2 min
less copy-a-table-to-google-sheets.mdx

Why it matters

Copy a table from a web page and paste it into Google Sheets, and often it crumples into a single column. The spreadsheet receives plain text with no structure; it has no clue where the column breaks are. You end up with every cell on one line, stacked vertically.

Scalpel Tables fixes this by writing two formats to the clipboard at once. Google Sheets reads the HTML table and preserves every row and column. If the target app does not understand HTML, it falls back to the tab-separated text, which Sheets, Excel, and Numbers all handle cleanly.

How it works

The clipboard is not a single string; it is a bundle. A single copy operation can write text/plain, text/html, text/csv, and other types all at once. When you paste, the target app picks which format it prefers. Google Sheets prefers HTML tables; Excel likes both HTML and tab-separated text; older tools fall back to plain text.

Scalpel writes:

  1. HTML <table> markup (first choice for Sheets, Numbers, Excel).
  2. Tab-separated plain text (fallback for tools that do not read HTML).

When you paste into Sheets, it reads the HTML, sees the table structure, and creates a grid with the right columns. If you paste into a text editor, it reads the tab-separated text instead. Both formats hold the same data; the app picks which one makes sense.

What does not matter

The tab-separated fallback is not the same as a TSV file download. A copied table holds both formats on the clipboard in memory; it does not hit disk. And the rich HTML copy only works if the browser allows clipboard write access (modern browsers do, but some older or heavily locked-down setups might block it).

Code example

Here is a simple table:

<table>
  <tr>
    <th>Name</th>
    <th>Role</th>
    <th>Start</th>
  </tr>
  <tr>
    <td>Alice</td>
    <td>Engineer</td>
    <td>2026-01-15</td>
  </tr>
  <tr>
    <td>Bob</td>
    <td>Designer</td>
    <td>2026-02-01</td>
  </tr>
</table>

On the clipboard (both formats):

HTML (what Sheets sees):

<table><thead><tr><th>Name</th><th>Role</th><th>Start</th></tr></thead>
<tbody><tr><td>Alice</td><td>Engineer</td><td>2026-01-15</td></tr>
<tr><td>Bob</td><td>Designer</td><td>2026-02-01</td></tr></tbody></table>

Tab-separated (what a text editor sees):

Name	Role	Start
Alice	Engineer	2026-01-15
Bob	Designer	2026-02-01

When pasted into Google Sheets, you get a proper three-column grid. When pasted into Notes, you get three columns of tab-separated text.

How Scalpel shows it

Every table card has a Copy button. Click it and the rich two-format write goes to the clipboard. There is no visible change on screen; the magic happens when you paste into a spreadsheet. You can also check "Copy as TSV" or "Copy as CSV" in the overflow menu if you want a single-format export to save as a file instead.

Sources