Free tool Table converter for Excel, Markdown, HTML, JSON and CSV
Copy cells from a spreadsheet or a report, paste them here, and get a Markdown table for a README or blog post, an HTML table for a web page, or JSON for code. The format is detected for you, and anything that does not convert cleanly, such as merged cells or short rows, is pointed out.
- 5 input formats, 4 outputs
- Number columns right-aligned
- Runs locally
Convert a table
Paste the table, pick the output format, and copy or download the result. The preview below shows how the table was read.
Select cells in Excel, Google Sheets or Numbers and paste them here, or paste CSV, a Markdown table, HTML, or JSON. "Open file" reads files up to 10 MB.
Detected automatically. Pick one if a CSV is mistaken for something else.
For Markdown and HTML. "Auto" keeps the alignment of a Markdown or HTML source and right-aligns columns that contain only numbers.
Tab-separated text pastes straight back into Excel or Google Sheets.
Data rows
5
Not counting the header.
Columns
5
How the table was read
- NoteRead as tab-separated cells, the format Excel and Google Sheets copy to the clipboard.
| Channel | Visitors | Sessions | Conversions | Conversion rate |
| -------------- | -------: | -------: | ----------: | --------------: |
| Organic search | 12,480 | 15,902 | 509 | 3.2% |
| Direct | 6,204 | 7,731 | 286 | 3.7% |
| Social | 3,215 | 3,840 | 61 | 1.6% |
| Email | 1,962 | 2,388 | 127 | 5.3% |
| AI assistants | 418 | 455 | 21 | 4.6% |GitHub-flavoured table. | inside a cell is escaped as \|.
Every cell is escaped. Add your own class or CSS.
RFC 4180: cells with separators, quotes or line breaks are quoted. Choosing Tab downloads a .tsv file.
Preview
The table as it was read. Empty cells show as a dot.
| Channel | Visitors | Sessions | Conversions | Conversion rate |
|---|---|---|---|---|
| Organic search | 12,480 | 15,902 | 509 | 3.2% |
| Direct | 6,204 | 7,731 | 286 | 3.7% |
| Social | 3,215 | 3,840 | 61 | 1.6% |
| 1,962 | 2,388 | 127 | 5.3% | |
| AI assistants | 418 | 455 | 21 | 4.6% |
Version v1.0Updated Update history
Check how the table was read, then copy
Every conversion first turns the input into a grid of cells, shown in the preview, and then writes that grid out. If the preview looks right, the output is right.
Rows and columns
Data rows exclude the header. If the column count is higher than expected, a cell probably contains the separator: look for a comma inside an unquoted CSV value.
How the table was read
Which format was detected, and every place where something had to be adjusted: merged cells split, short rows filled, empty trailing columns removed.
Alignment
Markdown alignment lives in the separator row: :--- left, :---: centered, ---: right. Right-aligned numbers are easier to compare down a column.
Preview
The grid exactly as it will be written, header shaded. Empty cells show as a dot so you can spot a shifted row.
Cell content is copied as text. Formulas, number formats, colours and merged cells from the spreadsheet do not survive a copy and paste; Excel puts only the displayed values on the clipboard.
Convert a table in three steps
Works for reports you paste into a README, a blog post, a ticket or a chat message.
-
1
Copy the cells
In Excel, Google Sheets, Numbers or a report table, select the cells and press Ctrl+C (⌘C on a Mac). An HTML table, a Markdown table, CSV or JSON works too.
-
2
Paste and pick a format
Paste into the box and choose Markdown, HTML, JSON or CSV. Check the header and alignment options.
-
3
Check the preview, then copy
If the preview looks like your table, copy or download the result. Tab-separated output pastes back into a spreadsheet.
How each format is read and written
Reading is forgiving; writing follows the published rules of each format, so the result works in GitHub, CMSs, spreadsheets and code.
- Excel and Google Sheets copy cells as tab-separated text, with line breaks between rows. Cells containing a line break are wrapped in quotes, so they are read with CSV quoting rules
- CSV follows RFC 4180. The separator (comma, semicolon, tab or pipe) is detected from the first lines
- Markdown tables follow the GFM spec: the separator row sets the column count and alignment,
\|is a literal pipe, missing cells are empty and extra cells are dropped - HTML tables are read row by row from thead, tbody and tfoot. colspan and rowspan keep the content in the first cell
- JSON can be an array of objects (keys become the header, nested objects become
user.idcolumns), an array of arrays, a column object such as{"a": [..], "b": [..]}, or JSON Lines
| Output | Result for "Organic search | 12,480 | 3.2%" |
|---|---|
| Markdown | | Organic search | 12,480 | 3.2% | |
| HTML | <td>Organic search</td><td style="text-align: right">12,480</td>… |
| JSON, numbers on | {"Channel": "Organic search", "Visitors": 12480, "Conversion rate": "3.2%"} |
| CSV | Organic search,"12,480",3.2% |
A channel report, from Excel to Markdown
The default example is a channel table exported from an analytics report and copied from Excel: 5 channels, 5 columns.
| Column | Detected as | Markdown alignment | JSON value (numbers on) |
|---|---|---|---|
| Channel | Text | Left (---) | "Organic search" |
| Visitors | Number with thousands separator | Right (--:) | 12480 |
| Sessions | Number with thousands separator | Right (--:) | 15902 |
| Conversions | Number | Right (--:) | 509 |
| Conversion rate | Percentage | Right (--:) | "3.2%" (kept as text) |
Conversion rate here is conversions ÷ sessions: 509 ÷ 15,902 = 3.2%. Percentages stay text in JSON because "3.2%" could mean 3.2 or 0.032; convert them in code where you know which one you need.
Where tables break
Almost all broken tables come from the source, not the conversion.
Merged cells
Markdown and CSV have no merged cells. Unmerge in the spreadsheet first, or accept that the content sits in the first cell and the rest are empty.
Line breaks inside cells
A Markdown cell must stay on one line. Breaks become spaces; if the layout matters, use HTML output, which keeps them as <br>.
Numbers that are really text
Order numbers, postcodes and phone numbers with leading zeros must stay text. They do here, but check them before turning numbers on for other tools.
Garbled characters in Excel
Excel on Windows can misread a UTF-8 CSV without a BOM. Tick "Add a BOM", or paste tab-separated text straight into the sheet.
From report to write-up
Most tables people convert come out of a report. TapCub lets you export any report table, or share the report itself.
CSV export
Download any table in a report as CSV, then paste it here for a Markdown or HTML version.
Learn moreShare links
Send a read-only link to people without an account instead of pasting a snapshot.
Learn moreWeekly and monthly reports
Email a snapshot of a report on a schedule (paid plans).
Learn moreTable converter questions
Still have a question?
Chat with the team behind TapCub — we usually reply within a few hours on business days.
How do I convert an Excel table to Markdown?
Select the cells in Excel and copy them, paste them into the box above and leave the output on Markdown. The first row becomes the header, number columns are right-aligned, and the columns are padded so the table also reads well as plain text.
How do I turn a Markdown or HTML table back into Excel?
Paste the table, choose CSV / TSV and set the separator to Tab, then copy the result and paste it into a cell in Excel or Google Sheets; the cells fill in. To save a file instead, download the CSV with "Add a BOM" ticked.
Can it convert an HTML table from a web page?
Yes. Paste the table's HTML (right-click, Inspect, copy the <table> element). Text is read cell by cell; links, images and styling are dropped. If the page has several tables, the first one is converted.
What happens to merged cells?
Markdown, CSV and JSON cannot merge cells. The content stays in the first cell, the cells it covered are left empty, and the result tells you how many merged cells there were.
How do I right-align or center a column in Markdown?
Put a colon in the separator row: ---: right, :---: centered, :--- left. Here, "Column alignment" does it for you, and "Auto" right-aligns columns that contain only numbers.
Why does my table have an extra empty column?
Usually one extra column was selected in the spreadsheet, or every CSV line ends with a separator. Empty trailing rows and columns are removed automatically and reported.
How is this different from the CSV ↔ JSON converter?
The CSV ↔ JSON converter is for data files: nested JSON, JSON Lines, Excel-safe CSV. This tool is for tables you put in documents, so it adds Markdown and HTML and reads pasted spreadsheet cells.
Is my data uploaded?
No. Conversion runs in your browser. The table is not saved, not added to the page address and not sent to TapCub.
Update history
New features, fixes and data refreshes for this tool, newest first.
-
· v1.0
LaunchedFirst release.
Missing something or found an error? Tell us — requests that come up often go into the next update. All tool updates
Get report tables without copying
With TapCub on your site, channels, pages and conversions are already in tables you can export, share or schedule.