Excel to Markdown
Upload an Excel file (.xlsx, .xls) and convert it to a formatted Markdown table.
To convert Excel to Markdown, drop the .xlsx file onto the box above and copy the table that appears. The first sheet is converted, row 1 becomes the header, and every cell is written as its stored value. If the workbook has more sheets, a note under the table says which sheet you are seeing and how many there are.
What does the output look like?
A simple sheet with an empty cell
A B C
1 Region Q1 Q2
2 North 1200 1350.5
3 South 980| Region | Q1 | Q2 |
| --- | --- | --- |
| North | 1200 | 1350.5 |
| South | 980 | |Dates, a formula, currency and a percentage
A B C D E
1 Date Units Price Total Share
2 Jan 15, 2026 3 $4.50 13.5 (=B2*C2) 25%| Date | Units | Price | Total | Share |
| --- | --- | --- | --- | --- |
| 46037 | 3 | 4.5 | 13.5 | 0.25 |The file stores the underlying values, and those are what you get: the date as Excel's day count (46037), the formula's last calculated result, and 0.25 instead of 25%. See below for how to keep the formatting.
A workbook with two sheets
Tab 1 "Summary"
A B
1 Metric Value
2 Orders 418
Tab 2 "Raw data" (not converted)| Metric | Value |
| --- | --- |
| Orders | 418 |
> Showing sheet "Summary" (2 sheets total)What about workbooks with several sheets?
Only the first tab is converted, and a line such as > Showing sheet "Summary" (2 sheets total) is added under the table so this is never silent. To convert another sheet, drag its tab to the first position, save, and drop the file again. There is no sheet picker yet.
Do I get the formula or its result?
The result. Excel saves the last calculated value of every formula in the file, and that value is what goes in the cell, so =B2*C2 shows as 13.5. The formula text is not included. A file written by a program that never calculated it may have no saved result, and those cells come out empty. Open and save it in Excel or LibreOffice first.
Why do my dates show as numbers like 46037?
Excel stores a date as the number of days since 1900 and only formats it as a date on screen. The converter reads the stored value and ignores number formats, so dates become day counts, 25% becomes 0.25 and $4.50 becomes 4.5.
To keep what you see, either add a text column such as =TEXT(A2,"yyyy-mm-dd") and convert that, or copy the cells and paste them into CSV to Markdown, since the clipboard carries the formatted text.
What happens to merged cells?
Markdown tables have no merged cells. The value goes in the top-left cell of the merged range and the other cells in that range are empty. A merged title row across the top will therefore become a header with one label and blank columns, so unmerge or delete it first.
How are pipes, line breaks, blank rows and other edge cases handled?
| Input | What you get |
|---|---|
| Pipe | in a cell | Escaped as \| |
| Line break in a cell (Alt+Enter) | Kept as a real line break, which splits the table row. Replace it first |
| Empty cell | Empty table cell |
| Blank row inside the data | Kept as a row of empty cells |
| Short rows | Padded to the widest row |
| TRUE / FALSE | true / false |
| Dates, %, currency, thousands separators | Stored value without formatting (46037, 0.25, 4.5, 1200) |
| Formulas | Last saved result; formula text dropped |
| Merged cells | Value in the top-left cell only |
| Bold, colours, comments, images, charts | Dropped; only values are read |
| Accents, CJK and emoji | Passed through unchanged |
| Very wide sheets | Every used column is kept; the table may scroll sideways when rendered |
How does this compare with pandas and Excel's own export?
| MDConvert (this page) | pandas to_markdown() | Excel Save As | |
|---|---|---|---|
| Produces a Markdown table | Yes | Yes, with the tabulate package installed | No, CSV is the closest option |
| Which sheet | First sheet only | Any, via sheet_name | The active sheet, for CSV |
| Dates | Day-count numbers | Read as dates | Written as displayed |
| Setup | None, runs in the browser | Python, pandas, openpyxl and tabulate | Excel |
| Batch / scripting | No, one file at a time | Yes | No |
For many workbooks, or when dates matter, pd.read_excel("file.xlsx").to_markdown() is the better choice. This page is for one file, with nothing to install.
Maintained by Ankit Aglawe. Last updated .
Related Tools
Need a different format? See every tool on the Markdown converter page, or go back to the MDConvert home page.