How to export excel spreadsheets as markdown tables for obsidian and notion
- Step 1Keep the table on the first sheet — The tool reads only the first sheet. If your workbook has tabs like
books,movies,games, copy the one you want into the first tab — there's no sheet picker. - Step 2Header on row 1 — Row 1 becomes the table header. For a reading log that's usually
Title | Author | Rating | Status. Delete any title row above the column names. - Step 3Drop the workbook into the tool — SheetJS parses it in your browser; personal data stays local. Useful for finance trackers and anything you wouldn't upload.
- Step 4Pick alignment — Left suits title/author lists; Centre suits rating or status columns. The alignment applies to the whole table, so choose for the majority of columns.
- Step 5Convert and copy or download — Click Convert to Markdown. Copy to paste into a Notion page, or Download MD to drop the file into your Obsidian vault.
- Step 6Paste or place into your PKM tool — In Obsidian, paste into a note or save the
.mdinto the vault. In Notion, paste into a text block and it becomes a table block. In Logseq/Bear, paste into a block or note.
How each PKM tool handles the GFM table
Where the tool's GFM output lands in each PKM app. Output is standard GFM; the destination decides the paste flow.
| PKM tool | How it accepts the table | Auto-updates with the source sheet? |
|---|---|---|
| Obsidian | Paste into a note, or save the .md into the vault | No — static table; re-convert to refresh |
| Notion | Paste into a text block → becomes a table block | No — re-paste to refresh |
| Logseq | Paste into a block | No |
| Bear | Paste into a note | No |
| Dataview (Obsidian plugin) | Not produced by this tool | Use a Dataview query for live tables |
Conversion behaviour in a vault context
The behaviours that matter when the table lives in a note. Grounded in lib/json-to-markdown.ts and lib/excel/xlsx-csv-bridge.ts.
| Behaviour | Effect in your note | Toggleable? |
|---|---|---|
| First-sheet read | Only the first tab becomes a table | No |
| Row 1 as header | First row is the column headings | No |
| Pipe escaping | | in a cell becomes \| | No (always on) |
| Line-break collapse | In-cell \n becomes a space | No (always on) |
| Alignment | Whole-table left / centre / right | Yes (only control) |
| Static output | Table doesn't auto-update | Re-convert to refresh |
Cookbook
Conversions for the tables PKM users actually keep in their vaults. Left block is the sheet; right block is the Markdown.
Reading log for an Obsidian note
A book-tracking table. Left alignment keeps titles and authors readable in Live Preview.
Excel first sheet: Title Author Rating Status The Pragmatic Prog Hunt & Thomas 5 done Deep Work Cal Newport 4 reading Markdown output (alignment: left): | Title | Author | Rating | Status | | :--- | :--- | :--- | :--- | | The Pragmatic Prog | Hunt & Thomas | 5 | done | | Deep Work | Cal Newport | 4 | reading |
Habit tracker with centre alignment
A weekly habit grid where body cells are checkmarks. Centre alignment lines them up under each day.
Markdown output (alignment: centre): | Habit | Mon | Tue | Wed | | :---: | :---: | :---: | :---: | | Read | x | x | | | Run | | x | x |
Tag cell with a pipe
A note's status cell lists read | reread. The inner pipe is escaped so the column stays intact.
Excel cell value: read | reread Markdown output: | Book | Status | | :--- | :--- | | Dune | read \| reread |
Multi-line note collapsed
A two-line takeaway in one cell collapses to a single line so the vault table stays one row per book.
Excel cell value (Alt+Enter): Great on focus weak on teams Markdown output: | Book | Takeaway | | :--- | :--- | | Deep Work | Great on focus weak on teams |
Drop the .md straight into an Obsidian vault
For docs-as-code vaults, download the .md and place it in a folder; Obsidian indexes it immediately as a static table.
Tool: Download MD -> books.md Move books.md into your vault's /reference folder. Obsidian renders the table in Reading view. To update later: edit the sheet, re-convert, replace books.md.
Edge cases and what actually happens
The table is static, not a Dataview query
By designObsidian's Dataview plugin builds live tables from note frontmatter — this tool does not produce Dataview syntax. The output is a plain Markdown table that won't update when the source sheet changes. To refresh, edit the spreadsheet and re-convert.
Only the first sheet is converted
By designA workbook with books, movies, games tabs converts only the first. Copy the table you want onto the first tab before converting; there is no sheet selector.
Title row mistaken for the header
Header misreadIf row 1 is 2026 Reading instead of the column names, that phrase becomes the single header and the table misaligns. Put the real column names on row 1.
Pipe inside a tag or status cell
EscapedA cell like read | reread would split into two columns. The tool escapes the inner | to \| so it renders as one cell in Obsidian and Notion. Always on.
Multi-line cell content
CollapsedIn-cell line breaks collapse to a space so the vault table stays one row per record. For longer notes, link to a separate note instead of cramming prose into a table cell.
Notion ignores alignment markers
ExpectedNotion converts the pipe table into a native table block and discards the :--- alignment markers — you set alignment in Notion's UI afterwards. Obsidian, by contrast, honours the alignment in rendered Markdown.
Emoji in cells round-trip
SupportedEmoji and Unicode (common in PKM tags and ratings like ★★★★☆) pass through as UTF-8 and render in Obsidian and Notion. No special handling is needed.
Numbers/ratings reformatted
Number coercionA rating like 04 or a long ISBN read as a number can lose leading zeros or round. Format such columns as Text in Excel before converting so the exact value lands in your note.
HTML in a cell renders in Obsidian
Rendered as HTMLCell HTML is not escaped, and Obsidian renders inline HTML. A cell with <mark>key</mark> will highlight; a literal < you wanted as text needs neutralising in the spreadsheet first.
Raw CSV dropped instead of a workbook
May failA plain .csv is read as text and JSON-parsed, which throws. Save the CSV as .xlsx first, then convert. Spreadsheet files are the reliable input for the PKM workflow.
Frequently asked questions
Does Notion accept Markdown tables pasted from the clipboard?
Yes. Paste the GFM pipe table into a Notion text block and Notion converts it into a native table block. Note that Notion discards the alignment markers — you set column alignment in Notion's UI afterwards.
Does Obsidian render Markdown tables in Live Preview and Reading modes?
Yes. Obsidian renders GFM pipe tables in both Live Preview and Reading view, and honours the :--- / :---: / ---: alignment markers the tool writes. Paste into a note or drop the .md into your vault.
What if my Excel table has 100+ rows?
It still converts (up to the tier limits: 10,000 rows Free, 100,000 Pro), but large tables become slow to scroll in some PKM editors. For big reference sets, consider splitting by category or linking the source file from a smaller summary table.
Will the table update when I change the spreadsheet?
No. The output is a static Markdown table, not a live query. When the source sheet changes, re-convert and replace the table or .md file. For genuinely live tables in Obsidian, use the Dataview plugin with note frontmatter instead.
Which sheet and which row are used?
Only the first sheet, with row 1 as the header. SheetJS reads the first row as the column names, so make sure your headings — not a title banner — are on row 1.
Can I set per-column alignment for a note table?
Not from the tool — it applies one alignment to the whole table. In Obsidian you can hand-edit the separator row after pasting; in Notion alignment is set in the UI regardless.
Do emoji and star ratings survive?
Yes. Emoji and Unicode characters (★, ☆, tags) pass through as UTF-8 and render in Obsidian and Notion. No extra steps needed.
Is my personal data uploaded?
No. The workbook is parsed in your browser with SheetJS — finance, habit, and reading data never reach a server. Only an anonymous run counter is recorded for signed-in users, with an opt-out.
Can I download the table to drop into my vault?
Yes. Click Download MD to save a .md file and move it into your Obsidian vault, where it's indexed as a static table. Or Copy to paste into a note or a Notion page.
Why did my rating column lose its leading zero?
Numeric cells are read as numbers, so 04 becomes 4 and long ISBNs may round. Format the column as Text in Excel before converting to keep the exact characters.
Does it escape pipes so my tags don't break the table?
Yes. Any | inside a cell is escaped to \|, so a tag value like read | reread stays in one column. This is automatic and can't be disabled.
What other formats can I get for my notes?
For a chart embedded in a note, excel-svg-dataviz emits inline SVG; for an HTML table, excel-tailwind-export. To check cell formats before converting, excel-format-inspector reports number and date formatting.
Privacy first
Every JAD Excel tool runs entirely in your browser using SheetJS and ExcelJS. Your spreadsheets, formulas, and data never leave your device — verified by zero outbound network requests during processing.