# XLSX Reader

> Use when the user provides an Excel file of test cases or requirements, or asks to import a spreadsheet. Reads .xlsx/.xls spreadsheets (test cases, checklists, requirement matrices) into Markdown tables so an agent can ingest them.

- Skill: `arozumenko/xlsx-reader` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add arozumenko/xlsx-reader`
- Raw SKILL.md: https://api.skillmd.com/api/skills/arozumenko/xlsx-reader/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- License: Apache-2.0
- Author: arozumenko (https://skillmd.com/u/arozumenko)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/arozumenko/xlsx-reader

---


# xlsx-reader

Converts every sheet in an `.xlsx` or `.xls` workbook into a Markdown table (first row = header) so that an LLM agent can read and reason over spreadsheet content without needing a binary parser.

## When to use

- The user drops an Excel file of test cases, a requirements matrix, or a QA checklist into the conversation.
- A task requires reading structured tabular data from a `.xlsx` / `.xls` source (e.g. "import these test cases", "summarise this checklist").
- You need machine-readable rows from a spreadsheet before feeding them to another skill (e.g. `xray-testing`, `test-case-analysis`).

## Usage

```bash
node scripts/read_xlsx.js <input.xlsx> [output.md]
```

- **Sheet → table** — each sheet becomes an `## SheetName` section followed by a GitHub-Flavoured Markdown table; the first row is used as the header row.
- **Stdout vs file** — omit `output.md` to print the Markdown to stdout (pipe-friendly); supply a path to write to a file instead.
- **Missing package** — if the `xlsx` npm package is not installed the script exits with a clear message: `Install it with: npm i xlsx`.

## Notes

- After writing to a file, read the produced Markdown back with the `Read` tool to bring the content into the agent's context.
- For large workbooks with many sheets, convert only the relevant sheet by trimming the output (e.g. filtering on the `## <SheetName>` headings) — avoid overwhelming the context window.

