How to Extract Tables From PDF to Excel: 4 Methods

Jul 10, 2026

Turn your receipts and invoices into a clean Excel or CSV file. Upload one or a whole batch:

PDF, JPG, PNG, BMP, HEIC, TIFF

Upload your receipts and invoices

Last updated July 2026.

To extract a table from a PDF to Excel, use Excel's own connector for digital PDFs (Data, Get Data, From File, From PDF), Acrobat's Export To Excel for scanned pages, a Python library such as Camelot when you need repeatability, or AI extraction when the same tables keep arriving from different senders. Copy and paste is the one method that never preserves the grid.

The reason all four exist is that a PDF does not contain a table. It contains characters placed at coordinates that look like a table when rendered. Every tool you are about to read about is guessing where the rows and columns were, and each one guesses differently.

How do I copy an entire table from a PDF?

If the PDF is digital, meaning you can select a word with your cursor and watch it highlight, hold the Alt key on Windows or Option on Mac while you drag a selection box around the table. That switches most PDF viewers into rectangular selection, which respects the visual block instead of following reading order. Paste the result into Excel and use Data, Text to Columns to split it.

It half works. Columns separated by wide whitespace usually survive. Columns separated by a single space merge. A cell that wraps onto two lines becomes two rows. Treat this as the method for one small table you need right now, not the method for a report you produce monthly.

How to copy a table from PDF to Excel without losing formatting?

Stop copying and start importing. Excel has a native PDF connector: open a blank workbook, choose Data, then Get Data, then From File, then From PDF, and select the file. Power Query scans the document, lists every table it detected, and lets you preview and load the ones you want. Because it reads structure rather than selected text, columns arrive as columns.

Two things break it. Merged cells confuse the column count, so a table with a spanning header often loads shifted by one. And the connector reads the text layer only, so a scanned page produces no tables at all, with no error message that explains why. If Power Query tells you it found nothing in a document you can plainly see a table in, you are holding a scan.

How do I import multiple tables from a PDF into Excel?

Power Query handles this natively. In the Navigator window that appears after you select the PDF, tick Select multiple items and choose every table you need. Each loads to its own worksheet. If the same table continues across pages, Power Query treats each page as a separate table, so you will need to append them: choose Combine, then Append Queries, and confirm that the header row from pages two and three is removed rather than pasted into the data.

That last step is where most multi-page imports go wrong quietly. The header repeats as a data row, the column type flips from number to text to accommodate it, and every formula downstream returns zero.

How do I extract a table from a scanned PDF?

Something has to recognize the characters before anything can find the table. Adobe Acrobat does this automatically when you export a scanned PDF to Excel: it runs OCR first, then produces a workbook that mirrors the page layout, with settings to control whether you get one worksheet per table, per page, or for the whole document. Adobe documents 300 dpi as the resolution that yields the best text, notes slightly lower accuracy at 150 dpi, and will not run OCR below 72 dpi at all. The scan quality decides the outcome more than the software does.

Check the numeric separators in Acrobat's export settings before you convert. If Acrobat brings currency values across as text, your new spreadsheet will look perfect and sum to zero. We went through the full behavior in does Adobe Acrobat do OCR.

Why does my PDF table not paste correctly into Excel?

Because the file never stored a table. PDF stores glyphs and positions. When you copy, the viewer serializes those glyphs in reading order and discards the coordinates, so Excel receives a stream of text with no idea where one cell ended and the next began. Everything lands in one column.

Three more culprits show up constantly. Merged cells change the column count mid-table, so a reconstruction that was right at the top drifts by the bottom. Rotated or skewed scans shift every column boundary by a few pixels, which is enough to split a column in two. And numbers carrying a currency symbol or a thousands separator arrive as text rather than as values, which is why SUM returns zero on a column that visibly contains numbers. Fix that on import with Text to Columns or the separator settings, not by retyping.

Can Excel extract data from a PDF?

For digital PDFs, yes, through the Get Data From PDF connector described above. For scanned PDFs, no. Power Query has no OCR step, so a page of pixels returns nothing. Excel does have a separate feature called Insert Data From Picture, which converts a photograph or screenshot of a table into cells, and Microsoft documents it on Windows, Mac, the web, and mobile, restricted to a specific list of Latin-script languages and best used on head-on, well-lit images. It works on a picture of a table. It is not a PDF pipeline.

Can Python extract a table from a PDF?

Yes, and it is the right answer when the same layout arrives every week and you want the extraction under version control. pdfplumber gives you fine control over how words become rows. Camelot targets ruled tables, meaning tables with visible gridlines, and does well on them. tabula-py wraps a mature Java library and handles stream-mode tables without lines. All three read the text layer only, so scans need Tesseract or another OCR engine bolted on ahead of them, along with the deskewing that makes Tesseract usable on real paper.

The cost of the Python route is not writing it. It is owning it. A supplier redesigns their invoice, a table gains a footnote row, a two-page bill appears, and a script that ran silently for six months starts silently dropping the tax line. That is fine when the pipeline is your product. It is expensive when the pipeline is plumbing between a document and your ledger.

How do I extract a table from a PDF for free?

Excel's PDF connector is included with Microsoft 365 and costs nothing extra. Tabula is an open-source desktop tool that does one job well on text-layer PDFs. Tesseract is free OCR if you are willing to write code around it. All three are genuinely useful for a one-off, and all three put the maintenance and the interpretation on you. The moment the same tables arrive every month from a dozen different senders, the free tools stop being free, because your time is now the price.

Which method should you actually use?

Your situation Use this
One digital PDF, one table, right nowExcel, Get Data, From File, From PDF
A scanned page or a photographAcrobat Export To Excel, or AI extraction
Identical layout, every week, in codepdfplumber or Camelot
Many senders, many layouts, same fieldsAI document extraction

That bottom row is the one worth dwelling on, because it is where table extraction stops being the right question. If you have fifty invoices from fifty vendors, you do not want fifty tables. You want fifty rows with the same columns: vendor, date, tax, total. Reconstructing each page's grid perfectly still leaves a person deciding which cell held the total. That is the difference between layout extraction and field extraction, and it is covered in full on PDF data extraction.

For vendor bills specifically, the invoice PDF to Excel converter returns the header fields and the line items together, and receipts go through the receipt to Excel converter the same way. The tables inside a commercial lease are a different animal again, since what you want out of a rent schedule is the escalation terms rather than the grid, and a tool that can abstract the key terms out of the lease saves the reconstruction step entirely.

Have a stubborn PDF? Upload it and see the table come back as rows.