Fill in the grid, set an alignment for each column, and the same table is written out as Markdown, HTML, CSV or plain text. Existing data can be pasted in instead: the delimiter is detected by trying comma, semicolon, tab and pipe and keeping whichever produces the most consistent column count, so European semicolon files and tab-separated exports load without being told what they are.
Quoted fields are parsed properly, which means a cell containing the delimiter survives the load rather than splitting into two columns. On the way out, a pipe inside a cell is escaped for the Markdown form, because an unescaped one ends the cell and produces a table that looks correct in the source and renders broken. The HTML form marks header cells with a scope so assistive technology can read a cell back together with its column name.
What each format can and cannot carry
-
Markdown cannot span or nest:
there is no colspan, no rowspan and no table inside a cell. If your data needs any of those, the HTML output is the only one of the four that can express it.
-
Aligned padding is for humans reading the raw file:
it renders identically to the compact form. Choose compact when the Markdown goes into version control, since re-padding every row after one edit turns a small change into a large diff.
-
A table is for data, not layout:
screen readers announce row and column headers to help someone navigate a grid of values. Using a table to position things announces a structure that carries no meaning and makes the page harder to follow.
-
The header row is what makes the HTML accessible:
turning it off produces a table of plain cells with nothing to relate them to. Keep it wherever the first row really is a set of headings.
What survives the round trip when data is pasted in
Pasted data does not need to say what it is. The [msm_tool slug="table-generator"] tries comma, semicolon, tab and pipe as the delimiter and keeps whichever produces the most consistent number of columns across every row, which is why a European export using semicolons or a tab-separated file loads without anyone telling it which one it is looking at.
Quoted fields are parsed properly during that process, so a cell that legitimately contains the delimiter — a comma inside an address, for instance — survives as one cell instead of splitting into two. When a row loads with the wrong number of columns, the usual cause is the opposite case: that character sitting inside a cell unquoted, which the detection has no way to tell apart from a genuine column break.
What breaks a Markdown table after the fact
A pipe character ends a cell in Markdown's table syntax unless it is escaped, so the export escapes it automatically on the way out. A table that renders broken after leaving here has almost always been hand-edited afterwards, with a pipe typed back in raw.
Two Markdown outputs, rendering identically
Aligned columns and compact columns produce the exact same table wherever Markdown is rendered — the padding is purely for a person reading the raw source file. Compact is the better choice for anything going into version control, because re-aligning every column after a single edit turns a one-line change into a diff touching the whole table.
Where Markdown stops and HTML has to take over
Markdown tables have no way to span or nest: no colspan, no rowspan, no table inside a cell. If the data genuinely needs any of those, HTML is the only one of the four exports that can express it at all, and even then the span attributes have to be added by hand afterwards — the output is the plain grid, not the merge.
Why the header row is not just a cosmetic first line
In the HTML export, header cells carry a scope attribute so a screen reader can announce a cell together with the column heading it belongs to. Turning the header row off produces a grid of plain cells with nothing tying a value to what it means, which is also why a table should hold data rather than being used to position things on a page — the structure it announces to assistive technology has to be real.
Nothing leaves the browser
The grid, the delimiter detection, the parsing and all four exports run entirely client-side, so pasting something you would not want sent anywhere does not send it anywhere.