How to convert excel / google sheets exports to markdown
- Step 1Export the sheet as CSV — Excel: File → Save As / Export → CSV (UTF-8). Google Sheets: File → Download → Comma-separated values (.csv). Export the single sheet (tab) you want — CSV is one sheet per file.
- Step 2Open the converter — Load CSV to Markdown Table. Drop the exported
.csv, or open it in a text editor and paste the contents. - Step 3Confirm the header row — Spreadsheet exports almost always have column names in row 1, so leave First row is header checked. For a pasted range with no header, uncheck it.
- Step 4Convert — Run the tool. PapaParse parses the export (auto-detecting the delimiter), and the pipe table is built with pipes escaped and in-cell newlines flattened.
- Step 5Sanity-check the columns — Confirm the column count matches the sheet. A row that lost a column usually means a value contained an unquoted delimiter in the export — re-export with proper quoting if so.
- Step 6Paste into the PR or issue — Copy the Markdown and paste it into the GitHub / GitLab description box. It renders as a table on save. Link back to the source sheet in the same comment so reviewers can find the live data.
Exporting CSV from common spreadsheet apps
How to get a clean CSV out of each app, and what the export tends to include.
| App | Export path | Notes that affect the table |
|---|---|---|
| Microsoft Excel | File → Save As → CSV UTF-8 (.csv) | Cells with commas, leading zeros, or Alt+Enter line breaks are quoted automatically; the converter handles all three. |
| Google Sheets | File → Download → Comma-separated values (.csv) | Exports the current sheet only; calculated values, not formulas, are written. |
| LibreOffice Calc | File → Save As → Text CSV (.csv) | Lets you choose the field delimiter; PapaParse auto-detects whatever you pick. |
| Apple Numbers | File → Export To → CSV | One file per table; quoting follows the same RFC 4180 rules the converter expects. |
| Notion / Airtable | Export → CSV (per database/view) | Multi-select and relation fields export as comma-joined text inside a quoted cell — kept whole by the parser. |
Where the converted table renders
The output is standard GFM pipe table syntax. These targets render it without further work.
| Target | Renders pipe tables? | Note |
|---|---|---|
| GitHub (PRs, issues, README) | Yes | GFM is the native dialect; pipe tables render directly. |
| GitLab (MRs, issues, wiki) | Yes | GFM-compatible; same table renders. |
| Obsidian / VS Code preview | Yes | Both render GFM tables in preview mode. |
| Slack message body | No | Slack does not render Markdown tables — paste the data differently or link the PR. |
| Plain CommonMark (no GFM) | No | Pipe tables are a GFM extension; strict CommonMark renderers show the raw pipes. |
Cookbook
Spreadsheet exports turned into PR-ready tables, including the cells that usually cause trouble.
A small Sheets range shared in a PR
Three columns of release data pasted from a Google Sheets CSV export, ready to drop into a pull-request description.
Input (CSV): Version,Date,Status 1.4.0,2026-05-01,Shipped 1.5.0,2026-06-01,In QA Output (paste into the PR): | Version | Date | Status | | --- | --- | --- | | 1.4.0 | 2026-05-01 | Shipped | | 1.5.0 | 2026-06-01 | In QA |
Excel cell formatted with a thousands comma
Excel exports 1,234.50 as a quoted cell. PapaParse keeps it in one column instead of splitting on the comma.
Input (CSV): SKU,Price A-100,"1,234.50" A-200,"998.00" Output (Markdown): | SKU | Price | | --- | --- | | A-100 | 1,234.50 | | A-200 | 998.00 |
Alt+Enter multi-line note from Excel
An in-cell line break (Alt+Enter) is exported as a quoted newline. The converter folds it to a single space so the table row stays valid.
Input (CSV): Feature,Notes Dark mode,"Done. Needs QA on Safari." Output (Markdown): | Feature | Notes | | --- | --- | | Dark mode | Done. Needs QA on Safari. |
Airtable multi-select field exported as CSV
Multi-select values export comma-joined inside a quoted cell. They are preserved as a single cell, not exploded into columns.
Input (CSV): Task,Tags Launch,"urgent, marketing, q3" Output (Markdown): | Task | Tags | | --- | --- | | Launch | urgent, marketing, q3 |
A pasted range with no header row
When you copy a bare range without column names, uncheck First row is header and the tool numbers the columns.
Input (CSV), First row is header = OFF: Ava,Platform,12 Max,Brand,8 Output (Markdown): | Col 1 | Col 2 | Col 3 | | --- | --- | --- | | Ava | Platform | 12 | | Max | Brand | 8 |
Edge cases and what actually happens
Multi-sheet workbook exported once
By designCSV is one sheet per file. Excel and Sheets export only the active tab; other tabs are not in the file. Export each sheet separately and convert each one — one Markdown table per sheet.
Formulas instead of values
Values onlyCSV exports contain calculated values, never formulas. The Markdown table shows whatever the cells evaluated to at export time. Re-export after the sheet recalculates to refresh the table.
Excel UTF-8 BOM on the export
PreservedExcel's CSV UTF-8 writer adds a byte-order mark. PapaParse normally strips it, but if a BOM character clings to your first header cell, delete it in a text editor before converting.
Leading zeros dropped by the spreadsheet
UpstreamIf Excel already turned 00123 into 123 before export, the CSV has 123 and so does the table — the converter cannot recover what the spreadsheet discarded. Format the source column as text before exporting.
Semicolon delimiter from a EU-locale export
Auto-detectedSome EU-locale Excel/LibreOffice installs export with ;. There is no manual delimiter control, but PapaParse auto-detects it, so the conversion usually works without intervention.
A cell containing a pipe character
EscapedSpreadsheet values like Win|Loss are escaped to Win\|Loss so they do not register as a column break in the rendered table.
Very wide sheet (many columns)
SupportedThere is no column-count limit, but wide tables are unreadable on narrow screens and in PR diffs. Consider sharing only the relevant columns, or split into two tables.
Pasting the table into Slack
Not renderedSlack does not render Markdown tables — it shows raw pipes. Share the data as a code block, link the PR, or use a tool that targets Slack formatting; the pipe table itself is for GFM renderers.
Export exceeds the free tier
Tier limitA large export can exceed the Free cap of 1 MB / 500,000 characters / 1 file. Pro lifts this to 10 MB / 5,000,000 characters / 10 files. The character limit is independent of the byte limit.
Frequently asked questions
Will Google Sheets formulas come through?
No — CSV exports contain calculated values, not formulas. The Markdown table reflects whatever the cells evaluated to at export time, and the source sheet stays the source of truth.
How do I refresh the table after the data changes?
Re-export the sheet as CSV and re-run the conversion. There is no live link; embedding a link to the source sheet next to the table helps reviewers find the current data.
What about multi-sheet workbooks?
Export each sheet (tab) separately — CSV is one sheet per file. Convert each export on its own to get one Markdown table per sheet.
Does it render inline in a GitHub pull request?
Yes. The output is GitHub-Flavored-Markdown pipe-table syntax, which renders directly in PRs, issues, and READMEs on GitHub and GitLab.
Will Excel cells with thousands separators split into two columns?
No. Excel quotes those cells on export ("1,234.50"), and PapaParse keeps a quoted field whole, so the comma stays inside one cell.
What happens to an Alt+Enter line break inside a cell?
It is exported as a quoted newline and then folded to a single space in the table, because Markdown pipe-table cells cannot contain real line breaks.
Can I paste the table into Slack?
Slack does not render Markdown tables — you will see raw pipe characters. Use it for GFM targets like GitHub or GitLab, and link the PR in Slack instead.
My export uses semicolons — do I need to change a setting?
No. There is no delimiter setting; PapaParse auto-detects comma, tab, semicolon, or pipe delimiters. Semicolon-separated EU-locale exports usually convert without any change.
Is the spreadsheet uploaded to a server?
No. PapaParse runs in your browser, so confidential spreadsheet data never leaves the page while you prepare a table for a public PR.
Can I set right-alignment for numeric columns?
Not from the tool — the separator row is always ---. Add --: to the separator line by hand after conversion if you want right-aligned numbers.
How large an export can I convert?
Free allows 1 MB / 500,000 characters in one file; Pro 10 MB / 5,000,000 / 10 files; Pro-media 50 MB / 20,000,000; Developer 500 MB with no character cap.
My data is already JSON exported from an API — what then?
Use JSON to Markdown Table for JSON arrays. To tidy an existing Markdown doc before committing, Markdown Prettifier reformats it consistently.
Privacy first
All Markdown processing runs locally in your browser using JavaScript. No file is ever uploaded to JAD Apps servers — only metadata counters are saved for signed-in dashboard stats.