You built a table in Excel or Google Sheets, and now you want it in a GitHub README, a Notion page, or a docs file. But copying the table and pasting it does not produce the Markdown table you see on screen. This guide covers the shortest way to turn a spreadsheet selection into a Markdown table, and how to tell why a table came out broken.
Want it now? Select the range in Excel or Google Sheets, copy it, paste it into the CSV to Markdown tool, and hit Run. No upload, no install. If you would rather understand how it works and the gotchas first, read on.
The shortest path: copy, paste, convert
Excel, Google Sheets, and LibreOffice Calc all work the same way.
- Select the range you want to convert and copy it (Ctrl+C / Cmd+C).
- Open CSV to Markdown and paste into the left pane (Ctrl+V / Cmd+V).
- Press Run. The right pane fills with a GitHub-compatible Markdown table.
The first row is treated as the header. The output is ready to paste straight into a README or an issue.
What happens when you copy from a spreadsheet
This is the key difference from a CSV file. When you copy a range from Excel or Sheets and paste it into a text box, what lands in the box is not comma-separated — it is tab-separated text (TSV). Each cell is separated by a tab character, and each row by a line break.
name email role
Mika mika@example.com admin
Noah noah@example.com viewer
The gaps between columns above are tab characters, not spaces. The CSV to Markdown tool auto-detects the delimiter in the pasted text, so tab-separated input converts directly. You do not need to re-save anything as CSV first — pasting is enough.
Convert with FormatArc
CSV to Markdown takes pasted data and shapes it into a GFM-compatible table. There is nothing to install.
Step 1: Open the tool
Go to CSV to Markdown.
Step 2: Copy from the spreadsheet and paste
Select the range in Excel or Sheets, copy it, and paste into the left pane. As noted above, the pasted text is tab-separated, and the tool recognizes that automatically.
Step 3: Hit Run
Press Run. The right pane fills with the Markdown table.


Column counts and separator widths are normalized for you, so the output is ready to copy and paste.
Convert without uploading
Everything runs in the browser. Pasted data is never sent to a server. Internal sales sheets, customer lists, and other spreadsheets you would rather not share can be converted safely. For how this differs from upload-based online converters, see are online converters safe?.
Why a table comes out broken — and how to fix it
Paste-and-Run works for normal copies, but a few patterns can break the result. Knowing the cause makes the fix quick.
Commas in numbers shift the columns
This is the most common one. If many cells contain a thousands separator like 1,200,000, the delimiter auto-detection can pick the comma instead of the tab, splitting numbers mid-value and shifting columns. As long as the paste stays tab-separated, commas inside values are safe — but when comma-containing cells dominate, detection tips toward the comma.
Two ways to fix it:
- Remove the thousands-separator display in the spreadsheet (set the number format to plain, no commas) before copying.
- If you need to keep the separators, export the data as a CSV with the numeric fields quoted, then paste that instead.
Pipes inside cells
If a cell contains |, it cannot be told apart from a column separator as-is. FormatArc escapes it as \| automatically, so you do not need to handle it on the paste side.
| x | y |
| --- | --- |
| foo\|bar | baz |
Newlines inside cells
The Markdown table spec has no way to represent a line break inside a cell. FormatArc replaces them with spaces. If you need a visible line break, put an explicit <br> tag in your source data — though whether <br> renders as a break depends on where you paste it (GitHub, Notion, and Qiita differ).
Ragged rows
If the header has 3 columns but a data row has 4, the columns past the header count are dropped. If a data row is shorter, the missing cells are padded with empty strings, so the output stays a valid table. For how empty cells behave, the GFM table cheatsheet is a useful reference.
Direct copy vs. saving as CSV
There are two entry points from a spreadsheet to Markdown.
- Copy and paste directly (tab-separated): fast and simple. This is enough most of the time.
- Save as a CSV file first, then paste: better when you need to work around comma thousands separators, or reuse a CSV you already have.
For converting from a CSV file or CSV string, the full steps are in How to Convert CSV to a Markdown Table. For background on CSV itself, see What is CSV.
Where the converted table goes
GitHub READMEs
API endpoint lists, supported options, library comparisons — README tables show up constantly. Keep the source in a spreadsheet, and updating means re-pasting rather than hand-editing. For README-specific layout, see Building a GitHub README table.
Pull requests and issues
Benchmark numbers and test-case lists read better as tables, making them easier for reviewers to follow. Aggregate the data in a spreadsheet, convert, paste.
Notion, Obsidian, Zenn, Qiita
These all speak Markdown. Turning spreadsheet data into a Markdown table removes the need to reformat every time you move between platforms.
LLM context
Feeding a table to ChatGPT, Claude, or Gemini works better as Markdown than as raw HTML: it uses fewer tokens and is extracted more accurately. See Markdown vs HTML for LLMs for measured numbers on token cost and extraction accuracy.
Wrapping up
When you copy a table from Excel or Google Sheets, you get tab-separated text. CSV to Markdown auto-detects that, so select the range, copy, paste, and hit Run to get a Markdown table back. Only when commas in numbers shift the columns do you need to drop the formatting or route through a saved CSV.
To fine-tune table syntax and alignment, see Tables in Markdown: Syntax, Alignment & Copy-Paste Examples. For a quick syntax reference, the GFM table cheatsheet is also handy.