Excel to Markdown Table Converter

Turn an .xlsx sheet, a .csv file or cells pasted from Excel or Google Sheets into a GitHub Flavored Markdown table. Runs in your browser; nothing is uploaded.

Or drop a .csv or .xlsx file here. It is read on your device and never uploaded.

Options

How to use this tool

  1. Paste cells copied from Excel, Google Sheets or Numbers into the box, paste CSV text, or choose a .csv or .xlsx file. Or press one of the "Try an example" buttons.
  2. If the file is a workbook with more than one sheet, pick the sheet to convert from the list that appears.
  3. Check the Markdown in the box on the right. It updates as you type or change the options.
  4. Press "Copy Markdown", or download the result as a .md file.

Example: a spreadsheet selection before and after

Before: what the clipboard holds after copying cells

Item ⇥ Qty ⇥ Price ⇥ Notes
Pens ⇥ 24 ⇥ 1.5 ⇥ "Blue, black"
Notebook ⇥ 3 ⇥ 4 ⇥ 
Stapler ⇥ 1 ⇥ 12.99 ⇥ Heavy duty

⇥ marks a tab, the character a spreadsheet actually puts between cells.

After: a GitHub Flavored Markdown table

| Item     | Qty | Price | Notes       |
| -------- | --- | ----- | ----------- |
| Pens     | 24  | 1.5   | Blue, black |
| Notebook | 3   | 4     |             |
| Stapler  | 1   | 12.99 | Heavy duty  |

4 rows and 4 columns, including the quoted cell that held a comma.

What each kind of cell becomes

A pasted CSV or TSV file holds only text, so every cell is written to the table exactly as typed. An .xlsx workbook stores richer types, and each one is shown the way Excel would show it. Every row below was produced by the converter itself.

CellValue in the workbookMarkdown text
A whole number4242
A decimal3.53.5
A boolean celltrueTRUE
An empty cellnull(empty)
A date-only cellnew Date (UTC midnight)2026-03-01
A date and timenew Date (9:30 am UTC)2026-03-01 09:30:00

Awkward cells, handled

A cell that holds a vertical bar, a line break, or a row that is shorter than the header all need special handling to stay a valid Markdown table. Here is what the converter writes for each.

CaseRows you give itTable it writes
A cell with a pipe in it["Notes"], ["SSO | audit"]
| Notes        |
| ------------ |
| SSO \| audit |
A line break inside a cell["Notes"], ["Line one\nLine two"]
| Notes             |
| ----------------- |
| Line one Line two |
A ragged row, shorter than the header["a","b","c"], ["1"]
| a   | b   | c   |
| --- | --- | --- |
| 1   |     |     |

Right-aligned numbers

Tick "Right-align numeric columns" and a column whose cells (ignoring blanks) are all plain numbers gets a trailing colon in its delimiter row, the GitHub Flavored Markdown syntax for right alignment (GFM §4.10). A column that mixes numbers and other text is left aligned, since there is no single plain number to line up on.

| Item | Qty |
| ---- | --: |
| Pens |  24 |
| Pads |   3 |

Example: a two-sheet workbook

The "Try a workbook example" button loads a small .xlsx file with two sheets. Pick one from the "Sheet" list and only that sheet is converted; here is what each one becomes.

Sheet: Roster

| Name         | Role     | Started    | Active |
| ------------ | -------- | ---------- | ------ |
| Ada Lovelace | Engineer | 2024-03-01 | TRUE   |
| Grace Hopper | Lead     | 2022-06-15 | FALSE  |

Sheet: Budget

| Item    | Amount |
| ------- | ------ |
| Laptops | 3200   |
| Desks   |        |

The example file is team-roster.xlsx, the same one the "Try a workbook example" button loads.

Why a Markdown table beats a screenshot or a pasted grid

Pasting a spreadsheet into an AI chat as a screenshot forces the model to guess at numbers it cannot select or check, and pasting the raw tab-separated text makes every row a single run-on line once it lands outside a spreadsheet program. A GitHub Flavored Markdown table keeps the structure, reads reliably into ChatGPT, Claude and Gemini, and renders as a grid in READMEs, wikis, Notion and most note apps.

This tool builds that table the way GitHub Flavored Markdown's table extension defines one: a header row, a row of dashes under it, and the body, with a vertical bar between every cell and \| wherever a cell holds a bar of its own.

Reading an .xlsx workbook

A .xlsx file is a ZIP archive of XML, one sheet per file inside it. The page reads every sheet and keeps each cell's real type: a cell holding a formula is read as whatever value it last calculated to, a number stays a number, and Excel's own TRUE and FALSE are written out the same way. Merged cells are not unmerged: a cell that was merged across several columns or rows keeps its value in its first cell, and the cells it used to cover come back empty. Spaces at the start or end of a cell are trimmed, even inside a quoted CSV field.

Private by design

The spreadsheet or pasted text never leaves your device. It is parsed by code already loaded into this page, and the Markdown appears in the box above. There is no upload, no account and no copy kept anywhere, which matters for anything with prices, salaries or customer names in it.

Limits

  • Only .xlsx workbooks and .csv files are read; an old .xls file must be saved as .xlsx in Excel first.
  • Cell styling (bold, colours, borders, conditional formatting) and number formats (currency, percentages, custom date formats) are not kept. Only the underlying value is written.
  • Charts, images, comments and pivot tables in the workbook are ignored.
  • A line break inside a cell is joined onto one line, and a cell that spans merged rows or columns keeps its value only in its first cell, because a Markdown table cell cannot hold either.
  • One sheet is converted at a time; convert again and pick another sheet for the rest of a workbook.
  • Pasted CSV or TSV text is read as one table: a comma is assumed unless the first line contains a tab, in which case every cell is split on tabs instead.

Frequently asked questions

Is my spreadsheet uploaded anywhere?

No. The file is read and the table is written by code inside this page, in your browser. Nothing you paste or choose is sent to a server.

Does it work with a .csv file, or only .xlsx?

Both. Choose either file type, or skip the file picker entirely and paste CSV or TSV text straight into the box, including a comma-separated .csv file's contents or cells copied from a spreadsheet and pasted, which arrive as tab-separated text.

My workbook has several sheets. Which one gets converted?

Whichever one you pick from the "Sheet" list that appears once a workbook with more than one sheet is loaded. Only that sheet becomes a table; convert the file again and pick another sheet for the rest.

Why does pasting a spreadsheet selection into a Markdown file give one column?

Selecting cells and copying them puts tab-separated text on the clipboard, and Markdown treats a tab the same as a space, so every row lands as one run-on line. This tool reads the tabs (or an .xlsx file's real cells) and writes a GitHub Flavored Markdown table, the format ChatGPT, Claude, GitHub and most Markdown viewers render as a grid.

What happens to currency, percentage or date formatting from Excel?

Only the underlying value survives, not the display format: a cell showing $1,234.00 becomes the number 1234, and a percentage shows as its decimal fraction. Dates read back as plain dates (or a date and time), shown as YYYY-MM-DD. Reformat the figures in the pasted Markdown if you need the original look.

Is it free?

Yes, with no sign-up and no limit on how many spreadsheets you convert. Pro, planned as a one-time purchase, adds converting a whole folder of workbooks at once.