XLSX I/O
XLSX I/O

Cross-platform C library for reading values from and writing values to .xlsx files.

Description

XLSX I/O aims to provide a C library for reading and writing .xlsx files. The .xlsx file format is the native format used by Microsoft(R) Excel(TM) since version 2007.

Goal

The library was written with the following goals in mind:

Reading .xlsx files:

Writing .xlsx files:

Libraries

The following libraries are provided:

Command line utilities

Some command line utilities are included:

Dependancies

This project has the following depencancies:

Note that minizip is preferred, as there have been reports that .xlsx files generated with XLSX I/O built against libzip can't be opened with LibreOffice.

There is no dependancy on Microsoft(R) Excel(TM).

XLSX I/O was written with cross-platform portability in mind and works on multiple operating systems, including Windows, macOS and Linux.

Building from source

Requirements:

There are 2 methods to build XLSX I/O:

Building with make

Building with CMake (preferred method)

Prebuilt binaries

Prebuilt binaries are also available for download for the following platforms:

Both Windows versions were built using the MinGW-w64 under an MSYS2 shell. To link with the .dll libraries from Microsoft Visual C++ you need a .lib file for each .dll. This file can be generated using the lib tool that comes with Microsoft Visual C++.

For 32-bit Windows:

cd lib
lib /def:libxlsxio_write.def /out:libxlsxio_write.lib /machine:x86
lib /def:libxlsxio_read.def /out:libxlsxio_read.lib /machine:x86
lib /def:libxlsxio_readw.def /out:libxlsxio_readw.lib /machine:x86

For 64-bit Windows:

cd lib
lib /def:libxlsxio_write.def /out:libxlsxio_write.lib /machine:x64
lib /def:libxlsxio_read.def /out:libxlsxio_read.lib /machine:x64
lib /def:libxlsxio_readw.def /out:libxlsxio_readw.lib /machine:x64

Example C programs

### Reading from an .xlsx file

#include <xlsxio_read.h>
//open .xlsx file for reading
xlsxioreader xlsxioread;
if ((xlsxioread = xlsxioread_open(filename)) == NULL) {
fprintf(stderr, "Error opening .xlsx file\n");
return 1;
}
//read values from first sheet
char* value;
const char* sheetname = NULL;
printf("Contents of first sheet:\n");
if ((sheet = xlsxioread_sheet_open(xlsxioread, sheetname, XLSXIOREAD_SKIP_EMPTY_ROWS)) != NULL) {
//read all rows
while (xlsxioread_sheet_next_row(sheet)) {
//read all columns
while ((value = xlsxioread_sheet_next_cell(sheet)) != NULL) {
printf("%s\t", value);
free(value);
}
printf("\n");
}
}
//clean up
xlsxioread_close(xlsxioread);

### Listing all worksheets in an .xlsx file

#include <xlsxio_read.h>
//open .xlsx file for reading
xlsxioreader xlsxioread;
if ((xlsxioread = xlsxioread_open(filename)) == NULL) {
fprintf(stderr, "Error opening .xlsx file\n");
return 1;
}
//list available sheets
const char* sheetname;
printf("Available sheets:\n");
if ((sheetlist = xlsxioread_sheetlist_open(xlsxioread)) != NULL) {
while ((sheetname = xlsxioread_sheetlist_next(sheetlist)) != NULL) {
printf(" - %s\n", sheetname);
}
}
//clean up
xlsxioread_close(xlsxioread);

### Writing to an .xlsx file

#include <xlsxio_write.h>
//open .xlsx file for writing (will overwrite if it already exists)
xlsxiowriter handle;
if ((handle = xlsxiowrite_open(filename, "MySheet")) == NULL) {
fprintf(stderr, "Error creating .xlsx file\n");
return 1;
}
//write column names
xlsxiowrite_add_column(handle, "Col1", 16);
xlsxiowrite_add_column(handle, "Col2", 0);
//write data
int i;
for (i = 0; i < 1000; i++) {
xlsxiowrite_add_cell_string(handle, "Test");
}
//close .xlsx file

License

XLSX I/O is released under the terms of the MIT License (MIT), see LICENSE.txt.

This means you are free to use XLSX I/O in any of your projects, from open source to commercial.

This library does not require Microsoft(R) Excel(TM) to be installed.