# Parse Excel to Markdown

Fuente conceptual: OpenViking `openviking/parse/parsers/excel.py` (AGPL-3.0)
Reimplementar desde cero. No copiar codigo.

## Funcion a implementar

### excel_to_markdown

- **Dominio:** core
- **Lang:** Python
- **Purity:** impure (I/O: lee archivo)
- **Signature:** `excel_to_markdown(path: str, max_rows_per_sheet: int = 1000) -> str`
- **Descripcion:** Convierte un archivo Excel (.xlsx, .xls, .xlsm) a markdown con cada sheet como seccion H2.
- **Algoritmo:**
  1. Si extension `.xls`: usar xlrd (legacy)
  2. Si `.xlsx`/`.xlsm`: usar openpyxl
  3. Para cada sheet:
     - Header: `## Sheet: {name}`
     - Metadata: `**Dimensions:** {rows} x {cols}`
     - Truncar a max_rows_per_sheet
     - Convertir filas a tabla markdown
     - Si truncado: anadir nota de filas omitidas
  4. Manejo de tipos de celda para xlrd:
     - EMPTY/BLANK → ""
     - DATE → formato ISO (con hora si no es 00:00:00)
     - BOOLEAN → "TRUE"/"FALSE"
     - ERROR → codigo de error Excel (#NULL!, #DIV/0!, etc.)
     - NUMBER → entero si es entero, float si tiene decimales
- **Deps:** `openpyxl` (xlsx), `xlrd` (xls legacy)
- **Error type:** Exception
- **Tests:** xlsx con multiples sheets, xls legacy con fechas, sheet vacio, sheet con formulas (data_only), sheet truncado
