Your data never leaves your device — 100% local processing

Markdown table generator

Paste CSV or Excel data and get a Markdown table — ready for GitHub, Notion and READMEs.

0 B uploaded — this page has not sent your files anywhere?

Private by design — every conversion runs right inside your browser, so your data is never uploaded anywhere. Safe for customer lists, sales figures and personal data. It even works offline.

Other conversion sites upload your spreadsheet to a server, process it there, and say they delete it after a while. Until that happens, your rows sit on someone else’s server. Here there is no upload step at all. The more sensitive the data — customer lists, payroll, anything with personal identifiers — the more that difference matters. See how to verify it →

More table converters

All-in-one converterCSV → ExcelExcel → CSVJSON → CSVCSV → JSONRepair broken CSVMarkdown table maker

What carries over when a spreadsheet becomes a Markdown table?

A Markdown table is plain text split into cells with pipes (|) and hyphens, so once it has more than a few columns, lining it up by hand goes wrong one cell at a time. Paste a cell range from Excel or Google Sheets, or open a CSV or Excel file, and this tool writes a pipe table with the first row as the header. The result appears in the output box, ready to copy or save as a .md file.

A closer look

A GitHub-flavored Markdown table has a header line, a delimiter line such as | --- | under it, and then the data lines. The tool uses the first row it reads as the header and gives every line as many cells as the widest row: short rows are padded with empty cells and completely blank rows are dropped. Each cell gets a single space on either side and no extra padding to line up the columns, so the raw text looks ragged, but the rendered table lines up exactly the same.

Only two things inside a cell are changed. A pipe would end the cell early, so it becomes \|, and because each table row has to sit on one line, a line break inside a cell becomes <br>. Other Markdown symbols such as asterisks, underscores and backticks, and any HTML, are left alone. Values arrive the way they were displayed: CSV and pasted text exactly as written (00123 stays 00123), and Excel files with their cell formatting applied (1,234,568 or 13%, for example).

How to use it

When it helps

README option tablesMove the config keys, defaults and descriptions you keep in a spreadsheet into a table in your GitHub README.
Benchmarks in a pull requestCollect before-and-after response times or bundle sizes in a sheet, then paste them into the PR description as a comparison table.
JSON as a documentation tablePaste a JSON array like [{...}] into the paste tab and its keys become the header, which is handy for showing a sample API response as a table.
Markdown blogs and notesDrop a price comparison or a schedule into a blog or note app that uses a Markdown editor, as a plain-text table.

Common snags

My first data row ended up as the header.The first row is always used as the header. If the range you copied had no header row, copy it again including the header, or type a header line at the top of the paste box before loading.
Numbers come out as 1,234,568 and dates as 1/5/24.Excel files are converted as they are formatted, so thousands separators, rounding and percentages come along, and Excel’s default short date comes out as month/day/two-digit year. Change the format in Excel first (to yyyy-mm-dd, say), or copy the cells and use the paste tab, which takes the text exactly as Excel showed it.
<br> shows up as text where I pasted the table.That is the HTML line break that keeps a multi-line cell on one table row. GitHub renders it as a line break, but editors that do not allow HTML show it literally. In that case replace the line breaks in the source cells, with a comma for instance, and convert again.
Values with asterisks turned italic.Only pipes are escaped. A value wrapped in asterisks, such as *required*, is read as emphasis by most renderers, so put a backslash (\) before each asterisk in the result or wrap the value in backticks.

Tip For a number column, change that column’s --- to ---: in the delimiter line; GitHub then right-aligns it, which makes the digits much easier to compare.

Frequently asked questions

Can I paste straight from Excel?

Yes. Copy a cell range in Excel or Google Sheets and paste it into the paste tab — tab-separated data is detected automatically and becomes a Markdown table.

What about pipes (|) or line breaks inside cells?

Pipes are escaped as \| and line breaks become <br>, so the table never breaks.

My CSV shows garbled characters

sheetmoa reads your file as UTF-8 first. If it finds broken characters (�), it retries only with the Korean legacy encoding EUC-KR (CP949), which Korean Excel uses by default; old .xls files are also read with code page 949. No other legacy encoding is tried. Files saved as UTF-8 (Excel's "CSV UTF-8 (Comma delimited)") open correctly, but a CSV saved in Windows-1252 (what Excel's plain "CSV (Comma delimited)" produces on Western-language Windows) can show broken accents such as "A�o". If that happens, re-save the file in Excel as "CSV UTF-8 (Comma delimited)" and open it again.

Is my data uploaded to a server?

No. Every conversion runs inside your browser and your file is never sent over the network. Safe even for customer lists and confidential spreadsheets.

Is it free?

Completely free — no limits on file count or size, and no sign-up.