Skip to content

Plain text, tidy table

Markdown table generator

Turn tab-separated spreadsheet cells into a clean Markdown table, or build one directly in the grid. Your data stays in this browser tab.

Paste cells

Paste rows copied from Excel, Google Sheets, or another tab-separated source. The first row becomes the header.

Edit the table

2 rows × 3 columns

Column 1
Column 2
Column 3
Header
Row 1

Safe preview

Cell content is shown as text here. Markdown or HTML inside a cell is not executed.

TaskOwnerStatus
Write docsAdaReady

Generated Markdown

How to create a Markdown table

This editor is for small documentation tables, README comparisons, and release notes that should remain readable as plain text.

  1. Copy a rectangular range from a spreadsheet and paste it into the “Spreadsheet data” box, then choose “Replace grid with pasted cells.” Tab characters separate columns and line breaks separate rows. The first pasted row is treated as the header.
  2. Review every cell in the grid. You can also paste a multi-cell spreadsheet block directly into any grid cell; the editor expands from that starting position when the 100-row and 20-column limits allow it.
  3. Add or remove rows and columns as needed. Choose left, center, or right alignment for each column. Sorting changes body rows only, so the header stays at the top.
  4. Compare the generated source with the safe preview. When the row count, headings, alignment, and values look right, copy the Markdown and paste it into your README, issue, wiki, or Markdown editor.

How the generated syntax works

A common Markdown table uses pipes to separate cells. The first line is the header, and the second line is a delimiter made from dashes. Colons in that delimiter communicate alignment: :--- for left, :---: for center, and ---: for right. The remaining lines are body rows.

The generator pads cells with spaces so the raw source is easier to scan. Those padding spaces do not change the cell value in common table renderers. Empty cells remain present, which keeps every row at the same column count.

A literal pipe inside a cell is written as \| so it is not mistaken for a column boundary. A real line break inside a pasted cell becomes <br>, because ordinary GFM-style tables do not have a portable multiline-cell syntax. Backslashes are escaped before pipes.

The preview deliberately builds a normal HTML table from text nodes instead of executing the generated Markdown. It is useful for checking shape, values, and alignment, but the final rendering can differ between GitHub, a static-site generator, a wiki, or another Markdown dialect.

Worked examples

Project status table

Paste “Task”, “Owner”, and “Status” as the header, followed by two spreadsheet rows. Set Status to center alignment and sort by Owner.

| Task | Owner | Status |
| :--- | :--- | :---: |
| Docs | Ada | Ready |

The header remains first while only the body rows are sorted. The centered delimiter travels with the Status column.

Special characters and line breaks

Enter Plan | Actual in one cell and paste “First line” plus a line break plus “Second line” in another.

| Metric \| view | Note |
| :--- | :--- |
| Plan \| Actual | First line<br>Second line |

The pipe is escaped and the newline becomes <br>. The safe preview displays the text without running any embedded markup.

Where this tool is useful

Use it for feature comparisons, environment matrices, shortcut references, release checklists, or small summaries that remain easy to review in version-control diffs.

Paste an existing spreadsheet range, or edit the grid directly when you only need a few headings and values.

Sorting is a presentation aid, not a calculation. Natural comparison puts Item 2 before Item 10, and empty values last.

Limits and common fixes

  • Only flat tables are supported. Markdown has no broadly portable syntax for merged cells, row spans, or column spans.
  • The import box expects tabs. For CSV with quoted commas or embedded breaks, open it in a spreadsheet and copy the cells.
  • Limits are 100 rows, 20 columns, and 2,000 characters per cell. Split larger data into focused tables.
  • Inline Markdown is preserved in the output but not interpreted by this preview. Check it in the publishing renderer.
  • Leading and trailing whitespace is trimmed, so this tool is unsuitable when those spaces are meaningful data.

Copying and checking the result

Copy and paste as plain text. If clipboard access is blocked, select the code manually. Nothing is uploaded or saved, so keep the result before closing the tab.

Confirm that the destination supports GFM pipe tables and <br>. The preview checks shape and values, not identical styling in every renderer.

Frequently asked questions

Does the first row always become the header?

Yes. A pipe table needs a header and delimiter row, so the first grid row is always exported as the header. Move or edit data before copying if your pasted range did not include headings.

Can I merge cells?

No. Common GFM-style Markdown tables do not provide portable merged-cell syntax. Use separate rows, repeat a label, or choose HTML when merged cells are essential.

Why did my pasted data become one column?

The import box separates columns with tab characters, as produced by copying spreadsheet cells. Raw comma-separated CSV is not parsed there; open it in a spreadsheet and copy the cells.

Is Markdown or HTML in a cell executed?

Not in this preview. It is rendered as text. The copied Markdown still contains your input, so the destination renderer decides how markup is handled; only paste content you trust.

Does sorting change the header?

No. Sorting applies only to body rows and keeps complete rows together. It does not calculate formulas or infer data types beyond natural text-and-number ordering.

Is my table uploaded or saved?

No. Editing, sorting, previewing, and generation happen in this browser tab. There is no account or history, and refreshing the page clears the current table.