Markdown Table Generator

Paste rows from Excel, CSV or tab-separated text and get a clean Markdown table in one click.

Paste straight from a spreadsheet (tabs), CSV, or an existing Markdown table. Quoted fields follow CSV rules.

Output options
Rows0
Columns0
Detected delimiter—

    

How to use

  1. Copy a block from Excel, Sheets or Notion and paste it. Tabs are detected automatically.
  2. CSV also works. Wrap a field containing commas in double quotes and the comma stays inside.
  3. Pick an alignment: left for text, right for numbers and currency, center for short status values.
  4. Turning off the header option produces a blank header row, because Markdown requires one.
  5. Press Copy table and paste the source into a README, doc or note app.

FAQ

What if a cell contains a pipe character?
A pipe separates columns in Markdown, so any pipe inside a cell is escaped as \| and still renders as a pipe. If the data is full of pipes, paste it as tabs or commas and let the generator escape on output.
Why does every table need a header row?
Markdown table syntax requires a separator row, so the first row is always the header. When the header option is off, the page emits a blank header row. The rendered table has no visible text at the top, and the structure stays valid.
Why do Chinese columns look misaligned in the source?
Padding counts characters, and a CJK character usually takes twice the visual width of a Latin one. The raw source looks uneven while the rendered table is fine. Turn off padding if you mostly care about the source view.
How large a table can it handle?
Tens of thousands of characters parse fine, since everything runs locally. For thousands of rows, trim the columns in your spreadsheet first. Markdown is a poor fit for very wide datasets.

How to use

  1. 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.

  2. Or paste CSV

    Comma-separated text works too. Wrap a field containing commas in double quotes and the commas stay inside the cell.

  3. Pick an alignment

    Left for text, right for amounts and numbers, center for short status values. Unspecified leaves the choice to the renderer.

  4. 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.

  5. 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

  1. 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.

  2. 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.

  3. 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.

Related Tools