Paste a range from a spreadsheet or a CSV and get the same table back in four shapes at once: rendered, as HTML, as Markdown and as a plain text box. Pipes and angle brackets are escaped, uneven rows are padded rather than trimmed, and numeric columns can align themselves to the right.
Table Generator - CSV to Markdown, HTML and Text Tables
Paste a range from a spreadsheet or a CSV and get the same table back in four shapes at once: rendered, as HTML, as Markdown and as a plain text box. Pipes and angle brackets are escaped, uneven rows are padded rather than trimmed, and numeric columns can align themselves to the right.
Parameters
Enter data for calculations
💡 Fill in all required fields to unlock the calculate button
Tables, and the four places they have to live
The same three columns and four rows have to survive in a spreadsheet, a README file, a web page and a message where nothing but plain characters gets through. Four notations, four sets of rules, and a copied range that works in one of them and falls apart in the next. This tool takes what you paste and hands back all four shapes at once: a rendered table, its HTML, a Markdown block and a plain text box drawn with dashes and pipes. A pasted range of 3 columns and 3 rows comes out as a header row plus 3 body rows, with the two numeric columns already aligned to the right.
It also works the other way round. If there is nothing to paste yet, ask for an empty grid of a given size and fill it in afterwards.
How to build a table, step by step
- Mode - convert what you paste, or start from an empty grid. Everything below adapts to the choice.
- Your rows - one row per line. Copying a range straight out of a spreadsheet gives you tab separated text, which is the cleanest input this tool can get.
- Column separator - leave it on automatic unless the detection guesses wrong. Automatic picks the character that splits every line into the same number of pieces.
- First row is a header - a header changes the meaning of the table, not just its look. Screen readers announce it before every cell in the column below.
- Column alignment - one setting for all columns, or the mixed option, which reads the data and right aligns any column holding nothing but numbers.
- Read the results - the rendered table, the Markdown block, the plain text box, and a line describing what was detected and what was padded.
The four notations, side by side
They are not interchangeable, and the differences matter more than they look. Merged cells exist in one of them only. Alignment exists in two. Accessibility information exists in one. Choosing the wrong one costs you a rewrite later.
| Notation | Where it is read | Alignment | Merged cells | The catch |
|---|---|---|---|---|
| HTML | web pages, email, anything with a browser engine | yes | yes | verbose, and any stray character from your data has to be escaped |
| Markdown | README files, pull requests, issue trackers, wikis | yes | no | tables are an extension, not part of the core Markdown specification |
| Plain text box | terminals, code comments, chat, log files | by padding | no | needs a monospaced font, or the columns drift apart |
| Separated values | spreadsheets, databases, almost every import dialog | no | no | this is the input side of this tool rather than its output |
Markdown alignment, the whole syntax
Alignment in a Markdown table lives entirely in the second line, the one made of dashes. A colon on the left means left, a colon on both sides means centered, a colon on the right means right, and no colon at all leaves it to whatever is rendering the page. That line is also mandatory: a Markdown table without it is not a table, it is three lines of text with pipes in them.
| Dash row | Meaning | Typical use |
|---|---|---|
:--- | left aligned | names, labels, descriptions, anything you read left to right |
:---: | centered | short status words, ticks and crosses, single characters |
---: | right aligned | money, counts, percentages, anything you compare down a column |
--- | unspecified | left to the renderer, which usually means left |
The mixed option applies that third row for you. Paste a sales range and the tool produces | :--- | ---: | ---: |, because the first column holds region names and the other two hold figures. A single stray word in a column is enough to keep it left aligned, which is deliberate: a column that is numbers except for one not measured is not a numeric column.
What the same data looks like in each shape
Three regions, two figures each, pasted straight from a spreadsheet as tab separated text. The Markdown block comes out like this:
| Region | Units | Revenue | | :--- | ---: | ---: | | North | 120 | 4800 | | South | 95 | 3610 | | West | 143 | 5720 |
And the plain text box, with every column padded to its widest entry and the two numeric columns pushed right:
+--------+-------+---------+ | Region | Units | Revenue | +--------+-------+---------+ | North | 120 | 4800 | | South | 95 | 3610 | | West | 143 | 5720 | +--------+-------+---------+
Notice that the Markdown does not line up in the source and does not need to. Renderers ignore the spacing entirely. The plain text box is the opposite: the spacing is the whole mechanism, which is why it only holds together in a monospaced font.
Four things that quietly break tables
10 | 20 silently turns one cell into two and every row below it stops lining up. The fix is a backslash: this tool writes 10 \| 20, which renders as the original text. Almost nobody escapes this by hand, and it is the single most common reason a pasted table comes out crooked.
th rather than td, and carries scope="col" so assistive software knows the cell labels the column beneath it rather than the row beside it. The HTML this tool produces includes that attribute; a table pasted from a word processor usually does not.
Reading the summary line
Under the results the tool states what it decided, in the order it decided it. A line reading 3 columns by 3 body rows, plus a header row. Separator read as: tab. 2 columns were read as numeric and set right aligned. tells you three separate things: the shape it settled on, the character it split your text with, and how the mixed alignment classified each column. If any of those is wrong, the cause is almost always the separator, and overriding it from automatic to an explicit choice fixes the rest at once.
Frequently asked questions
Related tools
Business Name Generator
Combines industry vocabulary with your own keywords into name candidates worth checking - Open the generator
QR Code Generator
Turns a link, a Wi-Fi network or a contact card into a scannable code, drawn in your browser - Open the generator
Lorem Ipsum Generator
Fills the cells of a draft layout with placeholder copy of a chosen length - Open the generator
Anagram Generator
Rearranges the letters of a word and counts how many arrangements exist - Open the generator
Barcode Generator
Draws EAN-13, EAN-8 and UPC-A symbols with the check digit worked out - Open the generator