How to export excel data as a markdown table for confluence wiki pages
- Step 1Put the reference table on the first sheet — The tool reads only the first sheet. If your workbook tracks several teams on separate tabs, copy the table for this wiki page to the first tab first.
- Step 2Column names on row 1 — Row 1 becomes the table header. For an owner matrix that's typically
Service | Owner | On-call | SLA. Delete any banner or notes rows above the column names. - Step 3Drop the workbook into the tool — SheetJS parses the file locally in your browser. Owner names and SLA figures are never uploaded — important for internal compliance and audit pages.
- Step 4Pick alignment — Left suits owner/description tables; Centre suits short status or RACI flags. The alignment applies to every column, so choose for the majority.
- Step 5Convert and copy — Click Convert to Markdown, confirm the row/column counts, then Copy. The preview truncates at 5,000 characters but the clipboard gets the full table.
- Step 6Paste into the wiki — In Confluence, insert a Markdown macro and paste inside it (or use the Markdown editor mode). In Notion, paste into a text block and it auto-converts to a table. In Obsidian, paste straight into the note.
Where the Markdown table lands in each wiki tool
How each destination accepts a GFM pipe table. The tool's output is standard GFM; the destination determines how you paste it.
| Destination | How to accept the GFM table | Notes |
|---|---|---|
| Confluence | Insert a Markdown macro and paste inside it (or Markdown editor mode) | Standard rich-text editor needs the macro; raw paste won't render as a table |
| Notion | Paste into a text block | Notion auto-converts GFM pipe tables to a native table block |
| Obsidian | Paste into the note | Renders in Live Preview and Reading view |
| Logseq / Bear | Paste into a block / note | Both render GFM pipe tables |
| GitHub wiki | Paste into the wiki page | Renders identically to a README table |
Tool behaviour wiki authors rely on
The conversion behaviours that keep a wiki table intact. All grounded in lib/json-to-markdown.ts and lib/excel/xlsx-csv-bridge.ts.
| Behaviour | Effect on the wiki table | Toggleable? |
|---|---|---|
| First-sheet read | Only the first tab becomes a table | No — move the table to tab 1 |
| Row 1 as header | First row becomes 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 (the only control) |
| Empty cells | Render as an empty cell, column count preserved | No |
Cookbook
Conversions for the reference tables wiki teams actually paste into Confluence and Notion. Left block is the sheet; right block is the Markdown.
Service-owner matrix for a Confluence page
A common ops wiki table. Left alignment keeps owner names and on-call handles readable. Paste it inside a Confluence Markdown macro.
Excel first sheet: Service Owner On-call SLA Auth Ada @ada 99.9% Billing Grace @grace 99.95% Markdown output (alignment: left): | Service | Owner | On-call | SLA | | :--- | :--- | :--- | :--- | | Auth | Ada | @ada | 99.9% | | Billing | Grace | @grace | 99.95% |
RACI table with centre alignment
A responsibility matrix where the body cells are single letters. Centre alignment lines them up cleanly under each column.
Markdown output (alignment: centre): | Task | Eng | PM | QA | | :---: | :---: | :---: | :---: | | Spec | C | A | I | | Build | R | C | C |
Priority field with a pipe character
An escalation table where a cell lists P1 | P2. The inner pipe is escaped so the priority column stays one column.
Excel cell value: P1 | P2 Markdown output: | Alert | Priority | Owner | | :--- | :--- | :--- | | DB lag | P1 \| P2 | Ada |
Multi-line note collapsed for the wiki
A change-log cell typed over two lines collapses to one space-joined line so the Confluence table doesn't break into extra rows.
Excel cell value (Alt+Enter): Migrated to v2 rollback plan attached Markdown output: | Change | Note | | :--- | :--- | | DB upgrade | Migrated to v2 rollback plan attached |
Paste flow into Notion
Notion converts a pasted GFM pipe table into a native table block — no macro needed, unlike Confluence.
Tool output (copied): | Env | Region | Status | | :--- | :--- | :--- | | prod | eu-west-1 | green | | stage | eu-west-1 | green | In Notion: paste into an empty text block -> Notion auto-creates a 3-column table block with two rows.
Edge cases and what actually happens
Confluence shows raw pipes instead of a table
Wrong macroConfluence's standard rich-text editor does not render pasted Markdown as a table. You must insert a Markdown macro and paste inside it (or use Markdown editor mode). Without the macro, the pipes show as literal text. This is a Confluence behaviour, not a tool defect.
Only the first sheet is converted
By designA multi-team workbook converts only its first tab. Copy the table for the current wiki page to the first tab before converting; there is no sheet selector.
Banner row mistaken for the header
Header misreadIf row 1 is a title like On-call Roster rather than the column names, that phrase becomes the single header and the table misaligns. Put the real column names on row 1.
Confluence page gets slow over ~100 rows
PerformanceConfluence page tables become sluggish past roughly 100 rows. For large inventories, paste a summary table and link to the source file, or use a Confluence table macro designed for large data sets. The tool can emit the full table, but the wiki is the bottleneck.
Pipe inside a priority/status cell
EscapedA cell like P1 | P2 would split into two columns. The tool escapes the inner | to \| so it renders as one cell in Confluence and Notion. Always on.
Multi-line cell content
CollapsedIn-cell line breaks collapse to a single space so the wiki table doesn't fracture into phantom rows. If you genuinely need line breaks, Notion and Confluence handle them differently from GitHub — keep long prose outside the table.
Merged header cells
Merge flattenedA merged header spanning columns flattens to a value in the first cell plus blanks. The visual grouping does not survive into a flat GFM table; unmerge before converting if the grouping matters on the wiki.
SLA percentages or IDs reformatted
Number coercionValues read as numbers can lose trailing zeros (99.90% stored as 0.999 displays differently) or round long IDs. Format such cells as Text in Excel before converting so the exact wiki value survives.
HTML in a cell may render in Obsidian/Notion
Rendered as HTMLCell HTML is not escaped. Obsidian and some Markdown renderers will interpret <b> etc. If a literal angle bracket must show as text on the wiki, replace it 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 wiki workflow.
Frequently asked questions
Does Confluence support Markdown tables by default?
Not in the standard rich-text editor. You insert a Markdown macro and paste the table inside it, or switch to Markdown editor mode. Without the macro, Confluence shows the pipes as plain text. Notion and Obsidian, by contrast, accept GFM pipe tables directly.
Can I import a large Excel dataset as a Confluence table?
You can, but Confluence page tables get slow past roughly 100 rows. For large datasets, paste a summary and link to the source, or use a dedicated large-table macro. The tool will emit the full table up to your tier limit (10,000 rows Free, 100,000 Pro).
Does Notion accept this Markdown table format?
Yes. Paste the GFM pipe table into a Notion text block and Notion auto-converts it to a native table block. No macro is needed, unlike Confluence.
Which sheet does it convert?
Only the first sheet of the workbook. There is no sheet picker. For a multi-team or multi-page workbook, copy the table you want onto the first tab before converting.
Which row becomes the table header?
Row 1 of the first sheet. SheetJS reads it as the column names. Remove any title banner above your column names so row 1 holds the headers.
Can I set alignment per column for a wiki table?
No. The alignment control sets one alignment — left, centre, or right — for the whole table. If a wiki table needs left labels and right-aligned numbers, edit the separator row by hand after pasting (Notion ignores alignment markers anyway; Confluence's macro honours them).
Will Obsidian render the table?
Yes. Obsidian renders GFM pipe tables in both Live Preview and Reading view. Paste the copied Markdown directly into a note.
Is internal wiki data uploaded?
No. The workbook is parsed in your browser with SheetJS — owner names, SLA figures, and inventory never reach a server. Only an anonymous run counter is recorded for signed-in users, with an opt-out.
Why did my SLA percentage change?
Percentages are stored as numbers, so 99.90% may display as 0.999 or lose a trailing zero. Format the cell as Text in Excel before converting to keep the exact string for the wiki.
Does it escape pipes in cell values?
Yes. Any | inside a cell is escaped to \|, so a value like P1 | P2 stays in one column on the wiki page. This is automatic and can't be turned off.
Can I download the table as a file for the wiki repo?
Yes. Click Download MD to save a .md file, useful for docs-as-code wikis backed by a Git repo. Or Copy to paste straight into Confluence/Notion.
What other formats can I get from the same sheet?
For an HTML table on a wiki theme, use excel-tailwind-export; for an inline chart, excel-svg-dataviz. To inspect 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.