Handling Microsoft Excel file format

From Qt Wiki
Revision as of 15:38, 14 January 2015 by Maintenance script (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Handling Microsoft Excel (file format)

This page discusses various available options for working with Microsoft Excel [en.wikipedia.org] documents in your Qt application. Please also read the general considerations outlined on the Handling Document Formats page.

Note that this information is collaboratively collected by the community, with no promise of completeness or correctness. In particular, use your own research and judgment when evaluating third-party libraries or tools!

One needs to distinguish between two different formats (this page deals with both of them):

Legacy “Excel Spreadsheet” format “Office Open XML Workbook” format
classification: binary BIFF-based XML-based
main filename extension: .xls .xlsx
main internet media type: application/vnd.ms-excel application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
default format of Excel: until Excel 2003 since Excel 2007

Reading / Writing

Using Excel itself

If you are exclusively targeting the Windows platform and Microsoft Excel will be installed on all target machines, then you can use Qt’s ActiveX framework [qt.io] to access Excel’s spreadsheet processing functionality through OLE automation. For an introductory code example (and a way to list the API provided by the Excel COM object), consult this how to.

DLL file name COM object name platforms license

Microsoft Excel [office.microsoft.com]

? Excel.Application Windows commercial

Using ODBC

TODO: Info on using ODBC drivers (via QSqlDatabase) for accessing Excel spreadsheets – please fill out this section if you know more. (What is the ODBC driver called? Where does it come from? Windows only or also Mac/Linux? Link to sample code snippet?)

To read an Excel file with ODBC (tested on Windows 7 with QT 4.7.1) :

This sample print in the console all column1’s values. It works for .xls and .xlsx

By default OBDC uses the first row as names for the columns, you can change this whith the ‘FirstRowHasNames’ option in the connection settings. Keep in mind that you are using a database and that each column has his own datatype. So if your second row contains text and your third row contains numbers, sql wil pick one of these datatypes. If a few rows contain text and the rest of them contains floating numbers, sql wil make the text appear and will make the numbers disappear.

Using independent parser/writer libraries

For a more portable solution, you could take a look at some of the available third-party C/C++ libraries for parsing/writing Excel files:

API .xls .xlsx reading writing platforms license

Qt Xlsx [github.com]

C++ Qt no yes yes yes Win, Mac, Linux, … MIT [weak copyleft]

xlsLib [xlslib.sourceforge.net]

C++ yes no no yes Win, Mac, Linux, … LGPL v3 [weak copyleft]

libxls [libxls.sourceforge.net]

C yes no yes no Win, Mac, Linux, … LGPL [weak copyleft]

LibXL [libxl.com]

C++ yes yes yes yes Win, Mac, Linux, … commercial

qtXLS [qtsoftware.de]

C yes no yes yes Win, ? commercial

FreeXL [gaia-gis.it]

C yes no yes no Linux, ? LGPL / MPL [weak copyleft]

BasicExcel [codeproject.com]

C++ yes no yes yes ? ?

Number Duck [numberduck.com]

C++ yes no yes yes Win, Linux commercial

Note that these libraries differ in their scope and general approach to the problem.

Using manual XML processing

Files using the XML-based (.xlsx) format could be processed using Qt’s XML handling classes (see Handling Document Formats). Third-party libraries can help you in dealing with the container format that wraps the actual XML files:

API supported platforms license

libopc [libopc.codeplex.com]

C Win, Mac, Linux, … permissive

TODO: If you know more about the container format, and whether it really needs a specialized library for processing, please expand this section.

Using batch conversion tools

If all else fails, there is always the option of using an existing tool to automatically convert between Excel files and a more manageable format, and let your Qt application deal with that format instead. The conversion tool could be bundled with your application or specified as a prerequisite, and controlled via QProcess. Some possibilities are:

.xls to * .xlsx to * * to .xls * to .xlsx platforms license

LibreOffice [libreoffice.org]

.ods .csv … .ods .csv … .ods .csv … .ods .csv … Win, Mac, Linux, … GPL v3 [strong copyleft]

[http:// ]…

Notes:

Displaying / User Interaction

Using Excel itself

TODO: If you know whether Excel provides a “viewer” ActiveX control that can be embedded in a Qt application through ActiveQT, please fill out this section (including links to relevant resources).

Manual solution

TODO: Tips for displaying Excel documents which were manually parsed using one of the methods described above.

.

See Also

Categories: