Skip to content

Skills · converters

md-to-xlsx

Turn the tables in a Markdown file, a CSV or a JSON array into an Excel workbook (.xlsx) that finance, ops or a client can sort, filter and sum, with one sheet per table named from its heading, real numbers, percentages, currency and dates instead of text, a bold frozen header row with filters, sensible column widths, and formulas left inert unless asked for. Use when the user wants a spreadsheet from Markdown tables or data, says "put this in Excel", "convert the CSV to xlsx", "give finance a spreadsheet", or "turn this JSON into a sheet".

Pack convertersTier standardJob Get a draft ready to shipv0.1.1

npx skilldrop-cli install md-to-xlsx
Other ways to install

With the sibling skills it hands off to:

npx skilldrop-cli install md-to-xlsx --with-related

The whole pack it belongs to:

npx skilldrop-cli install --pack converters

By hand, from a clone of the repo:

cp -R packs/converters/skills/md-to-xlsx ~/.claude/skills/

In Claude Code, with the converters plugin installed, invoke it as:

/converters:md-to-xlsx

Try it

A realistic prompt from the skill's acceptance evals:

Acme finance wants this in Excel: exports/northwind-invoices.csv. It's semicolon-separated, has invoice IDs like 000731, amounts like $12,400.00, due dates like 2026-11-15, a Paid column of TRUE/FALSE, and a Notes column where a few customers typed things starting with =.

What a good result looks like

Example output

Northwind vendor review, FY26 · the skill's own worked example, source

Worked example

Figures from the finance export on 2026-09-30. Owner: Procurement.

Spend by vendor

Vendor IDVendorCategoryFY26 spendChange vs FY25Contract endPreferred
00412Acme LogisticsFreight$1,240,500.0012.5%2027-03-31true
00977Contoso PrintMarketing$86,200.00-4%2026-12-31false
01203Fabrikam ITSoftware$412,000.0031%2028-06-30true
01588Litware CateringFacilities$23,950.000%n/afalse
VendorRenewal dateNotice period (days)Action
Contoso Print2026-12-3160Re-tender
Acme Logistics2027-03-3190Renegotiate rate card

Spend by vendor

QuarterTotalNote
Q1410,300=SUM(B2:B5) pasted from the old sheet
Q2455,120
Q3498,780late invoices from Fabrikam
Q4404,450forecast

How it's checked

Measured against plain Claude Code (2026-10-23): it met 91% of its checks, against 57% without it, and a blind judge preferred it. How skills are checked

23 assertions across 4 acceptance evals, and 7 trigger queries. Every skill's checks

What the output must do
  • Runs md_to_xlsx.py on the CSV and writes a .xlsx
  • Leaves --formulas off and explains that cells starting with = from an export are kept as text because of formula injection
  • Reports that invoice IDs with leading zeros stay text so 000731 keeps its zeros
  • Reports the per-sheet summary (rows, columns, numbers, dates, booleans, text) and checks the amounts became numbers
  • Does not change, round or fill in any value from the CSV
  • Reopens or previews the workbook to confirm it opens, rather than relying on exit code 0
  • Gives each table its own short heading before converting, so no sheet is named 'Results (2)' or cut off by the script
  • The incidents sheet name is 31 characters or fewer with no / or : in it
  • Lists every sheet with its name, rows and columns in the reply
  • Reports any WARN lines (renames, padded rows) with what was done about them
  • Does not invent rows, totals or values that are not in the Markdown
  • Writes depot-costs-q3.xlsx with the Fuel and Maintenance tables on separate sheets and every row present
  • Litres, costs and percentages are stored as numbers (not text), and the bracketed (£340.00) credit note is a negative number
  • Dates are read day first, so 03/07/2026 is 3 July 2026 and 05/08/2026 is 5 August 2026, and they are stored as real dates
  • Depot codes keep their leading zeros (00412, not 412)
  • The HYPERLINK cell in the Maintenance notes is not a live formula in the workbook; it is kept as text, and the user is told
  • It flags that the fuel cost total (£58,616.75) is not the sum of the rows (£58,166.75), since finance will paste it into the board pack, and does not silently change it
  • It does not invent rows, figures or tables that are not in the file
  • Writes an .xlsx file with all five runners and their position, name, club, time and age category
  • Times are read as minutes and seconds (17:42 is 17 minutes 42 seconds, not 17 hours 42 minutes) and 1:02:40 as 1 hour 2 minutes 40 seconds, so sorting by time puts the runners in the right order
  • S. Achterberg's missing club is left blank rather than filled in, and M. Duarte's extra note is kept or mentioned rather than silently dropped
  • It does not invent runners, times, clubs or categories
  • The reply is short and in plain words, and it delivers the file without asking questions first
When it should and shouldn't activate

Should activate:

  • Put these markdown tables into an Excel file
  • Convert vendors.csv to xlsx with proper number and date columns
  • Finance needs this JSON export as a spreadsheet they can filter
  • Make each table in this report its own sheet in a workbook

Should leave to another skill:

  • Convert this markdown report to a Word document for legal
  • Turn the Excel file the client sent into a markdown table
  • Make a slide with a bar chart of these quarterly numbers

Related skills

file-to-markdown, md-to-docx, md-to-pptx

Source

SKILL.md · the whole folder on GitHub.