Skip to content

[Repo Assist] Add Deedle.Excel.Reader – cross-platform xlsx/xls reading#679

Merged
dsyme merged 2 commits intomasterfrom
repo-assist/feat-excel-reader-429-56a52ab3c6ee2085
Mar 19, 2026
Merged

[Repo Assist] Add Deedle.Excel.Reader – cross-platform xlsx/xls reading#679
dsyme merged 2 commits intomasterfrom
repo-assist/feat-excel-reader-429-56a52ab3c6ee2085

Conversation

@github-actions
Copy link
Copy Markdown
Contributor

🤖 This PR was created by Repo Assist in response to issue #429.

Summary

This PR adds a new lightweight Deedle.Excel.Reader package that reads Excel files (.xlsx and .xls) into Deedle frames cross-platform without requiring Microsoft Excel to be installed. It is built on top of the MIT-licensed ExcelDataReader library.

The existing Deedle.Excel package (COM/NetOffice) continues to exist for interactive write-to-live-Excel workflows; this new package complements it for file-based reading.

What's included

src/Deedle.Excel.Reader/

File Purpose
ExcelReader.fs All public API
Deedle.Excel.Reader.fsproj Project file (net9.0)
paket.references Declares ExcelDataReader + ExcelDataReader.DataSet dependency

tests/Deedle.Excel.Reader.Tests/

13 tests covering:

  • Row/column count
  • Column names from first-row headers
  • String, integer, and float value reading
  • sheetNames utility
  • Named sheet access
  • Indexed sheet access
  • Error handling (unknown name, out-of-range index)
  • Missing values (empty cells → OptionalValue.Missing)

Public API

open Deedle.ExcelReader

// Read first worksheet (first row = column headers)
let df : Frame(int, string) = readExcel "data.xlsx"

// Read a specific sheet by name
let df2 = readExcelSheet "data.xlsx" "Prices"

// Read a specific sheet by 0-based index
let df3 = readExcelSheetByIndex "data.xlsx" 1

// List all worksheet names
let names : string list = sheetNames "data.xlsx"
```

## New dependency

`ExcelDataReader 3.8` + `ExcelDataReader.DataSet 3.8` (MIT licence, ExcelDataReader project, actively maintained). No transitive dependencies beyond `System.*`.

## Test status

```
✅ 13 / 13 tests pass (Deedle.Excel.Reader.Tests)685 / 685 tests pass (Deedle.Tests – no regressions)

Closes #429

Generated by Repo Assist for issue #429 ·

To install this agentic workflow, run

gh aw add githubnext/agentics/workflows/repo-assist.md@30f2254f2a7a944da1224df45d181a3f8faefd0d

Generated by Repo Assist ·

To install this agentic workflow, run

gh aw add githubnext/agentics/workflows/repo-assist.md@30f2254f2a7a944da1224df45d181a3f8faefd0d

…taReader

Adds a new lightweight package Deedle.Excel.Reader that reads Excel
files (.xlsx and .xls) into Deedle frames without requiring Excel to
be installed. Built on the MIT-licensed ExcelDataReader library.

## New package: src/Deedle.Excel.Reader/

| File | Purpose |
|---|---|
| ExcelReader.fs | All public API |
| Deedle.Excel.Reader.fsproj | Project file (targets net9.0) |
| paket.references | Declares ExcelDataReader dependency |

## Public API

    // Read first sheet (first row = headers)
    Deedle.ExcelReader.readExcel : string -> Frame<int, string>

    // Read sheet by name
    Deedle.ExcelReader.readExcelSheet : string -> string -> Frame<int, string>

    // Read sheet by zero-based index
    Deedle.ExcelReader.readExcelSheetByIndex : string -> int -> Frame<int, string>

    // List all sheet names
    Deedle.ExcelReader.sheetNames : string -> string list

## Tests: tests/Deedle.Excel.Reader.Tests/

13 tests covering:
- Row / column count
- Column names (headers)
- String, integer and float values
- sheetNames utility
- Named sheet access
- Indexed sheet access
- Error handling (unknown name, out-of-range index)
- Missing values (empty cells become OptionalValue.Missing)

## New dependency

ExcelDataReader 3.8 + ExcelDataReader.DataSet 3.8 (MIT, ExcelDataReader project).
No new transitive dependencies beyond System.*.

## Test status

    Passed! - Failed: 0, Passed: 13, Skipped: 0, Total: 13 (Deedle.Excel.Reader.Tests)
    Passed! - Failed: 0, Passed: 685, Skipped: 0, Total: 685 (Deedle.Tests – no regressions)

Closes #429

Co-authored-by: Copilot <[email protected]>
@dsyme dsyme marked this pull request as ready for review March 19, 2026 17:00
@dsyme dsyme merged commit 4f3b769 into master Mar 19, 2026
2 checks passed
@dsyme dsyme deleted the repo-assist/feat-excel-reader-429-56a52ab3c6ee2085 branch March 19, 2026 17:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Import from xlsx

1 participant