SuperSheet

The Messy Spreadsheet Checklist: 12 Things to Fix Before You Send It

By Mark Fulton · 2026-08-09 · 8 min read

The difference between a file someone can use and a file someone has to fight is rarely formatting. It's twelve small structural problems, and they're the same twelve every time. I run this list before any spreadsheet leaves my machine, and it takes about five minutes on a typical file.

Here's the whole checklist, then the fixes worth explaining.

# Problem Fix
1 Merged cells Unmerge; use Center Across Selection
2 Several tables on one tab One table per sheet
3 Trailing/leading spaces TRIM, CLEAN, strip CHAR(160)
4 Numbers stored as text Text to Columns, or multiply by 1
5 Inconsistent dates Convert to real dates, display yyyy-mm-dd
6 Blank rows and columns inside the data Delete them
7 No totals row Add SUBTOTAL(109, …) and label it
8 Unlabeled units Put the unit in the header
9 Hidden rows and columns Unhide, then decide deliberately
10 No freeze panes Freeze the header row
11 Ambiguous or duplicate headers Rename so each is self-explanatory
12 No print setup Set print area, repeat header row, fit width

Structure problems (1, 2, 6)

Merged cells are the most expensive convenience in spreadsheets. They break sorting, break filtering, break copy-paste of whole columns, and produce the "all the merged cells need to be the same size" error at the worst moment. If you merged cells to center a title across a table, use Format Cells → Alignment → Horizontal → Center Across Selection instead. It looks identical and leaves the cells intact.

Multiple tables on one tab breaks every feature that detects a contiguous region — Ctrl+A from inside the data, autofilter, table conversion, pivot sources. If the second table is a lookup or a summary, give it its own sheet. If it's genuinely part of the same dataset, it should be extra columns, not a second block below.

Blank rows inside the data are usually visual spacing, and they cost you the same region detection. Delete the rows and get your spacing with row height or a border instead. F5 → Special → Blanks selects the empty cells if you need to find them fast.

Data-integrity problems (3, 4, 5)

Trailing spaces are invisible and they break every join, lookup, and grouping you'll ever do — "Acme " and "Acme" are different customers as far as the file is concerned. TRIM() removes leading and trailing spaces and collapses internal runs to one. CLEAN() strips non-printable characters. Data pasted from a website often carries non-breaking spaces, which TRIM won't touch — you need SUBSTITUTE(A1, CHAR(160), " ") first, then TRIM.

Numbers stored as text are the reason your total is wrong and nobody can see why: SUM skips text values silently. The tells are a small green triangle in the cell corner and numbers hugging the left edge of the column instead of the right. The most reliable fix is Data → Text to Columns → Finish on the column — it re-parses every cell without changing anything else. Alternatively, copy an empty cell, select the range, and Paste Special → Multiply.

Inconsistent dates are the same problem wearing a different hat: half the column is real dates and half is text that looks like dates. =ISNUMBER(A2) tells you which is which in one pass. Convert the text ones, then format the whole column as yyyy-mm-dd — it sorts correctly, and it can't be misread as day-month by one reader and month-day by another. Format codes are covered in detail in the number formatting guide.

Meaning problems (7, 8, 11)

No totals row forces every reader to select the column and squint at the status bar. Add one, put it directly under the data with a top border, and label the row. Use SUBTOTAL(109, range) rather than SUM if the sheet has filters — SUBTOTAL with a 1xx function number excludes rows hidden by filtering, so the total matches what's on screen.

Unlabeled units cause real errors. Is that column dollars or thousands of dollars? Hours or days? Put the unit in the header — Revenue (USD), Duration (hrs), Weight (kg) — never in the cells as typed text, which turns numbers into strings and lands you back at problem 4.

Ambiguous headers are the ones you understand today and nobody understands next quarter. Date becomes Order Date. Amount becomes Net Amount (USD). And check for duplicates: two columns both called Status will break a pivot table and confuse anyone reading a formula that references them.

Handoff problems (9, 10, 12)

Hidden rows and columns travel with the file. Sometimes that's fine; often it's an old scratch calculation, an internal margin, or a source list you didn't mean to share. Select all, right-click a column header, Unhide, and look at what's actually in there before you decide. On Windows, File → Info → Check for Issues → Inspect Document will also flag hidden content and document metadata.

No freeze panes means the reader loses the header row on the first scroll. Select the cell below and to the right of what you want locked, then View → Freeze Panes. Thirty seconds, and it changes how usable a long sheet feels.

No print setup matters more than it should, because plenty of spreadsheets end up as PDFs in someone's inbox. Three settings: Page Layout → Print Titles → Rows to repeat at top (so the header appears on every page), Fit to 1 page wide under scaling, and an explicit print area so you don't get four blank pages from a stray cell in column BF. Press Ctrl+Shift+End first — if the cursor lands somewhere absurd, your used range is bloated and worth trimming.

A worked example: the header row

Headers do the most downstream damage, because every formula, pivot, and chart reads them. A real-shaped header row off an export:

Date | Amt | Status | Status | qty  | Notes | Unnamed: 6 |    Region

Seven columns, six problems. Date doesn't say which date. Amt doesn't say of what, or in what currency. Status appears twice, which breaks a pivot table and makes any formula referencing it ambiguous. qty breaks capitalization with its neighbors. Unnamed: 6 is an empty column a tool invented from a stray delimiter. And Region carries leading spaces nobody can see but every lookup will notice.

Cleaned:

Order Date | Net Amount (USD) | Payment Status | Fulfillment Status | Quantity | Notes | Region

The moves: TRIM() over the header text with the result pasted back as values, delete the invented empty column rather than renaming it, disambiguate the two Status columns by what each actually tracks, expand the abbreviations, push the unit into the header where it can't turn a number into text, and settle on one capitalization.

Do this before anything else on the list. Renaming a header after you've built formulas, a pivot, or a chart against it means chasing references; renaming it first costs nothing.

Where Excel and Google Sheets part ways

Most of the twelve items apply to both, with different controls:

  • Trimming whitespace. Sheets has a direct command: Data → Data cleanup → Trim whitespace, which works in place on a selection. Excel has no equivalent button, so it's TRIM() in a helper column and paste back as values. Neither removes non-breaking spaces, so SUBSTITUTE(A1, CHAR(160), " ") is still the first step on web-pasted data in either.
  • Numbers stored as text. Excel flags them with a small green triangle and offers a "Convert to Number" fix from the warning menu. Sheets shows no such indicator, so the alignment tell — values sitting on the left of the column — is the only signal you get. =ISNUMBER(A2) works identically in both.
  • Splitting columns. Excel's Data → Text to Columns doubles as the blunt fix for re-parsing a text-formatted number column. Sheets' Data → Split text to columns splits without that side effect.
  • Inspecting a file before you send it. Excel's File → Info → Check for Issues → Inspect Document reports hidden rows, hidden sheets, comments, and document metadata. Sheets has nothing comparable — right-click the sheet tab bar to see hidden tabs, and check notes by hand.

Questions that come up

Should I fix the data or the format first?

Data. A number format applied to a text value does nothing, so formatting a dirty file gives you a sheet that looks finished and still totals wrong. Structure, then types, then formats — the number formatting guide picks up where this list ends.

What if I can't unmerge cells because someone else's formulas depend on them?

Formulas don't depend on merges — a merged block stores its value in the top-left cell, and that's the cell every reference points at. Unmerging leaves the value where it was and empties the rest, which is why unmerge then Center Across Selection is safe to do late in the process.

How do I know if my used range is bloated?

Press Ctrl+End. If the cursor lands in row 60,000 on a table with 400 rows, Excel is still tracking cells that were once touched. Delete the entire rows and columns beyond your data — select the row headers, right-click, Delete, rather than just clearing contents — then save and reopen. Files that were mysteriously slow often shed most of their size right there.

Doing this faster

Most of this list is mechanical, which is the good news — mechanical work is exactly the kind you should stop doing by hand. SuperSheet's spreadsheet cleaner reads your columns and proposes the fixes it can detect (text-as-number columns, inconsistent formats, a missing totals row, header cleanup) so you're approving decisions rather than hunting for them. Worth noting for anything sensitive: the file is parsed and transformed in your browser and is never uploaded. The AI reader does see the sheet's contents when it is on, which is what lets it name the actual rows that are wrong — and there is a switch on the drop screen to turn it off, after which nothing leaves the device at all.

If you're starting from a raw export rather than an existing workbook, the CSV to Excel converter handles the delimiter and encoding guesswork first, which removes about half of this list before you begin.

Once the structure is sound, the visual pass is quick: seven rules for a professional-looking sheet.


SuperSheet is a free set of spreadsheet formatting, CSV conversion, and cleanup tools. Your file never leaves the browser.