What a Markdown table is
A Markdown table is a plain-text grid that GitHub Flavored Markdown (GFM) renders as a table. Each row is one line. Cells are separated by the pipe character |. The second line is the separator: three or more dashes per column. Everything above that line is the header. Everything below is the body. That is the format GitHub uses in README files, issues, and pull requests, and the format Obsidian shows in reading view.
Alignment is encoded on the separator with colons. A colon on the left (:---) left-aligns the column. A colon on the right (---:) right-aligns it. Colons on both ends (:---:) center it. Dashes alone (---) leave alignment to the renderer, which is usually left. This generator writes those colons from the alignment control above each column.
People search for “markdown table generator”, “create markdown table”, “excel to markdown table”, and “csv to markdown table” when they have cells in a spreadsheet and need pipes for a README, an Obsidian note, or a prompt. Counting pipes by hand is slow once a cell contains a pipe, a line break, or a ragged row. The tool above does that counting in the browser and keeps the grid editable.
A worked example: CSV in, table out
Click Sample CSV in the tool, or paste the block below. It is a three-column comma-separated list with a header. The Markdown under it is exactly what this page emits with First row is header and Pretty-print turned on, and no extra alignment colons.
CSV
Name,Role,Focus Ada Lovelace,Analyst,Notes Alan Turing,Engineer,Prompts
Markdown
| Name | Role | Focus | | ------------ | -------- | ------- | | Ada Lovelace | Analyst | Notes | | Alan Turing | Engineer | Prompts |
“Ada Lovelace” is the widest Name cell, so pretty-print pads “Name” and “Alan Turing” to that string length. Role pads to “Engineer”. Focus pads to “Prompts”. The separator uses the same widths. Turn pretty-print off and the padding spaces go away; GitHub still renders the same table. Quoted CSV such as "London, UK" keeps the comma inside the cell. A tab-separated paste from Sheets does the same for commas that were already in the spreadsheet.
Tips, destinations, and limits
GitHub and GitLab render these tables in README files, wikis, issues, and pull requests. Obsidian renders them in preview and reading view; a downloaded .md file drops into a vault the same way the Obsidian workflow describes for clipped pages. Notion imports a pasted Markdown table for ordinary rows and columns. ChatGPT, Claude, Gemini, and Perplexity read the pipes as structure in a prompt, which is usually clearer than a screenshot. After you copy, paste the Markdown into the Token Counter if the prompt budget matters.
GFM has no merged cells and no real multiline cells. A newline in a cell becomes <br> so the line can break in GitHub and in this Preview tab. A pipe in a cell is escaped as \|. Ragged rows are padded with empty cells so every row has the same column count. Unicode, including Chinese, Japanese, Korean, and emoji, is kept. Pretty-print pads by JavaScript string length, so CJK and other wide characters can make the raw pipes look uneven in a monospace editor. The rendered table does not use that padding.
The grid stops at 100 columns and 1000 rows. A paste longer than 200,000 characters is truncated, and the status line says so. Empty cells are valid once any cell has text; Copy and Download stay disabled on a blank grid. Markdown that has pipes but no dash separator is loaded as pipe-separated values. A spreadsheet that uses semicolons (common in Europe) is detected from the first row.
If the table already exists as HTML, convert that markup with HTML to Markdown. If it sits on a public page, URL to Markdown fetches the article on the server. When the pipe table is done and a CMS or a newsletter needs HTML, paste the Markdown into Markdown to HTML. A text-based PDF can go through PDF to Markdown, where reconstructed tables are best-effort. Those paths start from a document. This generator starts from cells. A whole .csv or .tsv file, including a semicolon export, can go through CSV to Markdown. A JSON array or JSON Lines log can go through JSON to Markdown. Neither page opens this grid for you. Copy the Markdown and paste it here when you still want to edit cells.
Compared with writing pipes by hand
Writing a small table by hand is fine: three columns, a handful of rows, no pipes inside cells. The work grows when you add a column, when one row is short, or when a cell contains |. You recount every line. This generator keeps one grid, pads ragged rows, and escapes pipes and newlines as you type. Pretty-print is optional padding for people who read the raw file; GitHub ignores those extra spaces.
HTML to Markdown is the better path when the table is already a <table> in a page or an export. That tool also stays in the browser and uses the same Turndown pipeline as the WebInk extension. The extension itself is for the tab you already opened: it extracts the article, including tables in that article, and can send the Markdown on. It does not open an Excel file. Use this page for the spreadsheet, the extension for the web page, and the tools hub when you need to pick by input type.
| Job | This generator | Hand-written | HTML to Markdown |
|---|---|---|---|
| Start from spreadsheet cells or CSV | Yes | Manual | No |
| Start from an HTML <table> | Paste as text only | Rewrite | Yes |
| Column alignment colons | Yes | By hand | From HTML |
| Escape pipes and newlines | Yes | By hand | From HTML |
| Runs in the browser | Yes | Yes | Yes |
| Merged cells | No | No | No |
The extension clips web pages. It is a separate product and is not a spreadsheet importer.