Markdown table generator from CSV or TSV

Paste rows from a spreadsheet or CSV and get an aligned Markdown table. Nothing leaves your browser.

How it works

  1. Paste your rows
  2. Choose the delimiter, header and alignment
  3. Copy the Markdown table

From rows to a table

Paste rows copied from a spreadsheet (cells separated by tabs) or from a CSV file. Each line becomes a table row and each cell a column. The first row becomes the header by default; turn that off and an empty header row is added, because a Markdown table cannot exist without one. The line under the header holds the alignment marks: :--- for left, :---: for center and ---: for right, one choice for every column. Cells are padded with spaces so the raw Markdown lines up in a monospaced editor, and widths are counted in characters, so é or an emoji counts as one. Wide characters such as Chinese are one character each, but may look wider than a letter in your editor. Turn padding off to write each cell as short as possible.

Delimiters and quoted fields

Auto reads the first non-empty line, ignoring anything inside double quotes. If it contains a tab, the delimiter is a tab. Otherwise it is the one of comma, semicolon and pipe that appears most often, with ties going to comma, then semicolon, then pipe. A line with none of them is read as a single column. You can also pick the delimiter yourself. Quoted CSV fields work as in common spreadsheet exports: a field that starts with a double quote can hold the delimiter and line breaks, and two quotes in a row stand for one quote. Unquoted cells are trimmed of spaces at both ends. A quote in the middle of an unquoted cell is kept as a plain character, and blank lines are skipped.

Escaping and uneven rows

A pipe inside a cell would split the column, so it is written as \| in the result. A line break inside a quoted cell becomes an HTML line break tag, which GitHub and most renderers show as a break. Backslashes and other Markdown symbols such as * or _ are not changed, so they keep their Markdown meaning. If some rows have fewer cells than the widest row, they are filled with empty cells and a notice says how many rows were padded. If a quoted field is never closed, the rest of the text becomes that field and a notice says so. The result shows the number of rows read (header included) and the number of columns.

Limits

Text up to 1,000,000 characters is accepted. A table whose padded size would pass 5,000,000 characters, for example one very long cell above thousands of rows, gets a message asking you to turn padding off or use less text. The work happens in your browser, and neither your rows nor the table are uploaded or stored. Only your choices are remembered in this browser.

Frequently asked questions

Can I paste straight from Excel or Google Sheets?

Yes. Copied cells arrive separated by tabs, and Auto detects that. Cells that contain line breaks arrive in double quotes, and those become line break tags in the table.

Why does the header row look empty?

You turned off First row is the header. Markdown tables need a header, so a blank one is added above your rows. Turn the option back on to use your first row.

How does Auto choose between comma and semicolon?

It counts both in the first non-empty line, outside quotes, and takes the more frequent one. A tab always wins, and a tie goes to comma. If a European export is read wrongly, choose Semicolon yourself.

Does it escape other Markdown characters?

Only the pipe, which would break the columns, and line breaks. Characters such as * and _ keep their Markdown meaning, so write them with a backslash in your data if you want them shown literally.

Is my data uploaded?

No. The rows are processed in your browser, in this tab, and no server receives them. Your choices are saved in this browser, the text is not.