tsvkit.org
TSV Toolkit
Sample data Say hi →

Paste from Excel

clipboard → TSV · CSV · JSON · Markdown · SQL · HTML

Select cells in Excel, Google Sheets, Numbers, or LibreOffice, hit copy, and paste into the box below. This works because every spreadsheet puts tab-separated text on the clipboard — TSV is the native format of a copied spreadsheet range, which makes it the shortest path from a sheet to any other format. No file to save, no import wizard, no upload.

output
…or drop a .tsv file,
ready

How to use

  1. In your spreadsheet, select the range including the header row. The first row becomes the column names for JSON and SQL output.
  2. Copy, then paste into the left box. The output appears instantly.
  3. Pick a format. For SQL, set the table name; for JSON, choose whether to pretty-print.
  4. Watch the status line. It flags rows whose column count differs from the header — the usual sign of merged cells in the copied range.

What to expect from each format

TSV (cleaned) re-emits the paste with consistent quoting, which is worth doing before saving a file — a cell containing a line break arrives as a quoted multi-line field and this normalises it. CSV converts commas-in-data safely with RFC 4180 quoting.

JSON gives one object per row keyed by the header names, all values as strings — no coercion, so 007 and 1.10 survive intact. If you want real numbers and booleans, use TSV → JSON, which has an explicit coerce toggle. Markdown produces a GitHub-flavoured pipe table, escaping any | in the data. SQL emits a single multi-row INSERT with quoted identifiers; empty cells become NULL and bare numbers stay unquoted. For dialect-specific output and CREATE TABLE, use TSV → SQL. HTML writes a plain <table> with a <thead>, escaped so pasted content can't inject markup.

Why the paste sometimes looks wrong

Everything landed in one column. The clipboard delivered rich text or the app pasted an image of the cells. Try Paste as plain text (Cmd/Ctrl+Shift+V) into the box.

A cell with a line break split into two rows. Spreadsheets wrap such cells in quotes on the clipboard, and the parser here honours that — so this usually resolves itself. If the source app didn't quote it, the record is genuinely ambiguous; see fix ragged rows.

Merged cells produced blanks. A merged range copies its value into the top-left cell only. Unmerge in the spreadsheet before copying, or fill the gaps afterwards with fill empty cells using previous value.

Numbers arrived formatted. The clipboard carries displayed values, so $1,234.56 and 45% come through as text with their symbols. Strip them with find and replace in a column, or copy from a helper column holding the raw value.

FAQ

Does this work from Google Sheets?

Yes — Sheets, Excel (desktop and web), Numbers, LibreOffice Calc, and Airtable all put tab-separated text on the clipboard for a copied range. So do most database GUI clients when you copy query results, which makes this a fast way to turn a result grid into JSON.

What about going the other way — into Excel?

Copy TSV from any tool on this site and paste directly into a sheet; it lands as columns with no import step. That's the same mechanism in reverse. For a real workbook file, use TSV → XLSX.

Should I use this or the file converters?

Use this for a selection you're looking at right now — it's two keystrokes. Use XLSX → TSV when you need a whole sheet, a sheet you're not currently viewing, or a file someone sent you without opening it.

Is the pasted data sent anywhere?

No. There is no server-side component to this page at all — the conversion happens in JavaScript in your browser, which you can verify by going offline and reloading.

Privacy

100% client-side. No upload. See the privacy policy.