Apache Software Foundation > Apache POI

- Home
- Help
- Component APIs
- Getting Involved

# History of Changes

## Previous releases

The change log for POI 3.x and older releases can be found in the history section.

## Version 4.1.2 (2020-02-17)

### Summary

- Removed a lot of internal uses of StringBuffers
- XDDF - some work on better chart support
- Common SL / EMF - ongoing rendering fixes
- XSLF - OOM fixes when parsing arbitrary shape ids + a new dependency to SparseBitSet 1.2

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 64015 | POI_Overall | Swap zaxxer.com:SparseBitSet for java.util.BitSet
| 63788 | XWPF | When removing AbstractNum match by abstractNumId, not list index
| 63940 | POI_Overall | Avoid endless loop/out of memory on string-replace with empty search string
| 63700 | POI_Overall | Make D* functions work with numeric result column
| 63960 | SXSSF | Write pre-evaluated string-values in formula cells with the correct type
| 63984 | POI_Overall | Function AND / OR should treat missing parameters as FALSE
| 63749 | POI_Overall | Make getFirstRowNum() and getFirstCellNum() return -1 consistently with empty data
| 63569 | POI_Overall | Make IOUtils.setByteArrayMaxOverride() work correctly
|  | XSLF | Add, insert and remove columns on XSLFTable
| 63842 | POI_Overall | Fix issue with fractions where the whole number part is too large to store as an int
| 63889 | XDDF | Produce valid PPTX file with several chart series
| 63918 | SL_Common XSLF | Fix texture fill - scale stretched images correctly
|  | XDDF | Add Doughnut chart data series support
| 63955 | HMEF | HMEFContentsExtractor fails to extract content from winmail.dat
| 63927 | POI_Overall | Inconsistent mapping of Norwegian locales for date formats
| github-163 | XSSF | Add set level numbering on XWPFParagraph
| github-164 | XSSF | Fix Bug in XSSFTable.setCellReferences when table is single cell
| 64004 | POI_Overall | Replace Cloneable / clone() with copy constructor
| 64036 | POI_Overall | Replace reflection calls in factories for Java 9+
| 64044 | POI_Overall | Fix issue with setCellValue(LocalDate) not supporting nulls properly
| 64088 | SL_Common XSLF | SlideShow rendering fixes
| 64098 | XWPF | XWPFRun: Whitespace in text not preserved if starting with tab character.
| 64108 | POI_Overall | unsafe pipe character ("|") in Relationship target attribute is not being encoded into a '%7C'.
| github-166 | XDDF | Expose invert if negative on bar charts
| 63998 | HSSF | Support commas, exclamation marks correctly in AreaReference
| 64045 | XSSF | XSSFWorkbook constructor doesn't close ZipFile if an exception occurs
| 64130 | HSSF | Regression in OldSheetRecord

## Version 4.1.1 (2019-10-20)

### Summary

- XSSF: Memory improvements which use much less memory while writing large xlsx files
- XDDF: Improved chart support: more types and some API changes around angles and width units
- updated dependencies to Bouncycastle 1.62, Commons-Codec 1.13, Commons-Collections4 4.4, Commons-Compress 1.19
- XWPF: Additional API methods
- XSSF: Fixes to XSSFSheet.addMergedRegion() and XSSFRow.shiftRows()
- EMF/HSLF: Rendering fixes
- CVE-2019-12415 - XML External Entity (XXE) Processing in Apache POI

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 63774 | POI_Overall | Cache pids to speed up custom properties "add" method
| 63779 | SS_Common | Add support for the new Java date/time API added in Java 8
| 59322 | HWPF | Avoid NullPointerException when reading Word Document with tables and a cell with a null descriptor
| 61490 | HWPF | Read cells of tables correctly in cases where the last cell is not 'fake'
|  | HWPF | Do not use WeakReference for parents in Ranges to avoid spurious failures in tests
| 63657 | XSSF | Fix regression with memory usage in XSSFRow.onDocumentWrite and some other temporary memory leaks
| 63842 | SS_Common | FractionFormat casts whole part of the value into 'int'
| 63818 | HSLF | Allow multiple charsets for same font typeface
| 63768 | XSSF | XSSFExportToXml adjust settings on SchemaFactory
| 63541 | XSLF | NullPointerException from XSLFSimpleShape.getAnchor for empty xfrm tags
| 63745 | POI_Overall | Add traversing and debugging interface
| 57423 62711 | XSSF | Fix regression when XSSFRow.shiftRows() is used
| 63580 | SL_Common HSLF XSLF | Fix texture paint handling
| 59004 | HSLF | HSLF rendering - adjust values for presetShapeDefinition differs in HSLF/XSLF
|  | HSLF | Don't fallback to master shape properties, if master shape is not assigned
|  | POI_Overall | Add a ThreadLocalUtil.clearAllThreadLocals which can be used to clear thread-locals
| 63371 | XSSF | XSSFSheet.addMergedRegion should adjust count of merged cells
| 63073 | XSSF | Return value of XSSFSheet.addMergedRegion is off by one
| 54803 | OPC | Error opening XLSX after saving with a Drawing using POI
| github-135 | XDDF | Support to create new chart without reading template
| github-143 | HPSF | MAPIType.isFixedLength: not true in case of length > 8
| github-144 | XDDF | Support for seven new chart types
| github-149 | HSMF | improve MAPIMessage.getHtmlBody
| github-150 | XWPF | Add XWPFPicture getWidth and getDepth methods
| github-151 | XWPF | Add XWPFRun getStyle method
| github-152 | XWPF | Add XWPFParagraph setKeepNext method
| github-153 | XWPF | Add XWPFParagraph createHyperlinkRun method
| github-154 | SXSSF | Improved support for writing large files
| github-157 | OOXML | Add setters to POIXMLProperties
| 63153 | XDDF | Enable safe removal of data series from charts
| 59623 | XDDF | Provide example of threshold line in bar chart

## Version 4.1.0 (2019-04-09)

### Summary

- Improved support/fixes for Java 9+ and IBM JVM
- New EMF renderer and support of SVG images in XSLF
- Security, stability and memory/resource handling improvements
- Various bug fixes across function and conditional format rule evaluation
- Upgrade to XMLBeans 3.1.0
- Upgrade to Bouncycastle 1.61
- Upgrade to Curvesapi 1.06
- Upgrade to Commons-Codec 1.12
- Upgrade to Commons-Collections4 4.3
- Upgrade to XMLSec 2.1.2

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 63200 | XSLF | Avoid a possible NullPointerException in XSLFShape.selectPaint()
| 60724 | SS_Common | Implement 'ignore hidden rows' variations for existing implemented variants
| 63264 | SS_Common | Conditional Format rule evaluation calculates relative references incorrectly
| 61652 | SS_Common | Fix NPE in EDATE function when date evaluates to an invalid value
| 62151 | POIFS | Work around illegal reflective access in Java 9+ when freeing buffers
| 63029 | OPC | OPCPackage Potentially clobbers files on close()
| 62980 | SS_Common XSSF HSSF | Make D* functions ignore case in headings
| 60977 | XSSF | Adding custom properties creates invalid .xlsx file on second write
| 60460 | SL_Common | Null pointer exception in ExternSheetNameResolver.prependSheetName method
| 60845 | XSSF | Fix copying styles/conditional formatting
| 63054 | SS_Common XSSF HSSF | Improved evaluation of array formulas with errors in arguments
| 63047 | POI_Overall | Make POILogger subclassable
| 62904 | SS_Common XSSF HSSF | Support array arguments in IF and logical IS*** functions
| 63028 | SL_Common XSLF HSLF | Provide font embedding for slideshows
| 61532 | SXSSF | Fix setting values/types during formula evaluation for SXSSF
| 62629 | OPC | Allow to handle files with invalid content types for pictures
| 62839 | SL_Common | Fix MathX.floor for negative n
| 62884 | SL_Common | Sheetnum is not checked in InternalWorkbook.setSheetHidden()
| 62886 | OPC | Regression extracting text from corrupted docx files
| 63017 | SL_Common XSLF | Remove rows from a XSLFTable
| 60656 | SL_Common XSLF HSLF | EMF image support in slideshows
| 62365 | XSLF | SVG image support in XSLF
| github-136 | XSSF | Support GEOMEAN function
| 63011 | OPC | Multiple digital signature in excel file broke first signature
| 62999 | SL_Common | IBM JDK JIT causes AIOOBE in TexturePaintContext
| 62994 | POI_Overall | IBM JCE workarounds
| 62966 | SL_Common | init presetShapeDefinitions.xml fail under IBM jdk
| 62953 | SL_Common XSLF HSLF | Rendering of FreeformShapes with formula fails
| 63005 | POI_Overall | Remove support for reading files that have XML entity definitions
| 63013 | XWPF | add XWPFRun setLang method
| 63240 | XSSF | Remove unnecessary synchronization on DocumentHelper.newDocumentBuilder and SAXHelper.newXMLReader
| 61652 | SS_Common | Fix NPE in EDATE function when date evaluates to an invalid value
| 63264 | SS_Common | Conditional Format rule evaluation calculates relative references incorrectly
| 60724 | SS_Common | Implement 'ignore hidden rows' variations for existing SUBTOTAL function variants
| 63268 | SS_Common | Fix issue with CellUtil.setFont adding unnecessary styles
| 61700 | SS_Common | getForceFormulaRecalculation() returns wrong value
| 63292 | SS_Common | DataFormatter.formatCellValue() ignores use1904Windowing w/4-part date formats

## Version 4.0.1 (2018-12-03)

### Summary

- Fixes pom.xml entries for commons-maths3 (missing), curvesapi and commons-codec
- Improvements for XDDF charts and text manipulation
- Upgrade to XMLBeans 3.0.2

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 59773 | POI_Overall | Move loop invariants outside of loop for faster execution
| 59834 | POI_Overall | poi-ooxml pom.xml should include dependency on poi-scratchpad
| 62690 | POI_Overall | Missing Maven dependency to commons-math3
| 62692 | OPC | WildFly XML parser not properly supported - Property 'http://www.oracle.com/xml/jaxp/properties/entityExpansionLimit' is not recognized
| 62699 | POI_Overall | Download page must link to https://www.apache.org/dist/poi/KEYS
| 62733 | XSLF | XSLFBackground setFill() can corrupt the document
| 62735 | XSSF | poi-ooxml 4.0.0 should have dependency on curvesapi 1.05
| 62740 | XSSF | XSSFTable constructor automatically assigns invalid (non-unique) column IDs
| 62768 | OPC | OPCPackage#close() method is incorrectly synchronized
| 62796 | POI_Overall | Remove XML Event parser code from PackagePropertiesMarshaller
| 62800 | XSLF | Fix null pointer exception if a picture shape has no blip id
| 62805 | POI_Overall | Fix Old-Xerces build issues
| 62805 | XSLF | XSLFTableCell#removeBorder(BorderEdge.right) removes the bottom edge not the right edge.
| 62811 | POI_Overall | POI Encryption didn't work with 4.0.0 but did work with 3.17
| 62951 | POI_Overall | FileMagic not correctly identified
| 62949 | SL_Common | SlideShow rendering - keyframe fractions must be increasing
| 62921 | POI_Overall | Provide OOXMLLite alternative for Java 12+
| 62625 | POI_Overall | Handle off-spec, variant REFERENCE_NAME record structure in VBAMacroReader
| 62624 | POI_Overall | Handle module name mapping in VBAMacroReader
| 62836 | SS_Common | Support TREND function
| 62859 | XWPF | Rare NPE while creating XWPFSDTContent
| 62373 | SS_Common | Support for FREQUENCY function
| 62831 | POI_Overall | WorkbookFactory.create support for subclass of File, eg from JFileChooser
| 62815 | XSSF | XLSB number extraction improvements
| 62373 | SS_Common | Support FREQUENCY function
| 62742 | POI_Overall | Add common-compress jar to bin zip/tgz
| 62747 | POI_Overall | Upgrade bouncycastle dependency to 1.60
| 62736 | XWPF | Relations on XSLFPictureShape were removed unconditionally
| github-109 | XDDF | Define XDDF user model for text body, its paragraphs and text runs
| github-123 | XSSF | Import chart on drawing
| 62746 | XDDF | Support axIds in XDDF
| 60509 | XSSF | XSSFWorkbook.setSheetName() does not update references in charts
| 59625 | XWPF | Localisation (Internationalisation in other languages) when applied in charts corrupt the MS Word file

## Version 4.0.0 (2018-09-07)

### Summary

- Removed support for Java 6 and 7 making Java 8 the minimum version supported
- New OOXML schema (1.4) necessary, because of incompatible XMLBeans loading not anymore through POIXMLTypeLoader

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 62649 | POIFS | Remove OPOIFS* (breaks backwards compatibility)
| 61589 | XSLF | Importing content does not copy hyperlink address
| 62587 | XSLF | repeated call to XSLFSheet.removeShape leads to java.lang.IllegalArgumentException: partName
| 62513 | OOXML | Don't try to parse embedded package relationships
| 59268 | OOXML | Work on providing an updated version of XMLBeans
| 62451 | HPSF | Document last printed in the year 27321
| 60713 | SXSSF XSSF OPC | (S)XSSFWorkbook/POIXMLDocument.write(OutputStream) closes the OutputStream (breaks backwards compatibility)
| 62452 | OPC | Extract configuration while verifying XML signatures
| 62187 | OPC | Compiling with Java 10 fails with ClassCastException / use commons-compress (breaks backwards compatibility)
| 62355 | POI_Overall | Unsplit packages for Jigsaw / Java 9 compatibility (breaks backwards compatibility)
| 62041 | SL_Common | TestFonts fails on Mac
| 62051 | XSLF | Two shapes have the same shapeId within the same slide
| 61633 | XSLF | Zero width shapes aren't rendered
| 62037 | SL_Common | SlideNames should not be null but have a default as if accessed by VBA
| 62381 | SL_Common | Fix rendering of AutoShapes
| 59893 | POI_Overall | Forbid calls to InputStream.available
| 61905 | HSSF | HSSFWorkbook.setActiveCell() does not actually make the cell selected in Excel
| 61459 | HSLF | HSLFShape.getShapeName() returns name of shapeType and not the shape name
| 62319 | SL_Common | Decommission XSLF-/PowerPointExtractor (breaks backwards compatibility)
| 62092 | SL_Common | Text not extracted from grouped text shapes in HSLF
| 62159 | OPC | Support XML signature over windows certificate store
| 57369 | XDDF | Add support for major and minor units on chart axes
| 55954 | XWPF | Added methods to position table
| 61947 | POI_Overall | Remove deprecated classes (POI 4.0.0)
| 55954 | XWPF | Add functions to get, set, remove outer borders for tables
| github-72 | XDDF | Define XDDF user model for shape properties to be shared between XSLF, XSSF and XWPF
| 61543 | XSSF | Do not fail with "part already exists" when tables are created/removed (breaks backwards compatibility)
| 61550 | POI_Overall | Add more information to exception text and verify that it is thrown (breaks backwards compatibility)
| 61609 | POI_Overall | Add .gitattribute file and set lf for one sample-file (breaks backwards compatibility)
| 61797 | SL_Common | Embed Excel / Ole objects into powerpoint (breaks backwards compatibility)
| 61943 | SL_Common | narrow generics definition because of tighter java9 checks
| 61942 | OPC | Refactor PackagePartName handling and add getUnusedPartIndex method
| 61941 | POIFS | Move Ole marker generation to Ole10Native
| 61940 | POI_Overall | Replace ClassID statics with enum
| 61939 | OPC | Provide schema for AlternateContent - provide new ooxml-schemas-1.4.jar
| 61787 | HSSF | Change how deleted content is detected to not incorrectly see too much text as deleted, this was introduced with bug 58067
| 61798 | HSSF | Fix usage of getLastCellNum() when calculating worksheet dimension during saving
| 61911 | HWPF | Avoid IndexOutOfBounds access when reading pictures
| 61765 | HSSF | Support third party tool generated files using WorkBook as their POIFS directory name
| 61881 | HSLF | Regression in ppt parsing: typeface can't be null or empty
| github-68 | XDDF XSLF XSSF XWPF | Share chart data implementation between XSLFChart, XSSFChart and XWPFChart through XDDF
| 61809 | HPSF | Infinite loop in SectionIDMap.get() and .put()
| 60887 | XSSF | Surface XSSF Header/Footer Attributes
| 61730 | SS_Common | CellRangeAddresses support iterating over their CellAddresses
| 61727 | SS_Common | CellRangeUtil merge cell ranges broken for certain orders of arguments
| 57517 | HSSF | Fix various situations that were handled incorrectly in HSSFOptimiser
| 61671 | XSLF | XSLFSlide does not contain isHidden and setHidden like HSLFSlide does
| 61630 | XSSF | Performance improvement to XSSFExportToXML
| 58068 | XSSF | Add a method to pass the actual Color to StylesTable.findFont()
| 61096 | POIFS | Add support for modules in VBAMacroReader
| 61033 | XSSF | Add XSSFWorkbook.setCellFormulaValidation() to control if formulas are validated during Cell.setCellFormula()
| 61148 | SXSSF | Fix calculating/setting formula value
| 61064 | SS_Common | Support behavior of function CEILING in newer versions of Microsoft Excel
| 61516 | SS_Common | Correctly handle references that end up outside the workbook when cells with formulas are copied
| 60737 | XSSF | Add endSheet() to XSSFEventBasedExcelExtractor
| 59747 | OPC | Exchange order of writing parts into Zip to allow some tools to handle files better
| github-69 | SS_Common | Support matrix functions
| 60499 | OPC | Deleting a picture that is used twice on a slide corrupt the slide
| 60279 | POI_Overall | Back-off to brute-force search for macro content if macro offset is incorrect
| 61528 | XSSF | Pivot table enhancements
| 61906 | XSSF | add API for working with RichStringText
| 61792 | SS_Common | Avoid iterating over chars (use codepoints instead)
| 62254 | SS_Common | Update OFFSET function to support optional values
| 62435 | XSSF | Rename getAllEmbedds method to getAllEmbeddedParts (getAllEmbedds is retained but deprecated)
| 62438 | POI_Overall | Replace org.apache.poi.openxml4j.util.Nullable with java.lang.Optional (breaks backwards compatibility)
| github-90 | XSSF | Change default DSIG signing algorithm to SHA256
| github-107 | SS_Common | Support AREAS function
| github-110 | XWPF | Renames org.apache.poi.xwpf.usermodel.TextSegement to org.apache.poi.xwpf.usermodel.TextSegment (breaks backwards compatibility)
| github-114 | XWPF | Better support for Footnotes and Endnotes