Excel Parser written in Elixir (currently only Excel 2000)
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib remove unused variables Sep 30, 2015
spec introduce type class for parsing Sep 16, 2015
.gitignore add test coverage Sep 4, 2015
.travis.yml turn on test coverage Sep 4, 2015
LICENSE release package on hex Aug 29, 2015
README.md Update README.md Aug 15, 2018
mix.exs update hex modules Sep 30, 2015
mix.lock update hex modules Sep 30, 2015



Build Status Coverage Status hex.pm version

DISCLAIMER: Completely abandoned, not further development will take place. If you're looking for an xlxs parsing library, consider using xlsxir

This is a library for parsing .xlsx files (Open XML format). It is targeted for reading Excel 2000 files into a list of lists.

Sample output:

  ["A1", "B1", "C1", "D1"],
  ["A2", "B2", "C2", "D2"],
  ["A3", "B3", "C3", "D3"],
  ["A4", "B4", "C4", "D4"],
  ["A5", "B5", "C5", "D5"],


You can add Excellent as a dependency in your mix.exs file. Since it only requires Elixir and Erlang there are no other dependencies.

def deps do
  [ { :excellent, "~> 0.0.1" } ]

If you aren't using hex, add the a reference to the github repo.

def deps do
  [ { :excellent, github: "leifg/excellent" } ]

Then run mix deps.get in the shell to fetch and compile the dependencies


The top level funtion takes 2 arguments: the filename and the number of the worksheet you want to parse (zero based).

Excellent.parse('spreadsheet.xlsx', 0)

=> [
  ["A1", "B1", "C1", "D1"],
  ["A2", "B2", "C2", "D2"],
  ["A3", "B3", "C3", "D3"],
  ["A4", "B4", "C4", "D4"],
  ["A5", "B5", "C5", "D5"],

There is also a function to return the names of the worksheets as a tuple:


=> {"Worksheet 1", "Worksheet 2"}


  • Read worksheets as stream from ZIP archive
  • Implement different data types (curently only strings and numbers are supported)