Simple and incomplete Excel file parser/writer


Version on this page:0.7.2
LTS Haskell 21.13:1.1.1
Stackage Nightly 2023-09-27:1.1.1
Latest on Hackage:1.1.1

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.



  • 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 dixiecko@gmail.com)
  • 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 emax@chalmers.se)
  • 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 malaquias@gmail.com)



  • 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 laurent_step@yahoo.fr for reporting)
  • fixed parsing cells with comments but with no content (thanks Stéphane Laurent laurent_step@yahoo.fr 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 laurent_step@yahoo.fr for reporting)
  • fixed problem of cwStyle not being optional (thanks laurent stephane laurent_step@yahoo.fr for reporting)
  • added basic autofilter support


  • fixed serialization problem of empty validations and pivot caches (thanks laurent stephane laurent_step@yahoo.fr for reporting)


  • implemented basic charts support with only line charts currently
  • added data validation support (thanks Emil Axelsson emax@chalmers.se)
  • fixed reading comments with empty author names (thanks Aleksey Khudyakov alexey.skladnoy@gmail.com 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 steve.bigham@gmail.com for reporting)
  • fixed parsing workbooks with no shared strings (thanks Steve Bigham steve.bigham@gmail.com 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 brad.ediger@madriska.com)


  • added conditional formatting support
  • fixed reading empty subelements with defaults (thanks Steve Bigham steve.bigham@gmail.com)

  • fixed comments data type names and modules/imports


  • added cell comments support
  • added custom file properties

  • loosened dependency on data-default package


  • added number formats (thanks to Alan Zimmerman alan.zimm@gmail.com)
  • 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 nikitinskiy@gmail.com)
  • improved shared strings collection by using Vector (thanks Dmitriy Nikitinskiy nikitinskiy@gmail.com)
  • empty xml elements don’t get emmitted anymore (thanks Philipp Hausmann nikitinskiy@gmail.com)
  • 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