Database guides

Excel (XLSX) files

Updated 2026-08-01 · 2 min read

Treat a spreadsheet as a table and ask it SQL questions — no formulas, no pivot tables, no manual re-sorting.

AddisDB reads .xlsx workbooks directly and loads them into a queryable table, so you can run SQL against a spreadsheet without converting it to CSV first.

Who it is for

Spreadsheets are where an enormous amount of real business data lives — budgets, inventories, exports from systems nobody has API access to. They are excellent for editing and terrible for asking questions that involve grouping, joining, or more rows than a screen.

They are also formatted for humans rather than machines: merged title cells, blank spacer rows, subtotals in the middle of the data, a legend at the bottom. Every one of those is invisible to a reader and a problem for a loader, which is why a minute of tidying pays for itself.

Use this when someone sends you a workbook and the question is analytical: totals by category, rows in one sheet missing from another, the top twenty of something. SQL answers those in a line.

Preparing the workbook

  1. Put the header row at the top of the sheet — column names come from it.
  2. Remove decorative rows above the header (titles, logos, merged banner cells); they confuse column detection.
  3. Delete subtotal and grand-total rows inside the data, or they will be counted as records.
  4. Values are read as stored, so a column formatted as a date but holding text will arrive as text.
  5. Formula results are read, not the formulas themselves.
  6. The workbook is opened read-only — AddisDB never writes back to it.

Open it in AddisDB

  1. New Connection → Files → Common → Excel (XLSX).
  2. Choose the workbook, name the connection, and Save.

The questions worth asking in SQL

Duplicate detection and cross-sheet reconciliation are the two that a spreadsheet makes tedious and SQL makes trivial.

-- Which keys appear more than once?
SELECT invoice_no, count(*) AS n
FROM   invoices
GROUP  BY invoice_no
HAVING count(*) > 1
ORDER  BY n DESC;

Numbers that arrived as text — because of a currency symbol, a thousands separator or a stray space — are fixed in the query rather than in the workbook, which keeps the original untouched.

SELECT sum(TRY_CAST(replace(replace(amount, '
#39;, ''), ',', '') AS DOUBLE)) AS total FROM invoices;

What AddisDB gives you

  • SQL over the sheet — grouping, filtering and joining against other connections’ data.
  • The Chart view, so a total by category becomes a chart without building a pivot table.
  • Notebooks for an analysis you will want to re-read or hand to someone.
  • AI chat grounded in the workbook’s real columns.
  • ⌘K search across every connection, and a workbook that is never written back to.