Fixes · 04

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

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  45923

What survives

| region (str) | Q1 (int) | Q2 (int) | Q3 (int) |
| --- | --- | --- | --- |
| North | 1204 | 998 | 1105 |
| South | 872 | 914 |  |

3 · The fix

  1. Don't paste from the spreadsheet UI. Drop the .xlsx or .csv file itself into MakeItMarkdown (local conversion, nothing uploaded).
  2. 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.
  3. 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.