Get the tables out of a PDF and into a spreadsheet

Read this before you run it: what comes back is a CSV file, not an .xlsx workbook. Every spreadsheet opens a CSV by double-clicking, and this one leads with a UTF-8 byte-order mark so that Excel on Windows reads pound signs and accented names correctly instead of turning them into rubbish. The hard part is finding the table at all — a PDF records no such thing, so words sharing a baseline are read as a row and a gap much wider than a space as the edge of a cell.

It writes CSV, not .xlsx. A CSV is rows of text — no sheets, no formulas, no formatting, no column widths — which is exactly why everything opens one.

Find the tables

No account. Your upload is deleted after 2 hours, the result after 24 hours.

How it works

  1. Pick the pages the table is on. A range keeps the covering letter and the notes out of your spreadsheet. ‘All’ is fine for a document that is nothing but table.
  2. Run it and read the three numbers. The result says how many rows were found, how wide the widest one was and how many lines were left out. Those three tell you whether the settings were right before you look at a single cell.
  3. Adjust the two dials if it is wrong. Columns run together: lower the gap. One column split in two: raise it. Headings and page numbers landing in the sheet: raise the minimum number of cells.

What the options do

The form above lists the options this tool is running today, straight from the server. This is what they are for.

Pages to read
Which pages to look at, as 2-5 or ‘all’. Worth setting, because running text on the pages either side of a table produces rows that the minimum-cells filter then has to throw away — and anything it does not throw away lands in your spreadsheet.
Gap that starts a new column (spaces)
How much white space counts as the edge of a cell, measured in spaces, from 1 to 12. This is the only signal a PDF gives about columns, which is why two columns separated by two spaces cannot be told apart from one column with an awkward gap in it. Lower it when columns are running together, raise it when a single column is being split in two. The default of 2 suits most ruled tables. Cell boundaries are then lined up across the page, so a column stays one column even where a row’s cell starts a few points late.
Ignore rows with fewer cells than
Lines with fewer cells than this are dropped, which is what keeps the heading, the page number and the paragraph of explanation under the table out of your spreadsheet. The default of 2 works for most tables; set it to 1 to keep every line of text on the page, and raise it for a wide table where three-cell lines are noise. The result always tells you how many lines were dropped.
Separator
Comma is the usual choice. Choose semicolon if the file will be opened where the comma is the decimal separator, or Excel will split 1,50 across two cells. Tab is convenient for pasting straight into an open sheet.
One file per page
Off, every page goes into a single CSV with a blank line between pages — right when the table runs across pages and the columns do not change. On, each page becomes its own CSV, which is what you want when each page carries a separate table with its own headings.

What this tool does not do

  • It writes CSV, not .xlsx. A CSV is rows of text — no sheets, no formulas, no formatting, no column widths — which is exactly why everything opens one.
  • It cannot read a scan. A scanned table is a picture of a table; the job stops with a message, and the OCR tool will tell you which pages have no text.
  • Cells merged across columns, and numbers wrapped onto a second line, are where it goes wrong. Check the result against the page before you rely on the figures.
  • The lines drawn on the page are not used at all — only the gaps between words. Ruled tables convert well; a column of running text next to another column does not.
  • It does not recognise headers, totals or data types, and it reconciles nothing. Everything is text until your spreadsheet decides otherwise.

What happens to your file

The file is uploaded because PDF to Excel runs on our server rather than in the browser tab. It is kept for at most 2 hours and the result you download for 24 hours, then a scheduled job deletes both — a job has to be able to read the file while it runs, and you have to be able to retry a failed conversion without re-uploading. Neither needs longer.

Nothing about the contents is logged, and no one reads your documents. The retention page lists the same numbers the code enforces, and the privacy policy says who can reach the storage they sit in.

Questions

Will I get an .xlsx file?
No, a CSV. Every spreadsheet opens one by double-clicking and can save it as .xlsx from there in a step. Writing real workbooks — sheets, styles, a shared string table — is a separate and much larger piece of work, and pretending otherwise by changing the extension would only produce a file Excel complains about.
My columns have run together into one.
Lower the column gap. It counts spaces’ worth of white space as a cell boundary, and a tightly set table may leave only one space between columns. If lowering it starts splitting single columns in two, the table is too tight to separate reliably and the rest will have to be done by hand.
Excel shows my pound signs and accented names as rubbish.
The file starts with a UTF-8 byte-order mark, which Excel reads when you open the CSV by double-clicking it. Importing it through the data tools instead can skip that, in which case set the file origin to UTF-8 in the import dialogue.
It says no rows were found.
Either the pages have no text at all — a scan — or nothing on them has as many cells as the minimum you set. Set the minimum number of cells to 1 to see everything the tool did find, then work back up from there.
Can it read a bank statement?
Often, if the statement is a real PDF rather than a scan and its columns are cleanly separated. Check the totals before you use the numbers: a wrapped description or a merged cell can shift a row, and this tool reconciles nothing.
Why do different rows have different numbers of columns?
Because a row is only as wide as the cells it actually has, and an empty cell leaves no trace in a PDF. Boundaries are lined up across the page to reduce this, but a row whose last cell is blank still comes back one column short.