This tool runs entirely in your browser. Nothing you paste is uploaded.
How you can check →Table Workbench
Text & DataA table viewer and calculator that runs entirely in your browser. Paste a table from anywhere — a SQL result grid, a spreadsheet, a CSV, even console output — and get sums, averages and medians by selecting cells. Nothing is uploaded, and nothing gets mangled on the way in.
Source data — paste, drop a file, or edit
What you can paste
- A SQL result grid — copied from DBeaver, SSMS, SQL Developer, DataGrip or pgAdmin
- A spreadsheet range — from Excel, Numbers or Google Sheets
- CSV or TSV, including semicolon files
- A Markdown table out of a ticket or a pull request
- psql or MySQL console output, borders and all
- Aligned fixed-width columns from a log or a report
The separator is worked out for you. Then select a column heading, or drag across cells, and the totals appear underneath.
No network activity while you use this tool Show the numbers
- Requests to any other server
- 0
- Requests since you started typing
- —
Counted live by your browser's own Performance Timeline — the same data the DevTools Network panel reads. It cannot see what a browser extension does, and it is not meant to replace checking for yourself: here is how, in thirty seconds .
A table calculator, not a spreadsheet
Watch anyone use a spreadsheet for an ad-hoc question and you will almost never see
them type =SUM(B2:B400). They select the column and read the number off the
status bar at the bottom of the window. That strip — Sum, Average, Count — is the most
used feature in Excel, and it is the only part of a spreadsheet most people need most of
the time. This is that strip on its own: a table calculator that is all answer bar and
no formula bar, with the two-minute wait for an application to open removed and a few
things it gets wrong put right.
Select a column heading, or drag a rectangle across cells, and you get the total, the average, the median, the minimum, the maximum, how many values there are, how many of them are distinct, and how many cells are empty. Every one of those is a button: click it and the plain value is on your clipboard, ungrouped and without a currency symbol, ready to paste into whatever comes next.
Why the sum is exact
Computers store decimals in binary, and most decimals have no exact binary form — which
is why 0.1 + 0.2 famously gives 0.30000000000000004. Add four hundred
currency values one after another and that error accumulates into something you can see.
Spreadsheets hide it by rounding the display, so the number shown and the number stored
quietly disagree.
Here, a column whose values have at most nine decimal places is added as whole numbers — scaled up, summed, scaled back down — which is exact by construction rather than approximately right. Anything outside that range falls back to compensated summation, which tracks the low-order bits ordinary addition discards and folds them back at the end. You will not find a total here that is off in the fifteenth digit.
Identifiers are not measures
The famous spreadsheet failures are not arithmetic errors. They are category errors:
something spelled with digits gets treated as a quantity. A zip code loses its leading
zero. A twenty-digit order number becomes 1.23457E+19 and the real digits are
gone. A gene called SEPT2 becomes a date — a problem so persistent that in 2020
the body that names human genes renamed the genes rather than keep fighting the software.
So every column here is classified as a measure or an identifier, and two things settle it: padding that a number cannot carry, and a magnitude larger than 9,007,199,254,740,991, which is the biggest whole number that can be held exactly. Identifier columns show counts and distinct values but not a total, because adding order numbers together produces a number that answers no question. Whatever the classification, the characters you pasted are the characters you see and the characters you export.
Decisions are made per column, and explained
Every judgement is made by looking at a whole column at once, never a cell on its own.
That is what makes it safe to recognise $1,234.56, 1 234,56,
45% and (890) as notation: the column as a whole says which reading
applies, so no single row can be read differently from its neighbours. Where a column
contradicts itself, it stays text and names the row that broke it rather than picking a
winner.
The same rule governs dates. 01/02/2026 could be February the 1st or January
the 2nd, and nothing in the value decides it. If any row in the column holds something like
13/02/2026, the order is proven — there is no thirteenth month — and the whole
column is read that way. If nothing proves it, the column stays text and asks you, instead
of sorting your rows into an order that looks perfectly correct and is not. Anything the
tool concluded appears in a short list above the grid, so there is never a decision made
about your data that you cannot see. If you need the format string for those dates rather
than the dates themselves, the date format generator
works backwards from an example and applies the same refusal to guess.
Getting the answer somewhere useful
Whatever you have selected can leave as a Markdown table, CSV, TSV, JSON, SQL
INSERT statements or an HTML table. Markdown is first for a reason: a summary
pasted into Slack, a pull request or a Jira comment renders as a real table inline, where a
link would make the reader click through to a site they have never seen. Every format except
JSON carries your original characters through untouched, and JSON only differs because it
has to commit to a type — where it does, a value becomes a number only when its own digits
are already a valid JSON number, so 1.50 stays 1.50.
Everything above happens inside this tab. The parsing, the type detection, the arithmetic and every export are JavaScript running on your machine, so a result grid from a production database can be pasted here without it going anywhere. There is no upload, no account and no server-side step to disclose — open your browser's Network tab and watch nothing happen.
Frequently asked questions
- Why did my product code 007 not become the number 7?
- Because it is a code, not a quantity. A column whose values carry leading zeros is treated as an identifier and kept exactly as you pasted it, since writing the number 7 back out gives "7" and the padding would be gone for good. This is the single most common way spreadsheets destroy data: zip codes, SKUs, phone numbers and version strings all lose their shape the moment something decides they are arithmetic.
- Can I write formulas like =SUM(B2:B40)?
- No, and that is deliberate. Almost nobody typing that formula wants a formula — they want the number once. Select a column or drag across a range and the total, average, median, minimum, maximum, distinct count and blank count all appear immediately. If you genuinely need cell references, a spreadsheet is the right tool and this one is not pretending to replace it.
- Will my data be uploaded anywhere?
- No. Every part of this — reading the paste, working out the column types, the arithmetic, and every export — runs as JavaScript in your own browser. Nothing is sent to a server, nothing is stored, and there is no account. You can confirm it: open your browser's Network tab and watch it stay empty while you work.
- It says my date column was kept as text. Why?
- Because 01/02/2026 is the 1st of February in most of the world and the 2nd of January in the United States, and the value alone cannot tell you which. Rather than pick one and sort your rows into an order that looks right and is not, the column stays text and says so. If any row in the column contains something like 13/02/2026, the order is proven — there is no thirteenth month — and the whole column is read that way automatically. Otherwise you can choose the order yourself.
- Does it understand $1,234.56 or European numbers like 1.234,56?
- Yes, and it decides per column rather than per cell. Every value in a column is scanned together, so a currency symbol, thousands separators, a percent sign or accounting-style parentheses for negatives are all recognised as notation and stripped for the arithmetic while your original text stays on screen. Where a column contradicts itself — a comma used as a decimal point in one row and a thousands separator in another — it refuses to read it as numeric and tells you which row broke it.
- How large a table can it handle?
- Up to 400,000 cells, and up to 10 MB of pasted text. The first 2,000 rows are drawn on screen so the page stays responsive, but every statistic is calculated across every row, and the footer under the grid tells you when the two differ. Nothing is ever computed over just what is visible.
- Can I see more rows at once?
- Yes — press Full screen and the grid and its totals fill the window, roughly doubling the rows on screen. Everything else on the page is orientation for a first visit rather than working surface, so it is what full screen trades away. Escape clears your selection, and pressing it again with nothing selected returns you to the page.
- How do I share a result with someone?
- Copy it as a Markdown table. It renders inline in Slack, GitHub, Jira, Teams and Notion, so the person reading it sees your answer in the message rather than a link they have to open and trust. That is also why this tool has no share URL: putting your data in a link would place it permanently in the recipient's history and your company's message archive, which is a strange thing for a tool that promises the data never leaves your browser.