Apache POI - HSSF and XSSF Limitations
Current HSSF / XSSF main limitations
The intent of this document is to outline some of the known limitations of the
POI HSSF and XSSF APIs. It is not intended to be complete list of every bug
or missing feature of HSSF or XSSF, rather it's purpose is to provide a broad
feel for some of the functionality that is missing or broken.
File sizes/Memory usage
There are some inherent limits in the Excel file formats. These are defined in class
As long as you have enough main-memory, you should be able to handle files up to these limits. For huge files
using the default POI classes you will likely need a very large amount of memory.
There are ways to overcome the main-memory limitations if needed:
For writing very huge files, there is SXSSFWorkbook
which allows to do a streaming write of data out to files (with certain limitations on what you can do as only
parts of the file are held in memory).
For reading very huge files, take a look at the sample
which shows how you can read a file in streaming fashion (again with some limitations on what information you
can read out of the file, but there are ways to get at most of it if necessary).
HSSF has some limited support for creating a handful of very simple Chart types,
but largely this isn't supported. HSSF (largely) doesn't support changing Charts.
You can however create a chart in Excel using Named ranges, modify the chart data
values using HSSF and write a new spreadsheet out. This is possible because POI
attempts to keep existing records intact as far as possible.
XSSF has only limited chart support including making some simple changes
and adding at least some line and scatter charts, see the examples LineChart
Macros can not be created. The are currently no plans to support macros.
However, reading and re-writing files containing macros will safely preserve
the macros. Recent versions of Apache POI support extracting the macro data
HSSF doesn't have support for reading or creating Pivot tables. XSSF has limited
support for creating Pivot Tables, and very limited read/change support.