Skip to content
FormatKit

Free online table generator

One grid, nine table formats

Build the table once in the grid and take it away as HTML, Markdown, CSV, TSV, JSON, SQL INSERT statements, LaTeX, reStructuredText or a box-drawn ASCII table — free, with no signup and nothing to install. Each format brings its own settings, from the SQL identifier quoting to the LaTeX rule style, and the output is rebuilt as you type. Spreadsheet rows on the clipboard load straight into the grid.

  • 100% free
  • No signup
  • 9 output formats
  • Paste from a spreadsheet
  • Up to 4,000 cells
Editable grid, 4 columns by 3 rows
1
2
3

Copy a block of spreadsheet cells and press Ctrl+V anywhere on this page to replace the grid with them.

Options for HTML
<table>
  <thead>
    <tr>
      <th scope="col" style="text-align:right">id</th>
      <th scope="col">workspace</th>
      <th scope="col">plan</th>
      <th scope="col" style="text-align:right">seats</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align:right">1</td>
      <td>Northwind</td>
      <td>team</td>
      <td style="text-align:right">24</td>
    </tr>
    <tr>
      <td style="text-align:right">2</td>
      <td>Contoso</td>
      <td>enterprise</td>
      <td style="text-align:right">310</td>
    </tr>
    <tr>
      <td style="text-align:right">3</td>
      <td>Initech</td>
      <td>free</td>
      <td style="text-align:right">3</td>
    </tr>
  </tbody>
</table>

HTML · 30 lines · 709 characters · from 3 data rows

How to generate a table in any format

Data in, format chosen, file out.

  1. Get the data into the grid

    Type into the cells, use Add row and Add column, or copy a block of spreadsheet cells and hit the paste shortcut, ⌘V or Ctrl+V, from anywhere here — tab, comma and semicolon separated text all load, and so does a Markdown table you paste back in. Flip axes swaps rows for columns when the data arrived the wrong way round.

  2. Pick the format, then its options

    The tab strip switches between HTML, Markdown, CSV, TSV, JSON, SQL, LaTeX, ASCII box and reStructuredText, and the row underneath changes with it: a table name and a quoting dialect for SQL, three object shapes for JSON, booktabs or hline for LaTeX, four border sets for the ASCII output, grid or simple for reST.

  3. Copy it or save it with the right extension

    The output pane updates on every keystroke, so there is no Generate button to press. Copy takes the current format to the clipboard, and Save writes table.html, table.md, table.csv, table.json, table.sql, table.tex, table.txt or table.rst as appropriate.

Technical specifications

Output formatsNine — HTML, Markdown, CSV, TSV, JSON, SQL INSERT, LaTeX, reStructuredText and box-drawn ASCII
HTML optionsthead and tbody sections, scope on header cells, alignment as an inline style, a utility class, or nothing
JSON shapesArray of objects, array of arrays, or an object of columns; optional typing of numbers, booleans and blanks
SQL optionsTable name, plain / MySQL backtick / Postgres double-quote identifiers, one multi-row statement or one per row, optional CREATE TABLE
LaTeX optionsbooktabs rules or \hline, and an optional floating table environment with a caption and a label
ASCII bordersFour sets — box drawing, rounded corners, double lines, and plain + - | for terminals without Unicode
Delimited outputRFC 4180 quoting, an optional quote-everything mode, and comma, semicolon, pipe or tab separators
Grid ceiling4,000 cells; the output is rebuilt on every keystroke in under 5 ms at that size
Processing locationYour browser — no row of the grid is uploaded
PriceFree, no signup, no export count

Frequently asked questions

Which delimited format should I pick for a spreadsheet?

TSV if the data is going straight into a spreadsheet by paste, CSV if it is going in as a file. A tab-separated block pastes into Excel, Google Sheets and Numbers without an import dialog, because tabs are what those applications put on the clipboard themselves. For files, note that Excel on a machine set to a European locale reads a comma-separated file as one column and expects semicolons instead — the separator control covers that case, and it is the single most common reason a CSV opens looking broken.

Why are the numbers in my JSON quoted?

They are not, unless you untick “Numbers and booleans unquoted”. With it on, a cell matching an integer, decimal or exponent form becomes a JSON number, true and false become booleans, an empty cell becomes null, and everything else stays a string. Turn it off when the values only look numeric — a zip code, a phone number, an order reference with leading zeros — because JSON numbers cannot preserve the leading zero and will silently drop it.

Are the SQL statements safe to run as they are?

The quoting is correct: an apostrophe inside a value is doubled, which is the SQL standard escape, an empty cell becomes NULL rather than an empty string, and column names are lowercased and stripped to letters, digits and underscores so they are valid identifiers. What the generator cannot know is your schema — every column in the optional CREATE TABLE is typed TEXT, there are no keys or constraints, and nothing is parameterised, so treat the output as a seed script or a fixture rather than something to point at production.

Does the LaTeX output need a package?

Only for the default style: \toprule, \midrule and \bottomrule come from booktabs, so add \usepackage{booktabs} to your preamble. Untick it and you get plain \hline rules with vertical bars in the column specification, which needs nothing at all. Cell text is escaped for the ten characters LaTeX treats as special — ampersand, percent, dollar, hash, underscore, braces, tilde, caret and backslash — so a value like 50% or user_id compiles instead of erroring.

Why do the ASCII box borders look ragged in my terminal?

Because the columns are padded by counting characters, and some characters are drawn two cells wide. CJK ideographs, most emoji and a few symbols occupy two terminal columns while counting as one character, so a column containing them ends up one cell short per occurrence. There is no fix that works everywhere — terminal width tables disagree between emulators — so if your data is Latin text the borders line up exactly, and if it is not, the plain + - | style tends to look less broken than the box-drawing one.

How is this different from the Markdown table generator?

That page does one format properly and this one does nine adequately. If the destination is a README or a pull-request comment, use the Markdown table generator: it shows the table the way a repository host would render it, offers padded and compact pipes, and re-imports an existing table for editing. Come here when the same rows have to leave as something else — an HTML table for a page, INSERT statements for a fixture, LaTeX for a paper, or a box-drawn table for a terminal help screen.

Can I turn my rows into columns?

Press Flip axes and the grid is transposed — the header row becomes the first column and each old column becomes a row. It is the fastest fix for data that arrived the wrong way round, which happens constantly with exported metrics where every series is a row and every date is a column. The alignment settings reset when you flip, because they belonged to the old columns.

About serialising a table

Underneath all nine outputs is the same object: a header row, some body rows, and one alignment per column. What differs is how each format answers three questions that every table syntax has to answer. First, what happens when the data contains the separator — CSV wraps the field in quotes and doubles any quote inside it, per RFC 4180; TSV has no escape mechanism at all, which is why a tab can simply never appear in a TSV cell; Markdown escapes the pipe with a backslash; LaTeX has ten special characters to escape rather than one. Second, how alignment is expressed — colons in Markdown’s delimiter row, letters in LaTeX’s column specification, an inline style in HTML, and nothing at all in CSV or JSON, which have no presentation layer to align. Third, whether a cell has a type: JSON and SQL distinguish 42 from “42”, and the other seven formats do not.

Some things exist in only a few of the nine, and it is worth knowing which before you design a table around them. Merged cells are available in HTML, in LaTeX through \multicolumn, and in reStructuredText grid tables — and nowhere else, so a grid built here deliberately has no merge button rather than one that quietly stops working in six of the outputs. Multi-line cells are the same story: HTML and reST grid tables hold them, Markdown needs a <br>, and CSV can hold a newline inside a quoted field but half the tools that read CSV will still break on it.

For choosing between them: HTML when the table is going into a page and you want real semantics; Markdown for a README or an issue, and the Markdown table generator does that one job with a rendered preview; CSV or TSV to hand data to a spreadsheet; JSON for a test fixture or an API mock; SQL for seeding a development database; LaTeX for a paper; ASCII for a terminal help screen or a code comment. If the data started as a delimited file, checking it in the CSV viewer first will tell you whether the header row and the delimiter were read the way you expected.

Where the data goes

Nowhere. The grid is state in this tab and all nine serialisers are JavaScript that arrived with the page, so a customer list or an unreleased pricing table is turned into SQL on your own machine with no request leaving it. Nothing survives a reload.