tsvsheet logo tsvsheet™

Excel

The clipboard interchange format between spreadsheet apps is tab-separated values. Copy a range in Excel and TSV is what's on your clipboard — one paste away from being a .tsvt.

Out of Excel, into a sheet

Select a range in Excel, copy it, and paste the clipboard into a file — the grid arrives tab-separated, already a valid .tsvt:

pbpaste > budget.tsvt          # macOS; Linux: xclip -o -selection clipboard / wl-paste
tsv check budget.tsvt

On Windows, powershell Get-Clipboard > budget.tsvt does the same.

What travels is the computed values — spreadsheet clipboards carry results, not formulas. Re-express the ones you want to keep as =formulas in A1 notation, and from then on the sheet computes, diffs, and versions as text.

Out of a sheet, into Excel

The reverse paste works because Excel parses clipboard TSV back into cells. Render a sheet onto the clipboard and paste into any worksheet — it lands as a proper grid, one value per cell:

tsv render grades.tsvt | pbcopy          # then ⌘V in Excel

Through files

For file-based workflows, render speaks CSV directly and Excel opens it double-click clean:

$ tsv render --format csv grades.tsvt
Student,Math,Reading,Science,Average,Result
Alice,85,90,78,84.3,Pass

Going the other way, save any worksheet as Text (Tab delimited) and the result is a formula-free .tsvt, ready for tsv tui or the playground.

When you retype a formula

Values move between the two without surprises; formulas mostly do too, since the operators are Excel’s. Six readings differ deliberately, and each one is reported by tsv check on the cell rather than left for you to find in a total:

You writeExceltsvsheet
=-2^24-4 — the sign applies to the whole power
=2^3^264512 — ^ groups to the right
="3"+14#VALUE! — text is not coerced into arithmetic
="1"=1FALSE#VALUE! — nor into a comparison
="a"="A"TRUEFALSE — text compares by case
=TRUE=1FALSETRUE — a boolean is 1 or 0, not a value above every number

Parentheses say which grouping you meant and silence the first two; value() converts text to a number, and lower() on both sides asks Excel’s case-blind question. A cell holding 3 is already a number, so the coercion rules only come up when text is quoted deliberately.