Markdown Table Generator
Paste rows from Excel, CSV or tab-separated text and get a clean Markdown table in one click.
How to use
- Copy a block from Excel, Sheets or Notion and paste it. Tabs are detected automatically.
- CSV also works. Wrap a field containing commas in double quotes and the comma stays inside.
- Pick an alignment: left for text, right for numbers and currency, center for short status values.
- Turning off the header option produces a blank header row, because Markdown requires one.
- Press Copy table and paste the source into a README, doc or note app.
FAQ
What if a cell contains a pipe character?
Why does every table need a header row?
Why do Chinese columns look misaligned in the source?
How large a table can it handle?
How to use
- Copy from a spreadsheet
Select a range in Excel, Sheets or Notion and paste it in. Columns arrive as tabs and the page detects them without any conversion.
- Or paste CSV
Comma-separated text works too. Wrap a field containing commas in double quotes and the commas stay inside the cell.
- Pick an alignment
Left for text, right for amounts and numbers, center for short status values. Unspecified leaves the choice to the renderer.
- Handle the header
The first row is the header by default. Turning that off emits a blank header row, because Markdown requires one above the separator.
- Copy the source
Press Copy table to take the full Markdown source into a README, doc or note app, where it renders as a table.
About this tool
Markdown tables are tedious to write by hand. Every row needs pipes, the second row needs separators, and column widths have to be aligned by eye. One renamed field means re-flowing the whole block. Data copied from a spreadsheet already has clear columns, so adding pipes by hand is slow and easy to get wrong. A generator turns that mechanical step into one paste for READMEs, docs and issue triage.
The page splits the text into a grid by the detected delimiter, escapes pipes and newlines in each cell, then pads every column to its widest value. Header, alignment and padding toggle independently, and the output updates as you type. Quoted CSV fields follow the standard rules, so commas and line breaks inside a cell survive. Parsing and generation stay in the browser, and tables with internal data never leave the machine.
How it works
Markdown tables are a GFM extension rather than part of the original spec. The first row is the header, the second row holds the separators, and pipes divide the cells. Colons in the separator set alignment: a leading colon means left, a trailing colon means right, and both mean center. Rows do not have to match in column count because renderers pad to the header. A missing cell still shifts the rest of the row. Separator cells also need at least three dashes, or some renderers ignore the table entirely.
Table width belongs to the renderer, and spaces in the source only affect readability. CJK characters usually take twice the visual width of Latin ones, so padding by character count leaves the source looking uneven while the rendered table is correct. The real hazards are pipes and backslashes. An unescaped pipe becomes a column break, and a stray backslash can swallow the character after it. Line breaks inside cells need a br tag, since most renderers treat a cell as a single line.
When to use it
- A README config table
The docs need environment variables, defaults and notes. Arrange three columns in a spreadsheet, paste them here and drop the Markdown into the README. It is faster than typing pipes and far less likely to drift out of alignment. Adding a variable later means one edit in the sheet and one regenerate.
- Comparing options
A tool selection compares price, concurrency and limits across vendors. Work the numbers out in a spreadsheet, convert the result and paste it into a doc or issue. Reviewers then read the same table instead of squinting at screenshots, and every number change stays traceable to the source.
- A CSV report into a weekly note
An export carries a dozen columns and the weekly note needs three. Delete the extras in the spreadsheet, paste what remains and generate. The source stays traceable and the format stays consistent, so next week is a repeat of the same two steps rather than a new formatting job.
Tips & tricks
- Decide on the columns before writing. A Markdown table wider than six columns is close to unreadable on a phone, so split it.
- Right-align number columns and keep the same number of decimals, which makes the values easy to compare at a glance.
- Use a br tag for line breaks inside a cell, since Markdown table cells cannot hold multiple lines directly.
Things to watch
- Ragged rows
When a row has one cell fewer, everything after it shifts left and no longer lines up with the header. Check the column count first and fill missing values with an empty cell. Empty cells from a spreadsheet export are easy to miss, so scan the row ends after pasting.
- Unescaped pipes
A raw pipe becomes a column break and splits one row into two. The generator escapes it as a backslash plus pipe. Keep that in mind when editing the source by hand, because one missing backslash can break the whole table and take a while to trace.
- Tables that are too wide
A table with a dozen columns scrolls sideways on phones and inside code blocks, so readers miss half of it. Split it in two or move secondary columns into prose. Two narrow tables are easier to read and easier to maintain than one wide grid.