Skip to content

Convert PDF tables to Excel

Pull tables out of a digitally generated PDF into a real .xlsx workbook, one sheet per page, with a column-snapping control and a live preview.

  • Runs in your browser
  • Files are never uploaded
  • Free, no account
Drop a PDF hereTable detection runs in this tab.PDF · up to 500 MB each

How table detection works here

A PDF stores no table. What it stores is text fragments at coordinates, and a table is simply the pattern where those fragments line up vertically. The extraction has three steps:

  1. Lines. Every glyph run on a page is grouped by its baseline, so text at the same height becomes one row.
  2. Cells. Within a row, a horizontal gap more than about four space-widths wide is treated as a column separator rather than a word space. That single threshold is what turns "Invoice 4021 Acme Ltd 1,240.00" into three cells.
  3. Columns. The starting x position of every cell on the page goes into a histogram. Positions within the snapping tolerance of each other collapse into one column, and each cell is then assigned to the column it is nearest to. Columns that end up empty in every row are dropped.

This is deliberately geometry-only. It does not look for ruled lines, because a great many real tables — bank statements, payroll runs, database report exports — have no ruling at all, and the ones that do are already well aligned.

The snapping slider is the control that matters

Everything else is automatic; this one number is worth understanding. It is the tolerance, in PostScript points (1/72 inch), for treating two cell start positions as the same column.

Symptom Fix
One logical column appears as two or three Raise the tolerance — the values are not starting at identical x positions
Two columns are merging into one cell Lower the tolerance
Right-aligned numbers scatter across columns Raise the tolerance. Right-aligned figures start at different x positions by definition, which is the hardest case for a start-position histogram
Everything lands in one column The page probably has no table — the gaps between fields are ordinary word spaces

The preview re-extracts as soon as you release the slider, so tuning it is a two-second loop.

One worksheet per page

Each PDF page becomes its own sheet, named "Page 1", "Page 2" and so on. That is the right default for the most common source — a multi-page statement or report where each page has its own header row — and it keeps the pages separable if the column layout changes partway through the document.

To stack them into one continuous table, open the workbook and copy the sheets together, or use PDF to CSV, which writes every page into a single file with a blank line between them.

Digitally generated only — and why we say so

If a PDF was produced by scanning, its pages are photographs. There is no text to cluster, no coordinates to histogram and nothing this tool can do. It will tell you that plainly rather than returning an empty workbook.

Reading a scan requires OCR, and we do not ship it. The engines small enough to run in a browser make character-level errors that are catastrophic in a spreadsheet — a misread digit in a column of figures is worse than no figures at all, because it looks fine. If your source is a scan, ask the issuer for the original export; banks, payroll systems and accounting packages nearly always have one.

Check before you trust

Extraction from a document format that never intended to be extracted from is a heuristic, not a guarantee. Before using the numbers for anything that matters:

  • Compare the row count in the preview against the source page.
  • Check the first and last row of each page — those are where headers and totals live.
  • Sum a column in Excel and compare it against the total printed in the PDF. If they match, the extraction is almost certainly clean.
  • Watch for cells that ran together; they show as two values with a space between them.

The confidentiality point

The documents people convert with this kind of tool are bank statements, payroll runs, invoices, medical billing and internal reports. Uploading those to a converter means a copy exists on infrastructure you do not control, retained for however long that service's policy says — a promise rather than a fact.

Everything on this page runs in your browser: pdf.js reads the text layer, the clustering is plain JavaScript, and the .xlsx is assembled and zipped in the same tab. Open the network panel while you convert, or switch off Wi-Fi first. Nothing changes.

Questions

How are columns detected?

Every text fragment on a page contributes its starting x position to a histogram; positions that cluster within a few points become a column, and each fragment is then assigned to its nearest column. It is the same approach a person uses when reading a printed table.

One column is being split into two. How do I fix it?

Raise the column-snapping value. It is the tolerance in points used to merge nearby start positions — a wider tolerance merges more, a narrower one splits more. The preview re-runs as soon as you let go of the slider.

Will this read a scanned bank statement?

No. Scans are images and contain no text to cluster. This tool is for PDFs that were generated digitally — exports from accounting software, statements downloaded from a bank, reports from a database.

Where does each page end up in the workbook?

On its own worksheet, named “Page 1”, “Page 2” and so on, so a multi-page statement stays organised instead of being concatenated into one long sheet.

Is my financial data uploaded to check the table?

No. The whole pipeline — text extraction, clustering, and writing the .xlsx — runs in this tab. Watch your browser’s network panel while it works; it stays empty.