FreeXL  2.0.0

Introduction

FreeXL is an open source library to extract valid data from within an Excel (.xls) spreadsheet.

The FreeXL design goals are:

  • to be simple and lightweight
  • to be stable, robust and efficient
  • to be easily and universally portable.
  • completely ignore any GUI-related oddity

Note that the final goal means that FreeXL ignores at all fonts, sizes and alignments, and most formats. It ignores Pivot Table, Charts, Formulas, Visual Basic macros and so on.

FreeXL is structurally simple and quite light-weight (typically 40-80K of object code, stripped). FreeXL has one key dependency - GNU libiconv, which is used for character set conversions. This is often provided as part of the C library on Linux systems, and is widely available.

Building and installing FreeXL is straightforward:

./configure
make
make install

Linking FreeXL to your own code is usually simple:

gcc my_program.c -o my_program -lfreexl 

On some systems you may have to provide a slightly more complex arrangement:

gcc -I/usr/local/include my_program.c -o my_program \
  -L/usr/local/lib -lfreexl -liconv -lm

FreeXL also provides pkg-config support, so you can also do:

gcc -I/usr/local/include my_program.c -o my_program `pkg-config --libs freexl`

I sincerely hope FreeXL could be useful to many of you. Excel *.xls spreadsheets are widespread, and although Microsoft itself is strongly pushing the new XML based formats, there is still a lot of legacy data stored in the older binary formats.

So in an era of open data, a simple and easy way to extract data from .xls is surely useful. The original use of FreeXL was to support the SQLite / SpatiaLite VirtualXL driver (implementing direct access to .xls files via SQL). However there are many other possibilities, including use with shell scripts and simple wrappers for Python, Perl and other very high level languages.

FreeXL is licensed under the MPL tri-license terms: you are free to choose the best-fit license between:

  • the MPL 1.1
  • the GPL v2.0 or any subsequent version
  • the LGPL v2.1 or any subsequent version

Enjoy, and happy coding