Excel Read
excel_readReads data from an Excel spreadsheet (.xlsx file). Returns the first row as headers and the remaining data rows as rows — mirroring excel_create's headers/rows params, so a read→create round-trip needs no manual row-0 handling.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the .xlsx file | |
| max_rows | No | Max rows to return (default 100) | |
| sheet_name | No | Sheet name to read (optional, reads first sheet). Matched without case. A name that no sheet has is an error listing the available ones — it never falls back to the first sheet. | |
| force_download | No | If the file is stored in the cloud and evicted from this Mac (dataless), request the download and wait for it instead of failing. Off by default: a download can take minutes and use metered data, so it is the caller's decision. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| rows | Yes | Data rows AFTER the header row; numeric cells are numbers and text cells are strings — feeds straight into excel_create's `rows` | |
| count | Yes | Number of DATA rows returned (excludes the header row) | |
| sheet | Yes | Name of the sheet that was read | |
| sheets | Yes | All sheet names in the workbook | |
| headers | Yes | The first row, as column headers — mirrors excel_create's `headers` param | |
| sparse_cells | No | Present only when the sheet has cells far outside the table (beyond column 64): each is {row, col, value} with REAL 1-based indices. Kept out of `rows` so one stray cell can't pad every row — but never dropped. |