Pricing Dashboard Sign up
Recent
· 9 min read · MDisBetter

Convert Word Tables to Markdown: The Complete Guide

Tables are where Word→Markdown conversion gets ugly. Simple grids — fixed columns, plain text in each cell, one header row — convert flawlessly with any tool. Anything more complex (merged cells, multi-row headers, nested tables, cells with images, cells with paragraph breaks) bends or breaks. The reason is structural: GitHub-Flavored Markdown's pipe-table syntax was designed for the 80% case, not the long tail. This guide walks through what survives, what doesn't, and the manual tactics that work when conversion alone isn't enough.

What GFM tables can represent

The pipe-table syntax in GitHub-Flavored Markdown (and basically every modern Markdown flavour) supports:

That's it. There's no syntax for merged cells, multi-row headers, nested tables, captions, footnotes per cell, or block-level content (paragraphs, lists, code blocks) inside cells. Any of those need workarounds.

The simple case: clean conversion

A standard Word table — say a 4-column "Feature comparison" with one header row and 10 data rows of plain text — converts to GFM perfectly with any tool. Drop the .docx in the MDisBetter Word to Markdown converter:

| Feature      | Free | Pro  | Enterprise |
| ------------ | ---- | ---- | ---------- |
| Conversions  | 5/mo | 100  | Unlimited  |
| File size    | 5MB  | 50MB | 500MB      |
| OCR          | No   | Yes  | Yes        |
| Support      | None | Email| Phone      |

Renders correctly everywhere, no manual cleanup required.

Merged cells

Word's merged cells (vertically or horizontally combined cells in a table) have no GFM equivalent. The conversion picks one of three strategies:

Strategy 1: Repeat the value

If you merged 3 horizontal cells with "Q1 2026", the conversion repeats: | Q1 2026 | Q1 2026 | Q1 2026 |. Visually misleading, but the data is preserved.

Strategy 2: Empty the merged cells

The first cell keeps the value, the others become empty: | Q1 2026 | | |. Better for data integrity but visually confusing.

Strategy 3: Drop the table

Some converters skip the table entirely if it has merged cells. Worst outcome.

The MDisBetter web tool uses Strategy 2 (empty merged cells with the value in the first). Pandoc uses Strategy 1 (repeat the value). Mammoth.js varies.

Manual fix for merged cells

If the table is critical, restructure it. Two tactics:

Convert horizontal merges to grouped headers using bold:

**Q1 2026**

| Region | Sales | Forecast |
| ------ | ----- | -------- |
| EMEA   | 100   | 120      |
| AMER   | 200   | 220      |

Split into multiple tables: If a Word table had a merged "Section A" header spanning 5 columns then "Section B" spanning 5 columns, split it into two side-by-side or sequential tables.

Multi-row headers

Word frequently has tables with two header rows: top row is a category, second row is the column name. GFM supports exactly one header row.

Conversion result: usually the first row becomes the GFM header row and the second row becomes a regular data row. Looks broken.

Manual fix

Combine the two header rows into one with a separator. Original:

| Sales         |               | Marketing     |              |
| Q1            | Q2            | Q1            | Q2           |

Becomes:

| Sales Q1 | Sales Q2 | Marketing Q1 | Marketing Q2 |
| -------- | -------- | ------------ | ------------ |

Cells with paragraph breaks

Word allows multiple paragraphs (or even bullet lists) inside a single cell. GFM cells are single-line.

The conversion typically replaces the paragraph break with <br>:

| Notes |
| ----- |
| Line one<br>Line two<br>Line three |

Renders correctly in HTML-aware Markdown environments (GitHub, MkDocs, Obsidian) but ugly to read in raw Markdown.

Cells with bullet lists

Bullets inside a table cell don't have a clean GFM representation. Common conversion: collapsed to comma-separated text or rendered with <br>- item patterns. Often loses the visual list.

Manual fix

Replace the table with a definition list:

**Authentication options**

: - OAuth 2.0
  - API keys
  - Magic link

**Logging options**

: - JSON
  - Plain text
  - Syslog

Or just promote each row to a section heading with a sub-list. More verbose but readable.

Nested tables (table inside a cell)

Word allows tables inside cells of other tables. GFM doesn't support this at all. Conversion either flattens the nested table to text or drops it.

Manual fix

Refactor into multiple sequential tables, with explicit headings to make the relationship clear. There's no shortcut.

Cells with images

Word can place images inside table cells. GFM cells can technically include image syntax (![alt](url)), but the resulting Markdown is fragile and rendering varies by environment. Most renderers display the image inline in the cell, which works for icons and small thumbnails but breaks for larger images.

If your Word doc has tables full of inline images (e.g., a screenshot per row in a step-by-step guide), consider converting to a numbered list with images between each item:

1. Click the gear icon
   ![Settings icon](images/settings.png)
2. Select Profile
   ![Profile menu](images/profile.png)

Tables with captions

Word table captions become normal paragraphs after conversion — usually placed before or after the table without any structural marker. To restore the caption-table relationship, prefix with Table N::

**Table 3: Quarterly revenue by region**

| Region | Q1  | Q2  | Q3  | Q4  |
| ------ | --- | --- | --- | --- |
| EMEA   | 100 | 110 | 115 | 120 |

Very wide tables

Tables with 8+ columns become unreadable in raw Markdown (very long lines) and often overflow on mobile. Three workarounds:

Split horizontally

Split a 12-column table into two 6-column tables with a shared key column.

Pivot to rows

If the table has 5 rows and 12 columns, transpose it to 12 rows and 5 columns. Often more readable.

Convert to a definition list

For tables that are really structured records (one row per item with a fixed set of attributes), a definition list reads better:

## Item ABC-123
- **SKU**: ABC-123
- **Price**: $19.99
- **Stock**: 247
- **Category**: Widgets
- **Supplier**: Acme

Comparison: which converter handles tables best

ToolSimple tablesMerged cellsMulti-row headersNested tables
MDisBetter webExcellentEmpty merged cellsTreats as data rowFlattens to text
PandocExcellentRepeats valueTreats as data rowFlattens to text
Mammoth.jsGoodVariableVariableOften dropped
Word HTML export → MDPoor (bloated HTML)BloatedBloatedSometimes preserved as HTML table

For more on choosing a converter, see the 8-tool benchmark and MDisBetter vs Pandoc.

Pre-conversion: simplify in Word first

If you control the Word doc, the easiest fix is to simplify before converting:

Five minutes of Word editing saves an hour of post-conversion cleanup.

Post-conversion: HTML escape hatch

Most Markdown processors (including GitHub, MkDocs Material, Obsidian) render raw HTML inline. If a table is too complex for GFM, write it as raw HTML:

<table>
  <thead>
    <tr>
      <th rowspan="2">Region</th>
      <th colspan="2">2025</th>
      <th colspan="2">2026</th>
    </tr>
    <tr>
      <th>Q1</th><th>Q2</th><th>Q1</th><th>Q2</th>
    </tr>
  </thead>
  <tbody>
    <tr><td>EMEA</td><td>100</td><td>110</td><td>115</td><td>120</td></tr>
  </tbody>
</table>

Renders perfectly with rowspan and colspan. Tradeoff: less portable (some Markdown renderers strip HTML), uglier source. But for the table you absolutely need to preserve, it's the right escape hatch.

When to skip the table entirely

Sometimes the most honest answer is to drop the table. If your Word table was a layout artifact (using a 1-cell, no-border table to constrain text width, for example), there's nothing to preserve. Convert to plain paragraphs.

Spreadsheet-style data: use CSV instead

If your Word table is really tabular data with 50+ rows that someone might want to filter or sort, the right answer isn't Markdown at all — it's CSV. Extract the table as a separate data.csv file and reference it from the Markdown:

## Quarterly Revenue

Full data: [revenue.csv](./data/revenue.csv)

| Region | Q1  | Q2  | Q3  | Q4  |
| ------ | --- | --- | --- | --- |
| EMEA   | 100 | 110 | 115 | 120 |
| AMER   | 200 | 220 | 230 | 245 |

Show a small preview in Markdown, link to the full data. Better for everyone.

Tables in destinations

The destination matters too. Tables that survive conversion may render differently:

Recommendation

For most Word documents, run the .docx through the web tool, accept that simple tables will be perfect and complex ones will need 5-15 minutes of cleanup. Use the manual fixes above for the tables that matter; consider raw HTML as the escape hatch for the truly complex ones; convert really-tabular-data to .csv. For more cross-tool comparison see formatting preservation accuracy test.

Frequently asked questions

Why don't Markdown tables support rowspan and colspan?
GFM was designed as a strict superset of CommonMark, optimised for ease of parsing and authoring in plain text. Rowspan and colspan would require multi-line cell logic that breaks the simple pipe-delimited grammar. The CommonMark spec authors decided to leave complex tables to the HTML escape hatch — a deliberate trade-off favoring simplicity over expressiveness.
Should I use Markdown tables or HTML tables in my Markdown files?
Default to Markdown pipe tables — they're more portable, easier to read in source, and supported by every Markdown renderer. Reach for HTML tables only when the structure absolutely requires colspan/rowspan, or when the cells need block-level content (multiple paragraphs, lists, code blocks). Mixing both in the same doc is fine; pick per table.
Can I edit Markdown tables visually instead of by hand?
Yes — several editors offer this. Obsidian has the Advanced Tables plugin (auto-format columns, insert rows/columns via UI). VS Code has the Markdown Editor extension. Typora supports interactive table editing. For one-off authoring of complex tables, generate the Markdown via tablesgenerator.com, then paste into your editor.