Simple and incomplete Excel file parser/writer


Version on this page:0.8.4
LTS Haskell 22.26:
Stackage Nightly 2024-06-22:
Latest on Hackage:

See all snapshots xlsx appears in

This library can help you to get some data read and written in Office Open XML xlsx format. Small subset of xlsx format is supported.

For examples look into Codec.Xlsx.

Format is covered by ECMA-376 standard: http://www.ecma-international.org/publications/standards/Ecma-376.htm

4th edition of the standard with the transitional schema is used for this library.



  • dropped support for GHC 8.0.* and 8.2.* and added support for GHC 8.10.* and 9.0.*


  • compatibility with lens-5.0
  • don’t output lists with no elements in stylesheet as it causes problems in Excel (thanks to David Hewson [email protected])


  • added a flag allowing to use microlens instead of lens (thanks to Samuel Balco [email protected])


  • compatibility with smallcheck-1.2.0


  • GHC 8.8 compatibility added (GHC 8.6 didn’t need any updates). Dropped compatilibity with GHC 7.10 (thanks to David Hewson [email protected])


  • GHC 8.4 compatibility


  • improved compatibility with Excel in pivot cache serialization
  • added support for character references in fast parsing with xeno


  • fixed serialization of large integer values (thanks Radoslav Dorcik [email protected])
  • added fast xlsx parsing using xeno library
  • dropped support for GHC 7.8.4 and added support for GHC 8.2.2
  • added numer format support in differential formatting records (thanks Emil Axelsson [email protected])
  • added inlineStr cell type support
  • added shared formulas support
  • added error values support
  • helper functions for serialization/deserialization of date values (thanks José Romildo Malaquias [email protected])


  • fixed reading files with optional table name (thanks Aleksey Khudyakov [email protected] for reporting)
  • removed unnecessary 10cm offset from simpleAnchorXY
  • customRowHeight added to row properties (thanks Aleksey Khudyakov [email protected])
  • added Generic instances for library types (thanks Remy Goldschmidt [email protected])
  • hidden property added for rows (thanks Aleksey Khudyakov [email protected])


  • renamed ColumnsWidth to more intuitive ColumnsProperties and added some more fields to it
  • added pivot table field sorting and hidden values support
  • added support for 4 more chart types


  • added (legacy) sheet protection support
  • switched to use r prefix for relationships namespace in workbook.xml to improve compatibility with readers expecting that prefix (thanks Stéphane Laurent [email protected] for reporting)
  • fixed parsing cells with comments but with no content (thanks Stéphane Laurent [email protected] for reporting)
  • added some higher-level helpers work with pictures in SpreadsheetML Drawing


  • added basic tables support
  • fixed boolean element parsing for rich text run properties (thanks laurent stephane [email protected] for reporting)
  • fixed problem of cwStyle not being optional (thanks laurent stephane [email protected] for reporting)
  • added basic autofilter support


  • fixed serialization problem of empty validations and pivot caches (thanks laurent stephane [email protected] for reporting)


  • implemented basic charts support with only line charts currently
  • added data validation support (thanks Emil Axelsson [email protected])
  • fixed reading comments with empty author names (thanks Aleksey Khudyakov [email protected] for reporting)
  • implemented basic pivot table support
  • started using hindent to format library code


  • implemented number formats
  • fixed error of parsing “Default”s in content types (thanks Steve Bigham [email protected] for reporting)
  • fixed parsing workbooks with no shared strings (thanks Steve Bigham [email protected] for reporting)
  • changed the way sheets are stored to allow abitrary sheet order in a workbook
  • separated format information from other cell data in FormattedCell
  • implemented comment visibility (throught legacy vml drawings)


  • added basic images support
  • added “normal” cell formula support
  • added basic xlsx parsing error reporting (thanks to Brad Ediger [email protected])


  • added conditional formatting support
  • fixed reading empty subelements with defaults (thanks Steve Bigham [email protected])

  • fixed missing from parsing code font family value 0 (Not applicable) (thanks Steve Bigham [email protected])
  • fixed time type used in haddock example (thanks Manoj [email protected])

  • fixed comments data type names and modules/imports


  • added cell comments support
  • added custom file properties

  • loosened dependency on data-default package

  • fixed parsing shared string table entries with no content (thanks to Yuji Yamamoto [email protected])


  • added number formats (thanks to Alan Zimmerman [email protected])
  • loosened dependency on zip-archive package



  • added lenses to access cells both using RC and XY style coordinates, RC is used by default

  • fixed use of internal function for parsing shared strings, previous change was unused in practice


  • loosened dependency on zlib package

  • fixed generated xml so it gets read by MS Excel with no warnings (thanks Dmitriy Nikitinskiy [email protected])
  • improved shared strings collection by using Vector (thanks Dmitriy Nikitinskiy [email protected])
  • empty xml elements don’t get emmitted anymore (thanks Philipp Hausmann [email protected])
  • imporoved and cleaned up core.xml generation

  • added “str” cells content extraction as text
  • added a notice that formulas in are not yet supported


  • better tests and documentation
  • lenses for worksheets/cells
  • removed streaming support as it needs better API and improved implementaion
  • removed CellLocalTime as ambiguous, added CellBool


  • initial release