How to Extract a Table from an Email Without Breaking the Columns

Last updated August 2026

Try it now: extract email data to Excel, CSV, or JSON

Convert your email files
No install

Connect a mailbox to pull .eml/.msg in bulk, or paste a raw email to test the converter now.

or paste an email to test
Output format
Columns to extract
Extract your own custom fields
Popular:

Create a free account to download. No credit card required.

An email lands with a neat table in it: line items on an order, rows on a daily report, transactions on a statement. You want those rows in a spreadsheet. You select the table, copy, paste into Excel, and it arrives as one mangled cell or a stack of text that no longer lines up. This is one of the most common email-to-spreadsheet headaches, and it happens because the table you see and the data underneath are not the same thing. This guide explains why the columns break and walks through four ways to get the table out cleanly, with the trade-offs of each.

Skip the cleanup

If you just need the table in a spreadsheet with the rows and columns intact, connect your inbox or paste the email, name the columns you want, and export a CSV or Excel file in seconds.

Extract the table now →

How do I copy a table from an email?

Open the email in a browser rather than a desktop client, select the table, copy it, then in Excel use Paste Special and choose HTML. That preserves the row and column structure. A plain Ctrl+V often drops the whole table into one cell, because the clipboard hands Excel unformatted text instead of a table.

That works for one table. It stops being practical the moment you have a table arriving every day from the same sender, which is where the rest of this guide comes in.

Why does my email table break when I paste it into Excel?

An email table breaks on paste because the table is built from HTML, and Excel does not always map that HTML to its own grid of cells. When the structure is complex, has merged cells, or carries inline styling, the paste collapses the whole table into a single cell or splits it in ways that do not align with the original columns. The data you can read on screen is the rendered result; what actually transfers is the markup, and the two do not line up.

This is why a table that looks perfect in the message turns into a run of text in column A. The fix is to read the underlying HTML table structure rather than the rendered text, so each table cell is mapped to a spreadsheet cell on purpose. That is exactly what the methods below do, with very different amounts of effort.

How do I extract a table from an email body to Excel?

There are four practical routes: copy and paste with Paste Special, an Outlook VBA macro that reads the HTML body, an automation tool like Power Automate or UiPath that parses the HTML, or a no-code email parser that reads the table for you. Copy-paste is fine for one stable table now and then. The other three are for when the same table arrives over and over and you want it in a spreadsheet without retyping or fixing it each time.

Pick based on volume and how often the layout changes. A single email a month rarely justifies setup. A table that lands every day, or many slightly different tables from different senders, is where automation or a parser pays for itself, because the cost of the broken-columns cleanup adds up fast.

How do I extract a table from an email in Power Automate?

The usual Power Automate pattern is a "When a new email arrives (V3)" trigger, then an "Html to text" action on the body, then expressions that split the text into fields, then "Add a row into a table." The catch is that "Html to text" flattens the table: it strips the table tags and leaves you a block of words, so the columns you wanted are gone before your expressions even run. People then spend hours writing split() and substring() chains to rebuild rows that the action just destroyed.

A more reliable approach is to let a parser read the HTML table directly into rows and columns and return the result as JSON, which a Power Automate flow can consume in one step. You can read the full breakdown of the native flow and where it falls down in our guide to parsing an email body in Power Automate, and the no-code alternative on the Power Automate parse email body page.

How do I extract a table from an email in UiPath?

UiPath can pull the email with the Get IMAP or Get Outlook Mail Messages activity, read the HTMLBody, and extract the table with regular expressions or HTML parsing, often dropping it into a DataTable. It works, but you own that logic: the regex that finds the table tags, the loop that builds the rows, and the maintenance every time a sender tweaks their markup. For a steady, high-volume process that already lives in UiPath, it can be worth the build.

If you would rather not maintain the parsing, a dedicated parser exposes the same extraction through an API, so a UiPath workflow calls it and gets clean table rows back instead of parsing the HTML itself. That keeps the robot simple and moves the fragile part out of your workflow.

How do I export an email table to Excel in Outlook with VBA?

Outlook has no one-click export for a table inside a message, so the VBA route opens the Visual Basic editor with Alt and F11, adds a module, and writes a macro that reads the selected message's HTMLBody, finds the table, and writes each cell to an Excel worksheet. It is genuinely powerful and free, and it can run on a schedule. The downside is that it is code you write, debug, and fix when a sender changes their layout, plus Outlook's security prompts to work around.

If you are comfortable with VBA and the format never changes, a macro is a reasonable one-time build. If you are not a coder, or the tables vary, the upkeep usually outweighs the savings, which is why many people reach for a no-code parser instead.

What is the easiest way to extract a table from an email?

The easiest way is a no-code parser that reads the HTML table for you. With MailParse you connect Gmail, Outlook, Microsoft 365, or IMAP, or paste the message, point at the table, and name the columns you want to keep. It maps each table row to a spreadsheet row and each column to a column, so repeating line items come out as separate rows rather than one flattened block, and exports an Excel file, a CSV, or JSON. If that same data is locked inside a PDF attachment instead, extract the PDF with a document tool first, then bring the rows together.

Because you name columns on a form instead of writing code, nothing breaks when a sender adds a logo or reorders a column, and new emails in the same format extract automatically. You can extract a table from an email without setup, pull the rest of a message into a sheet on the email to Excel page, get the same rows as a CSV file to import anywhere, or send the structured rows straight to your own system through the email parser API. For the wider comparison of approaches, see our guide to the best email parser.