Pasted a spreadsheet, got garbage: why tables mangle in chat
The point: pasting a spreadsheet destroys its grid before the model ever sees it — a typed GFM table survives the trip.
You copy a range in Excel, paste it into a chat window, and the neat grid arrives as a run-on line of values — or as columns separated by nothing the eye or the model can rely on. The model then answers questions about "the third column" of a table that no longer has columns.
1 · The four classic manglings
- Whitespace collapse. Spreadsheet copies are
tab-separated; chat inputs and web forms routinely normalize
whitespace, so tabs become single spaces and column boundaries
vanish —
North 12 1200could be two columns or three. - Serial dates. The cell shows
2025-09-22; the underlying value is45922, days since 1899. Paste paths that grab raw values hand the model five-digit mysteries — and models gamely "interpret" them as IDs or amounts. - Merged cells. A header spanning three columns unmerges into one value and two blanks, shifting every row under it during extraction.
- Formulas vs values. Depending on the path,
you get
=SUM(B2:B13)where the model needed79, or a cached number with no hint it was computed.
2 · What a model-readable table looks like
| month (date) | region (str) | units (int) | revenue (float) |
| --- | --- | --- | --- |
| 2025-01-31 | North | 12 | 1200.00 |
| 2025-01-31 | South | 7 | 700.00 |
Showing the first 50 of 4,812 rows.
Three properties do the work: explicit pipe delimiters that survive any paste path, a header row with type annotations so "45922-style" ambiguity can't arise, and a truncation sentence so the model knows it's looking at a sample. The full reasoning: Tables LLMs can actually read.
What paste produced
region Q1 Q2 Q3
North 1204 998 1105
South 872 914
45922 45923What survives
| region (str) | Q1 (int) | Q2 (int) | Q3 (int) |
| --- | --- | --- | --- |
| North | 1204 | 998 | 1105 |
| South | 872 | 914 | |3 · The fix
- Don't paste from the spreadsheet UI. Drop the
.xlsxor.csvfile itself into MakeItMarkdown (local conversion, nothing uploaded). - The converter emits typed GFM tables, ISO dates instead of serials, cached values for formulas (marked as cached), one section per sheet, and explicit row truncation.
- Copy the Markdown into the chat — or attach the .md.
If the numbers in the model's answers still look invented, that's usually the other table failure — silent truncation and missing headers upstream — covered in When the model invents numbers.
See it on a sample: typed columns, escaped pipes, explicit truncation.