Apache Software Foundation > Apache POI

- Home
- Help
- Component APIs
- Getting Involved

# History of Changes

## Current releases

The change log for the current release can be found in the home section.

## Version 3.17 (2017-09-15)

### Summary

- Removal of deprecated classes and methods that were marked for removal in v3.17
- Various modules: add sanity checks and fix infinite loops / OOMs caused by fuzzed data
- OPC: fix linebreak handling on XML signature calculation (#61182)
- SS Common: fix number formatting (github-43/52, #60422)
- SXSSF: fix XML processing - unicode surrogates and line breaks (#61048, #61246)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 61478 | OPC | POI OOXML-Schema lookup uses wrong classloader
| 61470 | XWPF | Handle ruby (phonetic) elements in XWPFRun
| 61381 | POIFS | PushbackInputStreams passed to ZipHelper may not hold 8 bytes
| 58975 | SS_Common | Support formula evaluation with functions containing more than 127 arguments
| 60422 | SS_Common | Fix issue with number formatting in non-default locales
| 61048 | SXSSF | Fix issue where carriage returns were being escaped as line feeds
| 61246 | SXSSF | Do not replace Unicode Surrogate chars with ? when writing SXXSF sheets
| 61363 | POI_Overall | Unify escher shape id allocation
| 61350 | OPC | Use unsynchronized xmlbeans
| 61346 | HEMF | Add more sanity checks before allocation of byte arrays in HEMF/HWMF
| 61338 | HWMF | Avoid infinite loop with corrupt file
| 61295 | HPSF | Avoid OOM in hpsf with corrupt file
| 61331 | SL_Common | Font group handling / common font interface
| 61300 | POIFS | Avoid infinite loop with corrupt file
| 61286 61287 | HSSF | Handle zero-length headerfooter and 2 byte WriteProtectRecord
| github-43 | SS_Common | RoundUp and RoundDown functions round incorrectly in some scenarios
| github-52 | SS_Common | Support number formats with trailing commas
| 61294 | POI_Overall | Fix bug that allowed IOUtils.skipFully to enter infinite loop
| 61266 | POIFS | More helpful exception on unsupported old MS Write WRI files
| 61243 | POI_Overall | Refactor and unify toString/toXml in DDF
| 61182 | OPC | Invalid signature created for streamed xlsx file

## Version 3.17-beta1 (2017-07-01)

### Summary

- XSSF: improved support for XSSFTables
- HSLF: various fixes in table support
- HPSF: reworked to cover edge cases and better support non-latin charsets
- SL Common: fixed rendering of preset-shapes
- HWPF: support for Binary RC4 / CryptoAPI de-/encryption

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 61203 | XSSF | XSSFDrawing.getAnchorFromParent handles CTOneCellAnchor incorrectly, ignores CTAbsoluteAnchor
| 56557 | SXSSF | Output file get corrupted with SXSSFWorkbook and "chart sheet"
| 61045 | HSLF | Allow for extra bytes in FormatRecord
| 52063 | SS_Common | Add formula support for LOOKUP(lookup_value, array)
| 61169 | SL_Common | Text with Japanese characters overflows textbox
|  | XSSF | XSSFTable improved support for creating columns and setting table areas, without needing to use CT classes
|  | XSSF | XSSFTable should format numeric/date cells when used as Column Header names as Excel does
| 61162 | HWPF | En-/decryption support for HWPF
| 60230 | XSSF | Round trip workbook encryption and decryption
| 58325 | XSSF | XSSFDrawing.getShapes() returns zero if sheet has more than one embedded OLE object
| 61119 | SL_Common | Fix preset shape rendering and shading
| 61059 | HSSF | Allow workbooks to contain more than 32k names
| github-55 | XSSF | Allow XSSFNames set with a long name that looks similar to a cell address
| github-25 | SXSSF | Add lock/unlock sheet protection and tab colors
| github-32 | SS_Common | Speed up Irr() formula evaluation
| github-52 | HSSF | Add a function to convert an HSSFWorkbook to an HTML document from an InputStream
| github-53 | XWPF | fix NPE when iterating over paragraphs in certain *.docx files
| github-54 | XSSF | Decrease execution time and memory consumption when adding XSSFPictures to an XSSFWorkbook
| 52117 | HPSF | Invalid "last printed" summary field value
| 60352 | XSSF | Text extraction: Don't include the text "null" for empty cells
| 52372 | HPSF | OutOfMemoryError parsing a word file
| 61062 | HPSF | Various HPSF related fixes
| 61034 | XSSF | Call to XSSFReader.getSheetsData() returns duplicate sheets
| 61049 | SS_Common | Fix order of two built-in formats
| 61021 | XSSF | Extract Excel 2013 absPath info from xlsb
| 60998 | HSLF | HSLFTable.setRowHeight sets row height incorrect
| 60996 | XSSF | Multiple embedded objects on same sheet are ignored
| 60993 | HSLF | Grid and rowspan calculation in table cells is wrong
| 60973 | XDGF | Support for "PolylineTo" as well as existing alternate spelling "PolyLineTo"

## Version 3.16 (2017-04-19)

### Summary

- add initial streaming, read-only support for xlsb files
- SL Common: various rendering issues resolved
- various charset related fixes in SS Common, XSSF and HWPF

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 60810 | XSLF | Check for duplicate relation-names for notes similar to the fix for slides (fixed via bug 55791)
| 60823 | SS_Common | Correct behavior of function DGET with multiple result entries but only one non-blank. Thanks to Patrick Zimmermann for the patch
| 50955 | HWPF | Fix charset handling in HWPFOldDocument
| 60826 | XSSF | Add initial streaming, read-only support for xlsb files
| 51519 | XSSF | Allow user to select or ignore phonetic strings in shared strings table
| 60662 | XSLF | Slide import delete unrecognized elements in group shape
| 60715 | XSLF | Blank layout was not found
| 59227 github-48 | SS_Common | Support Chinese and Japanese date formats
| 59983 | XSSF | Shift shared formulas when shifting rows in a sheet
| 60625 | SL_Common XSLF HSLF | Rendering issue with background and shape overlayed by image
| 60626 | XSSF | ArrayIndexOutOfBoundsException in EvilUnclosedBRFixingInputStream

## Version 3.16-beta2 (2017-02-02)

### Summary

- The third-party jar for commons-collections4 is now required for handling of OLE2 properties
- Primitive (experimental) EMF/WMF text extraction support
- Unicode and internationalization improvements

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 60219 | SS_Common | FormulaParser can't parse external references when sheet name is quoted, thanks to Ignacio HR for the patch
| 60369 | SS_Common | Adjust pattern to better handle non-ASCII characters in Month-names which can appear since Java 8, thanks to Patrick Metz for the patch
| 60512 | OOXML | Missing XSSFRelation.CUSTOM_PROPERTY generates POIXMLException on cloneSheet() method, thanks to Samson Tesfay for the patch
| 60031 | SS_Common | DataFormatter parses months incorrectly when put at the end of date segment, thanks to Andrzej Witecki for the patch
| 60601 | XSSF | Unlink hyperlinks node if all hyperlinks removed from a sheet
| 60570 | HEMF | Add rudimentary read-only capability for EMF
| 60586 | SS_Common XSSF | Support embedding OLE1.0 package in XSSF / SS Common
| 60260 | SS_Common | Partial support for unicode sheet names
| 60550 | HSMF | Parse Content-ID for inline images in MAPIMessages
| 60498 | XSSF | Fix performance problem with XPath parsing in XSSF import from XML
| 60484 | HWPF | NPE when reading a document containing an embedded picture
| 60521 | XSSF | XSSFGroupShape nesting
| 60519 | SS_Common | Extractor for *SSF embeddings
| 60520 | SS_Common | SS Common classes for *SSF shapes
| 60526 | OOXML | Make loggers final and make throttled log actually work, thanks to PJ Fanning for the patch
| 60452 | SS_Common | WorkdayCalculator calculateWorkdays does return wrong value for same day input, thanks to Fabio Heer for the patch
| 60465 | XWPF | Cannot specify Interline spacing for paragraphs
| 58237 | XWPF | Unable to add image to Word document header
| 55902 | SL_Common | Mixed fonts issue with Chinese characters (unable to form images from ppt)
| 60331 | OOXML | Remove deprecated classes - remove constructors with PackageRelationship argument (breaks backwards compatibility)
| 60329 | XWPF | Added try/catch block to swallow NPE
| 60370 | XSSF | Encode some special characters when setting title/text for validation text-boxes
| 60427 | XSLF | Creating pictures in PowerPoint slides requires scratchpad-jar for adding WMF images
| 60331 | HPSF | Remove deprecated classes - deprecate Mutable* property classes (breaks backwards compatibility)
| 59200 | SS_Common | Check for actual Excel limits on data validation title/text
| 60373 | XSLF | TableCell.getTextHeight() returns NullPointerException

## Version 3.16-beta1 (2016-11-20)

### Summary

- Initial work on adding a Gradle build, the Ant based build is currently still the official buildsystem, but there are plans to replace this with Gradle in the future
- Add support for mixed-length cipher/hashes in password protected files typically used by Office for Mac
- Add CryptoAPI and encryption write support for HSSF
- Improve support for reading VBA macros
- Examples to encrypt temp files in SXSSF

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 60331 | XSSF | Remove deprecated classes (POI 3.16) - remove StylesTable.getNumberFormatAt(int)
| 60345 | HSLF | Handle corrupt PICT streams
| 59273 | XSLF OOXML | Unable to create pptx file by potx file using Apache POI
| github-42 | SS_Common | Add setFormattingRanges() to interface ConditionalFormatting
| 60321 | SXSSF | Examples: encrypt temp files created when unzipping or zipping an SXSSF workbook
| 60337 | XWPF | Table row isRepeatingHeader and isCantSplit throw NPE
| 60342 | XWPF | Handle an SdtCell that has no SdtContentCell
| 60341 | XWPF | Handle an SdtBody that has no SdtPr
|  | SS_Common | CellStyle support for "Quote Prefix" aka "123 Prefix"
| 60320 | POIFS | Issue opening password protected xlsx
| 57366 | XWPF | Refactor Header/Footer creation to allow table in header/footer. No longer creates empty paragraph in header/footer (breaks backwards compatibility)
| 53611 | XSSF | Populate dimension of XSSF Worksheet when writing the document
| 60315 | OPC | Add 'yyyy-MM-dd' as a possible format for date metadata items in OPC
| 60305 | HSLF | Gracefully handle AIOOBE in reading potentially truncated pictstream
| 59026 | XSSF | Avoid possible NullPointerException when exporting to XML
| 60059 | XSLF | Deprecate xslf.usermodel.Drawing* - was: Can't change text of DrawingParagraph
|  | HDGF | Partial v5 Pointer and Text Extraction support
| 60294 | HSLF | Add "unknown" ShapeType for 4095
| 60289 | XSSF | Fix handling of rich-text unicode escapes with lowercase hex-chars
| 60288 | OOXML | reduce time needed to lookup document relationships
| 60029 | SS_Common | Fix problem with Days360 method for the month of february
| 60134 | POI_Overall | General: Enhance the Gradle build to allow to run API comparisons against previous releases using the Japicmp tool
| 55714 | XSLF | background image ignored on slide copy
| 60255 | XSSF | create drawings when workbook contains non-sequential drawing indices
| 59302 60273 59830 59858 60158 | POI_Overall | Various improvements for reading VBA macros
| 53191 | HSLF | Problems with line style when converting ppt to png
| 60255 | XSSF | Check for in-use drawing part names and use next available, when creating a new sheet drawing
| 56781 60246 | SS_Common | named range validation
| 59907 | SS_Common | Regression in getting and setting anchor type introduced in 3.15
| 60153 | SXSSF | AES encrypt temporary files and workbook on disk
| 51233 55075 | SXSSF | image is incorrectly resized if custom row height is set
| 60197 | SS_Common | named range sheet index not updated when changing sheet order
| 60003 | HSLF | Regression: Powerpoint text extractor from footer of master slide
| 60226 | OOXML | ClassLoader workaround for OSGI when processing OOXML files
| 59907 | HSLF | Regression: types in HSSFClientAnchor.setAnchorType() were changed, breaking Jasperreports POI support
| 53028 | HSSF | Broken auto fit row height in the cells with word wrap
| 60187 | SS_Common | support BorderStyle enums in RegionUtil
| 59857 | HSSF | Password protected files with "Microsoft Enhanced Cryptographic Provider v1.0"
| 59687 | XSSF | Comments removed from wrong row when removing a row from a sheet with empty rows
| 59933 | POI_Overall | Fix IllegalAccess exception caused by logger
| 59853 | XSSF | Support Table (structured reference) sources in PivotTables
|  | POI_Overall | Add initial Gradle build

## Version 3.15 (2016-09-19)

### Summary

- HSSF, HSLF, HPSF, and HWPF support for writing out to a File, including an existing open file (#57919)
- Various improvements to HSSF and XSSF.
- XSSF performance improvements for large numbers of named ranges.
- Progress towards enums rather than ints for various types
- CellStyle#BORDER_HAIR and #BORDER_DOTTED were swapped to correctly reflect the official names and to be consistent with BorderStyle enum. HAIR has smaller dots than DOTTED.
- Removal of deprecated classes and methods detailed on bug 59170

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 60140 | OOXML | Fixed memory leak in FileBackedDataSource
| 60128 | OOXML | Close open file handles before raising an exception
| 60131 | SS_Common | D* function refactorings
| 60130 | SS_Common | Fix DGET function behaviour with empty cells
| 52425 | XSSF | Error adding Comments into cloned Sheets
| 60025 | SS_Common | DataFormatter should return TRUE or FALSE for boolean cell values
| 58191 | XSLF | Support merge cells within a table row
| 59958 | XSSF | Add cells on the fly to the evaluation sheet cache on cache miss
| 60005 | XSLF | NPE in XSLFTextParagraph.getDefaultFontSize()
|  | POI_Overall | Add Apache commons-collections4 dependency (breaks backwards compatibility)
|  | SS_Common | XSSFFormulaEvaluator.evaluateAll() should mirror HSSF and use any setup referenced workbooks
| 59736 | SS_Common | Incorrect evaluation of SUBTOTAL with composite interval
| 55384 | SXSSF | Handle setting pre-evaluation string correctly in SXSSF as well
| 59634 | POI_Overall | Clarify and refine JavaDoc of various close() methods to consistently state that close() invalidates the object
| 57919 | POI_Overall | HSSF, HSLF and HPSF support for in-place writing to the currently open File (requires the POIFS/NPOIFS was opened from a read-write File)
| 57919 | POI_Overall | HSSF, HSLF, HPSF and HWPF support for writing out to a new File - normally faster than writing to an OutputStream
| 59881 | SS_Common | D* formula evaluation from blank cells in database headers
| 52122 | XSSF | Excel does not handle conditional formatting based on formula correctly unless recalculation is forced
| 59106 | SS_Common | WorkdayFunction does not read the area with holidays correctly to calculate work days
| 58802 | HWPF | Allow reading of footnote and endnote properties
| 59665 | HSSF | Using HSSFWorkbook#setSheetOrder to move sheets to the end corrupts bspos value in WorkbookRecordList
| 59740 | SS_Common | Sheet.shiftRows incorrectly shifts merged region if there exists another merged region
| 59873 | SS_Common SL_Common | migrate hyperlink constants from Hyperlink to HyperlinkType enum
| 59837 | SS_Common | migrate cell alignment constants from CellStyle to HorizontalAlignment and VerticalAlignment enums
| 59791 | SS_Common | migrate cell type constants from Cell to CellType enum
| 59775 | XSSF | correctly recognized URL hyperlinks containing a hash mark
| 59872 | SS_Common | add Sheet#getHyperlink(CellAddress)
| 59841 | OOXML | enable custom zip streams via OPCPackage.open(ZipEntrySource)
| 59833 | SS_Common | migrate fill pattern constants from CellStyle to FillPatternType enum
| 56154 | OOXML | Get and set last modified by user property
| 59776 | OPC | Attach cause of exception when marshalling a Zip Package
| 59814 | SS_Common | clear cached EvaluationWorkbook and EvaluationSheetvalues from WorkbookEvaluator
| 59805 | POI_Overall | fixed memory leak in LocaleUtil
| 59780 | OPC | OPC support for a wider range of timezone'd created and modified date formats in package properties
| 59796 | XSSF | XSSFTable.getRowCount off-by-one error
| 59795 | XSSF | XSSFTable needs a method to reset start/end Cell References
| 59790 | SS_Common | convert FormulaType class to enum
| 59789 | HSSF | improve performance of row shifting on sheets that contain comments
| 59786 | HMEF | fix NPE from HMEFContentsExtractor
| 59788 59166 | POI_Overall | Create temporary directories that are deleted on JVM exit
| 59170 | HSSF | Remove deprecated classes (POI 3.15) - o.a.p.hssf.model.*Shape classes removed (breaks backwards compatibility)
| 59781 | SS_Common | Move PaneInformation from HSSF to SS package
| 59766 | XSSF | When setting SAX features, handle Error too (eg from Google AppEngine)
| 59734 | XSSF | Make lookup and creation of named ranges constant-time instead of linear in the number of ranges in the workbook
| 59920 | XSSF | Fix regression in the handling of empty passwords for workbook protection
| 59922 | XSSF | Rename XSSFPaswordHelper to XSSFPasswordHelper

## Version 3.15-beta2 (2016-07-02)

### Summary

- initial work on extracting VBA macros (#52949)
- remove deprecated classes (#59170)
- various X/HSLF fixes for table and color handling
- XSSF: formula evaluation performance improvements (#57840)
- various fixes for merged regions in Common SS

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 59748 | POI_Overall | Replace Hashtable with HashMap
| 59746 | XSSF | XSSF support for files from certain alternate tools where the row XML is missing the row number
| 59743 | SXSSF | ZipSecureFile throwing "zip bomb detected" exception when writing SXSSFWorkbook
| 59742 | XSLF | XSLFPictureData support for TIFF images
| 59717 | OOXML | POIXMLProperties helper methods for reading and changing OOXML document thumbnails
| 59730 | SS_Common | add Sheet.removeMergedRegions
| 59729 | SS_Common | move CellRangeUtil to o.a.p.ss.util
| 56958 | SS_Common | correctly check array formulas for intersection when adding merged regions
| 59724 | POI_Overall | Provide a close() method and implement Closeable on all OLE2-based POIDocument classes
| 59719 | XSSF | correctly parse literal data validation constraints
| 59170 | POI_Overall | Remove deprecated classes (breaks backwards compatibility)
| 59645 | SS_Common | Print row and column headings
| 55983 | HSLF | Creating transparent Freeform object does not result in transparent shape
| 59702 | XSLF | Setting background color in slide master
| 57838 | XSSF | Remove related cell-comments when removing a row
|  | POI_Overall | Initial steps to allow to compile against Java 9
| 57840 | XSSF | 30% faster formula evaluation
| 57840 57721 | XSSF | Formula parsing and evaluation containing structured references (data tables)
| 59684 | SS_Common | Parsing absolute entire-row CellReferences
| 59686 | XSLF | Error when trying to access XSLFTableCell properties like textHeight, lineWidth, etc
| 59170 | POI_Overall | Remove deprecated classes (POI 3.15) - remove BuiltinFormats.getBuiltinFormats() (breaks backwards compatibility)
| 59638 | SS_Common | allow DataFormatter to use Locale-aware number grouping separator
| 57766 | XSLF | Table isn't exported on convert slides of a .pptx slide show to a PNG/SVG image
| 58217 | XSLF | support alpha channel on solid colors (fill, line, text)
|  | XSLF | remove creation of empty paragraph in XSLFTextShape.addNewTextParagraph()
| 59355 | XSSF | XSSFPivotTable::addColumnLabel sets the cell type of a cell outside of the source data area
| 54570 | XSLF | InvalidFormatException because of Absolute URI forbidden
| 59170 | POI_Overall | Remove deprecated classes (POI 3.15) - use FormulaError instead of ErrorConstants (breaks backwards compatibility)
| 58144 | SL_Common | Behaviour for headers and footers of slides is inconsistent between slideshows created in 2003 and 2007
| 59443 | SS_Common | get and set Comment addresses
| 59434 | XSLF | Cannot add a picture on a slide that already have an image with an hyperlink on it
| 59383 | SS_Common | performance regression: DataFormatter no longer caches formats
| 59327 | SL_Common | Setting text direction on a table cell has no effect
| 58648 | SS_Common | Regression: Fix handling of whitespaces in formulas after it was slightly broken by the changes to support the intersection operator
| 59342 | XSSF | Get and set sheet tab color
| 59340 | SS_Common | Lookup IndexedColors by index
| 59336 | SS_Common | Deprecate CellUtil methods that do not need a workbook parameter
| 59338 | HSSF | Mark HSSFCellUtil for removal, replaced with Common SS CellUtil
| 52949 | HSSF | VBA Macro reader and extractor
| 55982 | HSSF | Don't fail to open the spreadsheet if no TabIdRecord is found
|  | POI_Overall | Fix some cases where file-handles were not closed properly, mostly when the documents could not be opened correctly
| 56911 | HWPF | Fix IndexOutOfBoundsException in PlfLfo.add()
| 59264 | SS_Common | unify setting cell border line style with BorderStyle

## Version 3.15-beta1 (2016-04-15)

### Summary

- removal of deprecated elements (#59170)
- avoid XmlBeans calls to piccolo parser which caused OOM in rare cases (#57031)
- support for passwords longer than 15 chars for write-protection or binary formats (#59135)
- various NPE fixes in XSSF/HSSF
- fixes for color handling in XSSF and support for system colors in Common SL

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 58909 | XSSF | Add a cloneSheet() which directly sets the sheetname to allow to avoid a costly renaming of sheets
| 59183 | OPC | Regression in 3.14 on OPC files with less common timezone formats in the core properties
| 59132 | SS_Common | Adjust implementation of COUNTBLANK to be conforming to Excel, empty strings are counted as blank as well
| 59199 | XSSF | Gracefully handle null-values in Cell.setValue() for Date and Calendar similar to String
| 59224 | XSSF | fix XSSFColor.hasTint which incorrectly used the alpha channel, add XSSFColor.hasAlpha
| 59222 | XSSF | fix NPE raised by XSSFSheet.getCellComments()
| 59212 | SS_Common | copy non-validating XSSFSheet.addMergedRegionUnsafe from bug 58885 to Sheet interface
| 59208 | XWPF | bold xml value of "1" treated as false
|  | HSLF | Add support for system colors
| 56930 | SS_Common | Add Workbook.getNames() to allow to query for names that appear multiple times
| 55791 | XSLF | Avoid using an existing file-name when creating a new slide, it could still be left over from previous partial removal
| 55668 | SS_Common | Try to avoid NullPointerException by setting the cell to BLANK instead, when changing cell-type and a formula leads to null-string
| 59135 | HSSF | Password gets truncated when using passwords longer than 15 characters for the function protectSheet()
| 56549 | HWPF | Correctly calculate char index ranges for HWPF in the TextPieceTable
| 57495 | XWPF | Fix problem with tables in documents at pos 0
|  | POI_Overall | Fix a number of edge-cases where file-handles would be leaked
| 59170 | POI_Overall | Remove deprecated classes (POI 3.15) - *Workbook.setRepeatingRowsAndColumns() (breaks backwards compatibility)
| 59170 | SS_Common | Remove deprecated classes (POI 3.15) - org.apache.poi.hssf/ss.util.Region (breaks backwards compatibility)
| 57031 | XWPF | Out of Memory when extracting text from attached files
|  | POI_Overall | More helpful exception when POIFSFileSystem is given a raw XML file
|  | POI_Overall | More helpful exceptions when OPCPackage is given OLE2 or ODF or raw XML files

## Version 3.14 (2016-03-07)

### Summary

- Common: New version of ooxml-schema and ooxml-security jars which are linked to custom safe type loader
- Common: OPC relation fix for multiple same named ids (54916)
- Common: Update third-party dependencies: commons-logging, commons-codec, xmlsec, bouncycastle
- Excel: Allow to set multiple cell style properties at once (58633)
- Excel: Add API for inserting ignored warnings into XSSF sheets. This can be used e.g. to suppress 'number stored as text' warnings. (56892)
- Powerpoint: unify hyperlink handling
- HSLF: various fixes for parsing and rendering
- WMF: new API for WMF parsing and rendering (for Powerpoint)
- XWPF: various fixes for handling paragraphs and tables

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 57914 | OPC | Provide a better error message for OOXML strict format which we do not support yet
| 47245 | HSSF | Adjust handling of missing row-records as it seems LibreOffice/Excel are handling such documents
| 59056 | SL_Common | Render individual slideshow shapes
| 59074 | POIFS | ExtractorFactory should give a more helpful exception on old Excel files too old for ExcelExtractor
| 57989 | XSSF | XSSFChart support for setting chart titles
| 59030 | XWPF | Prevent NPE in XWPFTableCell's getVerticalAlignment() from Prasad Babu
| 59021 | XSSF | XSSFSheetXMLHandler fails to extract content if namespace is included in qName
| 56345 | SS_Common | Reject single-cell merged regions
| 58339 | SS_Common | Make OFFSET() allow missing optional height and width parameters
| github-27 | XWPF | Handle documents with a picture-only header
| 58996 | XSSF | Regression caused by fixing bug 56295: Don't try to unset fill color if it is not set to avoid invalid access inside the Xml structures
| 57034 | SXSSF | Cell.setCellValue((String)null) should be treated as an empty cell on SXSSF as well, to avoid a NPE when autosizing columns
|  | XSLF | fixed NPE when adding pictures with existing non-picture media files (e.g. movies)
| 58885 | XSSF | Fixed performance regression after fixing bug 58443 when adding a merged region to an XSSFSheet
|  | OPC | Raised xmlsec version to 2.0.6
| 47291 | HSLF | Cannot open link correctly which insert in ppt
| 41047 | HSLF | Support hyperlinks in HSLF shapes and textruns
| 58879 | SS_Common | Return SpreadsheetVersion from Workbook
|  | HSLF | Fix NPE when calling HSLFTextRun.setHorizontalCentered()
| 58633 | SS_Common | Set multiple cell style properties at once
| 56004 | HSLF | Support for WMF rendering
| 56892 | XSSF | Add API for inserting ignored warnings into XSSF sheets. This can be used e.g. to suppress 'number stored as text' warnings
| 58847 | HPSF | Getters/setters/removers for the additional well-known document summary information properties from Office 12
| 57796 | XSLF | Support hyperlink extraction when rendering slides
| 54916 | XSLF | POI does not always read all the slides in pptx files
| 58043 | SS_Common | Provide some compatibility between HSSF and XSSF in regards to values for CellStyle.setRotation()
| 58067 | XWPF | don't return deleted text when document is in review-mode
| 58618 | XWPF | XWPFParagraph insertNewRun and removeRun work incorrectly for runs after hyperlink/field runs
| 58760 | XSSF | Non-standard namespace-key breaks parsing XLSX files
| 58746 | HSSF | Fix missing adjustment of formulas when sheet-ordering is changed
| 58616 | XSSF | Try to initialize with empty password if not done before
|  | POI_Overall | Fix some cases where file-handles were left open, mostly when failing to parse documents
| 55030 | HSLF | RichTextRun getFontName can not get chinese font name
| 56570 | HSLF | RecordType has repeat by code type 3009
| 58159 | HSLF | getHeaderText() and getFooterText() duplicate text in sheet.getTextRuns()
| 58775 | XSSF | Set maximum number of data formats to avoid corrupted workbook
| 58778 | XSSF | Override built-in number formats in XSSFWorkbooks
| 58733 | HSLF | New AIOOBE in getCell while iterating through a table in PPT
| 58718 | HSLF | Master styles not initialized when running multithreaded

## Version 3.14-beta1 (2015-12-24)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 58084 | XSSF | Corrupted .xlsx file created when styles with borders are cloned from other workbooks
| 58570 | SS_Common | Promote setting and getting the active cell in a worksheet to Common SS
| 47904 | HSLF | Update text styles in HSLF MasterSlide
| 58670 | SXSSF | Change underlying data structure in SXSSFRow to use a TreeMap instead of an array to store SXSSFCells
| 58671 | SS_Common | Replace MissingCellPolicy class with enum
| 57450 | SXSSF | Autosize columns on SXSSFSheets considering both active window and flushed rows
| 58557 52903 | SS_Common | Add support for shifting hyperlinks when shifting rows on a sheet
| 58667 | SS_Common | Implement Comparable interface in HSSFRow, XSSFRow, and SXSSFRow classes
| 46210 | HSLF | Title placeholder not recognized by Powerpoint 2003
| 58663 | XSLF | Pictures cannot be removed from a slide
| 58636 | SS_Common | Replace ClientAnchor anchor type constants with AnchorType enum
| 58644 | SS_Common | Replace Sheet.setZoom(num, den) with Sheet.setZoom(scale)
| 58642 | SS_Common | Remove deprecated functions (breaks backwards compatibility)
| 58365 | SS_Common | Get all cell comments on a sheet with Sheet.getCellComments()
| 58637 | SS_Common | Add CellAddress class, to be used instead of CellReference when the concept of an absolute/relative reference is not applicable
| 58617 | POI_Overall | Add custom safe XmlBeans type loader / rename vendor specific schema packages
| 58630 | POIFS | Signing failed after deletion of first sheet
| 55955 | HSLF | Filling an existing ppt table stopped working with 3.9
| 54210 | HSLF | When saving PPT to PNG, some text is rendered backwards
| 53189 | HSLF | Shapes drawn wrongly when ppt file converted to image
|  | POI_Overall | Removed most reflection calls on private methods/fields from production code; others are wrapped by AccessController.doPrivileged()
| 58597 | XWPF | XWPFDocument causes SecurityException under SecurityManager
| 53192 | HSLF | Images in ppt file have wrong width when converting ppt to png
|  | HSLF | Add support for HSLF metro blobs
| 52297 | HSLF | Bullets are not aligned properly while converting ppt slide to image
| 55265 | SS_Common | DataFormatter correct support for alternate number grouping characters, eg 1234 + #'##0 = 1'234 not 1,234
| 51622 | SS_Common | autoSizeColumn incorrectly sizes columns containing leading whitespace
| 58576 | SS_Common | Rename misspelled SheetUtil.canComputeColumnWidth
| 58572 | SS_Common | Add getHyperlink and getHyperlinkList to Sheet interface
| 58348 | SS_Common | Add support for copying rows in XSSFWorkbooks
| 45908 | HSLF | RichTextRun.setBullet(false) doesn't work, bullets still here
| 45088 | HSLF | POI-HSLF changeTextInRichTextRun corrupts presentation
| 45124 | HSSF | inserting text or images wipes out boldness and makes everything italic
| 58452 | SS_Common | Set cell formulas containing unregistered function names
| 58442 | SS_Common | Add method to reorganize AreaPtg as top-left and bottom-right references
| 58443 | SS_Common | Prohibit adding merged regions that would overlap with existing merged regions
|  | OPC | Add a limit of the max number of characters that can be extracted to avoid sending applications out of memory with very large documents. Limit can be adjusted via ZipSecureFile.setMaxTextSize() if necessary
| 58516 | HSLF | Rare new aioobe in 3.13 on initialization of a handful of ppts
| 56957 | XSSF | Avoid error if Workbook with empty SharedStringTable is written
|  | SL_Common | Common sl unification - copy first paragraph / textrun properties on XSLFTextShape.setText()
|  | SL_Common | Common sl unification - converted ApacheconEU08 example to common sl - added missing functionality
|  | SL_Common | Common sl unification - return null instead of default values for missing borders X/HSLFTable
|  | SL_Common | Common sl unification - use points in HSLFTable.setColumnWidth()
|  | SL_Common | Fix appending text to empty HSLFTextParagraph
| 58558 | SXSSF | SXSSFCell.setCellValue((RichTextString)null) fixed to work like XSSF and HSSF
| 58536 | SS_Common | DataFormatter and CellFormat non-localised support for localised currency formats like [$$-408]
| 58532 | SS_Common | DataFormatter cell formatting for things like [>999999]#,,"M";[>999]#,"K";#
| 58085 | HSSF | Fix removing sheet so not to break other existing sheet references
| 58480 | HSSF | Work around problem where on Windows systems a Mapped Buffer can still lock a file even if the Channel was closed properly
|  | POI_Overall | Update commons-logging to 1.2 and commons-codec to 1.10
|  | XSSF | Removed deprecated mixed case getter/setter in XSSFColor (breaks backwards compatibility)
| 55032 | SS_Common | Fix handling missing option values in financial functions PV, FV, NPER and PMT
| 50319 | HSSF | Make row groups which include row 0 work
|  | HDF | Removed deprecated HDF API (breaks backwards compatibility)
| 58466 | XSSF | Improve column manipulation in XSSF to avoid changes overwriting each other
| 58471 | SS_Common | Improve number formatting to more closely match Excel's behaviour
| 58549 | HSSF | Fix row limits for HSSFClientAnchor to allow the full range supported by Excel
| 58579 | XSSF | Add CTTableStyleInfo to poi-ooxml-schemas JAR

## Version 3.13 (2015-09-25)

### Summary

- conditional formatting support for DataBars, Icon Sets / Multi-States, and Color Scales
- various improvements in spreadsheets formula and cell reference handling
- enforcement of locale and timezone-aware handling through forbidden-apis check, locale and timezone can now be switched via LocaleUtil
- common api for slideshow (common sl) is now available be aware of several api breaks especially in HSLF text handling

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 58350 | XSSF | Make XSSF and HSSF consistent on Sheet.getMergedRegions: return empty list if there are none
| 58216 | XSLF | provide picture-shape resize that maintains the aspect ratio
| 57925 | SS_Common | Add a simple fix to avoid an NPE when Workbooks have invalid external references
| 57915 | SS_Common | Fix Dev2Hex for numbers larger than Integer.MAX_VALUE and less than Integer.MIN_VALUE
| 57890 | XSSF | Add support for different datatypes in XSSFImportFromXML
| 58207 | XSLF | Provide user access to the original image dimensions
| 55476 | XWPF | Fix adding pictures to XWPFRun instances
| 58341 | SS_Common | Handle edge-cases in D* function
| 58245 | SS_Common | Workbook support for iterating over Sheets
| 58353 | SS_Common | Return correct value in Match-Function with match-type == -1
| 58315 | XSSF | Avoid NPE for RichTextString without font-details
| 53275 | XSSF | XSSFFont: reset indexed color flag when setting a non-indexed color
| 58039 | SS_Common | Make DGet and DMin function implementations thread-safe
|  | POI_Overall | Adjust Locale/Timezone handling to pass forbidden-api-checks and provide LocaleUtil to dynamically adjust the locale and timezone that POI operates on
|  | SS_Common | Fix DAYS360 handling for US/EU method
| 58254 | SS_Common | CellFormatResult.text should check for nulls as per the javadoc
| 58260 | SXSSF | Fix checks for limit on number of styles in XSSF/SXSSF, fix more than 32k styles in SXSSF workbooks
| 58262 | SXSSF | ReadOnlySharedStringsTable now handles workbooks with an empty SST part
| 52111 | HSSF | Intersection formulae are now supported in XSSF
| 58253 | SS_Common | CellReference upper-case check for #REF!, and javadoc improvements
| 58252 | SS_Common | More CellReference unit testing coverage
| 54938 | POI_Overall | Throw InvalidFormatException as documented instead of IllegalArgumentException in WorkbookFactory.create()
| 58237 | XWPF | When adding a picture to a XWPF header or footer, attach it to the right part
| 58220 | XSSF | Improve the javadocs for XSSFFont and Font getFontHeight methods
| 56479 | OPC | Don't hardcode dcterms as namespace alias in the attribute, but expect the actual alias that is used in the corresponding element
| 56519 | XSLF | XSLFSlide.draw is not working with text embedded in PPTX
| 58205 | XSLF | getSlideMasters() returns the master slides in the incorrect order
| 57786 | XSLF | XSLFFreeformShape ignores quadratic bezier curves
| 58206 | XSLF | provide a mechanism to find slide layouts by name
| 58204 | XSLF | STYLE: ShapeContainer interface makes internal getShapesList() redundant
| 58190 | XSLF | The current picture handling uses raw integers for types and index, replace with enum and reference
| 58203 | POI_Overall | Apparently Maven uses plurals for all artifacts except javadocs, so tweak our naming to make it happy
| 58193 | XSLF | Use input stream rather than byte array for checksum etc
| 58200 | SXSSF | SXSSF support for evaluating formula cells, provided the cell and all its references are within the current window
| 58098 | POIFS | Avoid NPE in cleanup if NPOIFSFileSystem is opened on a locked File under Windows
|  | SL_Common | Merged common_sl branch to trunk
| 57571 | SXSSF | Fix creating comments for XSSF/SXSSF, regression was introduced via bug 54920
| 58175 | SXSSF | Fix creating comments for XSSF/SXSSF, regression was introduced via bug 54920
| 58156 | POIFS | Possible data corruption in hasPOIFSHeader and hasOOXMLHeader
| 57484 | POI_Overall | Allow processing of non-OOXML core namespace packages
| 58130 | SS_Common | Conditional Formatting support for DataBars, Icon Sets / Multi-States, and Color Scales

## Version 3.13-beta1 (2015-07-23)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 56791 | POIFS | The default POIFS implementation has been switched to NPOIFS. If you request a POIFSFileSystem, you will now get a NPOIFSFileSystem-based one. OPOIFSFileSystem remains for those who still want the old implementation
| 58138 | SS_Common | Conditional Formatting support for the common Color class, in addition to previous color shorts
| 58133 | POIFS | Agile encryption - wrong checksum calculation
| 58113 | SXSSF | Regression: NullPointerException when setting cell value to null
| 57893 | XSSF | Add a method for obtaining all merged regions on a worksheet. This is faster for XSSFSheet than obtaining each individually by iteration
| 58036 | XSSF | Add basic support for VBA macro-enabled workbooks (xlsm)
| 57744 | HSMF | Fix parsing the email submission data when id contains a hyphen
| 57678 | HSMF | Better handle years in mail-messages between 1980 and 1999
| 54332 | HSLF | WMF extraction failing in Tika for older PowerPoint Files
| 56865 | POI_Overall | Limit number of bytes (by counting them) while opening office docs
| 50090 | POI_Overall | zip bomb prevention
| 58069 | HSSF | Biff8RC4 xorShort returns wrong value for unsigned shorts
| 56420 | SS_Common | Fix possible NullPointerException when empty cell is included in Sumif calculation
| 58040 | POI_Overall | Log Forging
| 56328 | XSSF | Improve AreaReference to take account of the spreadsheet format version when determining whether a reference is whole-column
| 57963 | XWPF | Fix and verify in CI builds that we can compile most examples without requiring scratchpad-jar, update documentation
| 53109 | HSSF | Correctly handle unicode strings in NameCommentRecord
| 57904 | POI_Overall | Automatically verify that the resulting source-packages can be built
| 57512 | HSSF | Fix potential NPE in DateUtil for invalid dates
| 57889 | XWPF | Fix potential NPE in XWPFParagraph.getNumFmt()
| 57951 | SS_Common | Use BigDecimal in some cases in DataFormatter.formatRawCellContents, to avoid rounding problems on JDK8
| 55410 | XSSF | Use specific ID value which prevents Excel from turning comments into giant curved arrows

## Version 3.12 (2015-05-11)

### Summary

- remove limitations within XSSF - up to 64k cell styles (57880) and 65k comments (56380)
- fixed XSSF cloning issues - for sheets (57165), styles (56295), pictures (56467)
- Fix shifting comments with shifted rows (56017)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
|  | XWPF | Initial XWPFStyles support for working with default document paragraph and run styles
|  | POI_Overall | If an empty file or stream is given to WorkbookFactory.create, give a more informative exception - EmptyFileException
| 57552 | XSLF | Sort PackagePart returns from OPCPackage by name considering numbers in filenames, so Image10.png comes after Image9.png, fixing problems with XSLF adding 10+ images to a slide
| 57880 | XSSF | Handle >32,767 cell styles and formats in XSSF (file format limit is 64,000)
| 57593 | HSSF | Allow WorkbookFactory.create methods to open xlsx files protected with the default password
| 57593 | HSSF | Add overloaded WorkbookFactory.create methods which take the spreadsheet password
| 57666 | SXSSF | When removing a SXSSF sheet, ensure temp files associated with it are disposed of
| 57826 | XSSF | If a XSSF shape has a buFont but no bullet character, mirror Excel and treat as un-bulleted
| 57642 | XSSF | Fix setSheetName with ISERROR on XSSF
| 57747 | SS_Common | Add ISERR() function
| 57829 | XWPF | Avoid XmlValueDisconnectedException when removing a XWPFRun from a XWPFParagraph by removing from IRuns as well
| 57851 | POIFS | Skip null properties in PropertyTableBase, which is how PropertyFactory reports unsupported POIFS properties
| 57820 | HSLF | Avoid NPE on HSLF Tables with a top position of -1
| 56579 | XSSF | Throw exception if max string length of 32767 chars is exceeded in XSSF and SXSSF
| 55386 | SS_Common | Fix handling of bold formatting in example application 'ToHtml'
| 47304 | HDF | Use fixed encoding when extracting text in WordDocument
| 56017 | XSSF | Fix shifting comments with shifted rows
| 56295 | XSSF | Fix cloning of styles across workbooks and handling of default value of attribute applyFill
| 56380 | HSSF | Remove limitation of 1024 comments per Workbook
| 56467 | XSSF | Fix cloning of sheets with pictures
|  | XDGF | More helpful ExtractorFactory exception if given a Visio VSDX ooxml file
| 56799 | XWPF | Include CTTblGrid in the smaller poi-ooxml-schemas jar
| 57165 | XSSF | Avoid PartAlreadyExistsException when removing/cloning sheets
| 56893 | HSSF | Additional check for supported string-length to avoid creating broken XLS files later one
|  | OPC | When saving an OPCPackage with no Core Properties (eg from Jasper Reports), ensure they are always added even if not yet used
| github-18 | XWPF | Handle documents with a picture-only header
| 57622 | POI_Overall | Change from XMLEventFactory.newFactory to XMLEventFactory.newInstance, for IBM JDK Compatibility

## Version 3.12-beta1 (2015-02-28)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 57459 | SXSSF | Add method in SXSSFSheet to directly set row OutLineLevel
| 57456 | HSSF | Add workaround to read empty SSTRecord where Excel puts random number in unique-strings-count-field
| 57535 | XSSF | Add POI-specific error codes to FormulaError
|  | HWPF XWPF | Start on common interfaces for Paragraphs and Character Runs for HWPF and XWPF
|  | XWPF | Double Strikethrough support for XWPF runs, along the lines of the HWPF support
| 57482 | XSSF | Handle XSSF .xlsx files with no shared strings table in read-only mode
|  | OPC | ExtractorFactory opening of OPCPackage from File should be read-only by default, as text extracting will never change things
|  | XSSF | XSSFSheet support for getDrawingPatriarch(), alongside the existing createDrawingPatriarch() method
|  | HSSF | TIKA-1515 - Handle Excel 3 files with a 0x8001 codepage
| 53453 | HWPF | Add methods to set margins in sections of HWPF documents
| 46898 | XSSF | Return #VALUE! for circular references
| 46192 | HSSF | Add methods to query outline level for HSSF and XSSF
| 56240 | HSLF | Handle PP97_DUALSTORAGE streams
| 47261 | HSLF | SlideShow.removeSlide makes PPT corrupted
| 49541 | HSLF | Mapping of symbol characters to unicode equivalent
| 54541 | HSLF | Add support for cropped images in Slide.draw()
| 57007 | HSSF | Add initial implementations of DMIN and DGET functions
|  | HSLF | Support for Office Binary Document RC4 CryptoAPI Encryption for HSLF
| 57195 | POIFS | Support for Office Binary Document RC4 Encryption
| 57373 | XSSF | Fix get/setFirstVisibleTab() for XSSFWorkbook
| 57362 | XSSF | Properly initialize chart-axis datastructure when loading a spreadsheet which already contains one
| 56511 | XSSF | Fix NullPointerException for RichText strings with no formatting for some runs
| 56550 | POI_Overall | Avoid IBM JDK fail immediately during loading some POI classes, note: IBM JDK 1.7 or higher is needed because of XML APIs
| 56595 | POI_Overall | Switch the cache in DateUtil.isADateFormat() to ThreadLocals to not have another syncpoint here
| 56644 | XSSF | NullPointerException in XSSFCell Constructor with different MissingCellPolicy
| 56888 | XSSF | XSSFDataValidation ignores "allow blank" read from sheet, assumes true
| 57171 | XSSF | Adjust the active sheet in setSheetOrder()
| 57163 | HSSF | Adjust the active sheet in removeSheet()
| 57231 | HSSF | Add missing ArrayRecord.clone()
|  | HSSF | Expose the version information from OldExcelExtractor
| 57071 | XSSF | 3+ XSSF column label names for pivot tables
| 57063 | XSSF | XSSF custom column label names for pivot tables
| 57254 | XWPF | Correctly build internal list of styles when styles are added
| 57312 | XWPF | Add check for null value of underline w:val

## Version 3.11 (2014-12-21)

### Summary

- Basic text extractor for very old Excel formats such as Excel 4 (Biff4), and older Excel 5 and 95 formats
- XML Signature support for XSSF, XWPF and XSLF (56836)
- HSSF and XSSF support for getting existing Data Validations for a Sheet
- HSSF and XSSF formula support for the PROPER function (57010)
- XSLF support for adding slide notes (55164)
- XMLBeans performance improved when using getXXXList() methods (56854)
- Recommended Apache XMLBeans version increased to 2.6.0 (any version from 2.3.0 or later will work though)
- XSSF support for evaluating formula references to other Workbooks (56737)
- HSSF and XSSF support for evaluating formulas with multi-sheet references, for functions that support that (55906)
- HSSF and XSSF Workbooks are now Closeable, so you can call close() to explicitly free the file based resources when you're done (56537)
- NPOIFS now fully supports writing, including streaming write, and in-place updating of existing entries. NPOIFSFileSystem now surpasses the old POIFSFileSystem in all cases.
- XSSF Text Extraction support for Headers, Footers and Comments (56022 56023)
- SXSSF Shared Strings optional support (53130)
- XWPF Change Tracking support (56075)
- HWPF password hash function (56077)
- XWPF document protection with password support (56076)
- SXSSF support for a system-wide setting of where Temp files get created, via TempFile / TempFileCreationStrategy (56735)
- The minimum Java version has been increased to Java 1.6
- The minimum Apache Ant version has been increased to Apache Ant 1.8
- The interface org.apache.poi.xssf.eventusermodel.XSSFSheetXMLHandler.SheetContentsHandler has had two method signature changes: endRow() -> endRow(int) and cell(String,String) -> cell(String,String,Comment)
- All security related changes from 3.10.1 (CVE-2014-3529 and CVE-2014-3574) are included in 3.11. Thanks to Stefan Kopf, Mike Boufford, Mohamed Ramadan, and Christian Schneider for their help with these.
- Please note: You should use xmlbeans-2.6.jar (as shipped with this release) instead of the xmlbeans-2.3.jar version from old releases to work around CVE-2014-3574. If you have an alternate XML parser like Apache Xerces in classpath, be sure to use a recent version! Older versions are likely to break on setting required security features.

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 57479 | HSSF | Typo in HSSFWorkbook javadocs and quick-guide
| 57480 | HSSF | Fix some unnecessary casts, generics, Eclipse warnings, ...
|  | HSLF | Added workarounds to tests for JDK 6 LineBreakMeasurer bug
| 57250 | XSLF | XMLSlideShow.setSlideOrder() produces corrupted CTSlideIdList
| 57272 | HSLF | Deadlock on corrupted PPT file
|  | OPC | XML signatures - ignore line breaks in Office 2007 .rels files
|  | HSSF | Basic text extractor for older Excel 5 and 95 formats
|  | HSSF | Basic text extractor for very old Excel formats such as Excel 4 (Biff4)
|  | OPC | ClassCastException in validating xml signatures due to missing xml beans resources
| 57171 | XSSF | Adjust active sheet correctly when sheets are moved
| 57163 | HSSF | Adjust active sheet correctly when sheets are removed
| 57164 | XSSF | XSSFDrawing.createCellComment() does not honor dx and dy values passed in
| 55967 | XSSF | Picture method to resize with different scales in width and height
| github-13 | HSSF XSSF | Add Cell.removeHyperlink() for HSSF and XSSF

## Version 3.11-beta3 (2014-11-11)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 57003 | HSSF | Implement FIXED function
| github-7 | XWPF | Form check box extraction with XWPFWordExtractor
| github-11 | HSSF XSSF | Add Sheet.getDataValidations() for HSSF and XSSF
| github-12 | HSSF XSSF | Add Comment.getClientAnchor() for HSSF and XSSF
| 57185 | POI_Overall | Correct naming from "Serie" to "Series"
| 57176 | XSSF | Include CTDefinedNamesImpl in the smaller poi-ooxml-schemas jar
| 57162 | OPC | Could not open macro enabled xlsm file after writing using POI3.11beta2 version
| 57010 | HSSF | Add implementation of function PROPER
| 57166 | HSSF | Add missing HSSFWorkbook constructor javadocs
| 57151 | XSSF | And documentation and validation in CellRangeAddress to prevent invalid row/column combinations
| 55164 | XSLF | Support for adding slide notes
| 57143 | XSSF | Javadocs and throws clause for WorkbookUtil
| 54542 | XSLF | Add support for cropped images in XSLFPictureShape.drawContent()
|  | OPC | added ooxml-security-1.0 to the maven artifacts
| 55864 | XSSF | XSSFImportFromXML.importFromXML() does not support optional elements
| 56835 | XSSF | Unreadable content when adding multiple comments to cell
|  | SS_Common | SheetUtil.getCellWithMerges for getting a cell at a co-ordinate, or the primary one of it's merged region if it's a merged cell
| 56836 | POIFS | XML signature support
| 57080 | POIFS | IndexOutOfBoundsException in poi decryptor
|  | POI_Overall | The minimum Apache Ant version required to build has been increased to 1.8.x or later
| 56956 | POIFS | Add a NPOIFSFileSystem constructor with a FileChannel and the read-only option
| 56914 | XSSF | XSSFRowShifter.updateConditionalFormatting throws IOOBE when there are more than 1 CTConditionalFormatting
| 56913 | POI_Overall | Replace usages of o.a.p.util.ArrayUtil.copyOf* methods with replacements from j.u.Arrays
| 51483 | XSSF | XSSF locking of specific features not working
| 48195 | HSSF | Formulas: Fix incorrect evaluation of IF() with ROW()/COLUMN() as else-result
| 55280 | XSSF | Greatly improve performance of shifting rows in sheets with many merged regions
| 51222 | XSSF | XSSFColor.getARGBHex() returns wrong color for Excel 2007 xlsx file
| 56730 | XSSF | Fix exporting XML if schema contains ref-elements
| 56864 | XWPF | XWPFLatentStyles.isLatentStyle always returns true if there is at least 1 lsdException
| 56854 | XSSF | XMLBeans performance when using getXXXList() and other proxy methods

## Version 3.11-beta2 (2014-08-22)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 56812 | XSLF | For XSLF Pictures, provide a way to get the URI of externally linked pictures
| 54764 | XSSF | On supported XML parser versions (Xerces or JVM built-in, XMLBeans 2.6), enforce sensible limits on entity expansion in OOXML files, and ensure that subsequent normal files still pass fine (CVE-2014-3574)
|  | POI_Overall | Recommended Apache XMLBeans version increased to 2.6.0 (any version from 2.3.0 or later will work though)
| 56800 | XSSF | Provide a helpful exception, XLSBUnsupportedException, if XSSFWorkbook is passed a .xlsb file
| 56814 | OPC | Switch from dom4j to JAXP

## Version 3.10.1 (2014-08-18)

### Summary

- This release is a bugfix release to fix two security issues with OOXML:
- Tidy up the OPC SAX setup code with a new common Helper, preventing external entity expansion (CVE-2014-3529).
- On supported XML parser versions (Xerces or JVM built-in, XMLBeans 2.6), enforce sensible limits on entity expansion in OOXML files, and ensure that subsequent normal files still pass fine (CVE-2014-3574).
- Please note: You should use xmlbeans-2.6.jar (as shipped with this release) instead of the xmlbeans-2.3.jar version from the 3.10-FINAL release to work around CVE-2014-3574. If you have an alternate XML parser like Apache Xerces in classpath, be sure to use a recent version! Older versions are likely to break on setting required security features.
- Thanks to Stefan Kopf, Mike Boufford, Mohamed Ramadan, and Christian Schneider for reporting these issues!

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 54764 | XSSF | On supported XML parser versions (Xerces or JVM built-in, XMLBeans 2.6), enforce sensible limits on entity expansion in OOXML files, and ensure that subsequent normal files still pass fine (CVE-2014-3574)
| 56164 | OPC | Tidy up the OPC SAX setup code with a new common Helper, preventing external entity expansion (CVE-2014-3529)

## Version 3.11-beta1 (2014-08-04)

### Summary

- Security fix CVE-2014-3529: external XML entity expansion. Affects reading OOXML documents.
- Dropped support for Java 1.5. Java 6 is now the minimum version required to run POI.

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 56164 | OPC | Tidy up the OPC SAX setup code with a new common Helper, preventing external entity expansion (CVE-2014-3529)
| 55196 | XWPF | Correct XWPF createTOC handling of short style names
| 55050 | SS_Common | If the start+end row and cell are the same on an AreaPtg, avoid inverting the relative flag
| 54725 | HWPF | HWPF where no parent style CHP exists, use an empty set when processing the style to avoid a NPE
| 56502 | XSSF | When shifting XSSF rows with formula cells, if the formula can't be parsed, log + leave it unchanged rather than failing
| 56527 | XSSF | Avoid NPE from XSSFHyperLink when setting the cell it references on a new link
| 53984 | HSSF | If an unsupported BofRecord is found for a sheet, warn and skip rather than breaking
| 53984 | HSSF | Support the ColInfoRecord coming after the cells, rather than before as is normal
| 56132 | XSSF | Allow XSSF formula evaluation to also skip missing external workbook references, if requested, in line with existing HSSF support
| 56020 | XSSF | XSSF support for creating Pivot Tables
| 55906 | SS_Common | Formula Evaluator support for multi-sheet references for those functions which support them, eg SUM(Sheet1:Sheet3!A1:B2)
| 56023 | XSSF | Allow XSSF event model to find + return comments, and use this for the event based .xlsx text extractor. Required backwards-incompatible updates to XSSFSheetXMLHandler.SheetContentsHandler (breaks backwards compatibility)
| 56194 | HPSF | HPSF thumbnail format tags are Int not UInt
| 56735 | POI_Overall | Allow a system wide setting of where Temp files (eg for SXSSF) are stored, via TempFile / TempFileCreationStrategy
| 56683 | OPC OOXML | Have XMLBeans request UTF-8 for strings by default, to avoid issues on the odd platform where that isn't already the case
| 54443 | HSSF | Correct HSSFOptimiser logic for the case where the to-keep style wasn't previously in use
| 56737 | XSSF | XSSF support for evaluating formula references to other Workbooks
| 56688 | SS_Common | Fix border cases in EDATE function: handle RefEval and BlankEval and also return #VALUE, not #REF in case of error
| 56744 | XSSF | Initial support for XSSF External Links tables, which hold references to other workbooks referenced by formulas and names
| 56702 | XSSF | If a cell is of type numeric but has an empty <v/> tag, return as 0
| 56537 | SS_Common | Make Workbook be Closeable, so you can call close() to explicitly free the file based resources when you're done
| 54771 | XWPF | Read text from SDTs at the table cell level, including (sometimes) Cover Page, Table of Contents and Bibliography
| 56556 | XSSF | Change how ColumnHelper finds CTCol instances, to speed up the more common use case when most are wanted for reading
| 56572 | SS_Common | HSSFCell should follow XSSF, and allow setting a null-style to return to the default style
| 56563 | HSSF | Fix multithreading bug when reading 2 similar files
| 53691 | HSSF | Fix a copy/paste error in CFRuleRecord.clone()
| 56170 | HSSF | Fix a problem with cells in workbooks becoming disconnected
| 56514 | XSSF | Add missing null-check if simple shape does not
| 56325 | HSSF | Bug 54400 introduced a problem when removing a sheet with named ranges
| 47251 | HSSF | NoteRecord can sometimes be double-padded if there's no author set
| 54034 | XSSF | Handle date format strings in an iso8601 style format, with a T in them
| 56274 | SXSSF | Correct SXSSF writing of tables when creating from a template
| 56468 | XSSF | Writing a workbook more than once corrupts the file
| 53983 | HSMF | Outlook sometimes stores a codepage of ANSI when it means 1252, detect and alias
| 56486 | HSSF | Add XOR obfuscation/decryption support to HSSF
| 56269 | XSSF | DateFormat - Rounding of fractionals
| 56482 | XSSF | Excel 2007 and later allows for more than 3 Conditional Formatting rules per sheet, so change our hard limit to logging a compatibility warning
|  | POIFS | Add NPOIFS in-place write support, including updating the contents of existing entries
|  | POIFS | Complete NPOIFS write support
| 56447 | POIFS | NPOIFS fixes for 2+gb files loaded via File (InputStream is limited to 2gb due to ByteBuffer limits)
| 56450 | HSSF | Avoid a NPE if a comment has no associated NoteRecord (but we still don't know where it belongs)
| 56437 | POIFS | Streaming write support in NPOIFS
| 56315 | SS_Common | Fix floating point rounding problems with ROUND function
| 55594 | SXSSF | Fix SXSSF encodings on EBCDIC platforms, by setting the required encoding explicitly
| 56278 | XSSF | Support loading .xlsx files with no Styles Table
| 56195 | XSSF | Replace System.err in XSSFSheetXMLHandler with proper logging
| 56169 | XSSF | Fix NPE during XSSFExportToXml export to XML with xs:all
| 55923 | XSSF | Fix compare/sorting of nodes in exported XML via XSSFExportToXml
| 55926 | XSSF | Handle numeric formula values when exporting to XML
| 55927 | XSSF | Handle date types when exporting to XML
| 56011 | XSSF | Use default style if the cell style attribute is not present
|  | POI_Overall | End support for Java 1.5. POI now requires Java 6 or higher (breaks backwards compatibility)
|  | POI_Overall | Upgrade third party libs to latest versions: commons-logging, commons-codec, log4j (breaks backwards compatibility)
| 56260 | HSLF | Avoid warnings when a TextHeaderAtom is empty and has another straight after, or where there's a TextRulerAtom / MasterTextPropAtom / TextSpecInfoAtom before the Text Chars / Bytes
| 56075 | XWPF | Add Change Tracking support to XWPF
| 56077 | HWPF | Add password hash function to HWPF
| 56076 | XWPF | Add document protection with password support to XWPF
| 55026 | POI_Overall | Support OOXML ContentTypes which include parameters
| 55732 | HSLF | PPT can't open, fails with "Couldn't instantiate ... StyleTextProp9Atom"
| 56138 | HPSF | HPSF code page strings can be zero length
| 53130 | SXSSF | SXSSF Shared Strings option support
| 55902 | XSLF | Mixed fonts issue with Chinese characters (unable to form images from ppt)
| 56022 | XSSF | XSSF Event Text Extractor header/footer support
| 53282 | XSSF | Hyperlink with a non-breaking space throws java.lang.IllegalStateException
| 55802 | XWPF | Wrong encoding used for non-ASCII characters in text runs
|  | HWPF | Expose the StyleIndex of HWPF CharacterRuns
| 51891 | POIFS | Fix StringIndexOutOfBoundsException : Ole10Native.<init> (parsing word file)

## Version 3.10-FINAL (2014-02-08)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 51585 | XSSF | WorkbookFactory.create() hangs when creating a workbook
| 55873 | POI_Overall | Support for COUNTIFS function
| 55723 | HSSF | Inconsistent behavior in HSSFSheet.setAutoFilter() function, also make XSSF work when setAutoFilter is called multiple times
| 51158 | XSSF | Writing a workbook multiple times produces unreadable content
| 45776 | HSLF | Fix corrupt file problem using TextRun.setText
| 41246 | HSLF | AIOOBE with missing notes entries
| 48593 | HSLF | Multiple Saves Causes Slide Corruption
| 55579 | HSLF | Support embedding OLE objects into HSLF
| 55818 | POIFS | Add encryption support
| 55731 | POI_Overall | Fix StringBuilder logic in DataFormatter.cleanFormatForNumber
| 55730 | HSSF | Fix org.apache.poi.ss.usermodel.BuiltinFormats.java for 0x29-0x2c
| 55901 | HPSF | Avoid using RMI based exception from PropertySetFactory, as it's not needed nor helpful
| 55850 | XSSF | Fix NullPointerException during Xml-extraction from xlsx
| 55640 | XSSF | Avoid IndexOutOfboundsException when setting nested row grouping
| 55745 | XSSF | fix handling of tables in XSSF if there are comments as well
| 55560 | HSLF | Patch for hiding slides in HSLF
| 53176 | XSLF | Fixed auto shapes render problem in pptx files
| 55661 | XSSF | CellStyle support for get/set Shrink To Fit
| 49237 | HSSF | HSSF Row Style XfIndex is 12 not 16 bits of data
| 53475 | POIFS | OOXML encrypted document fix for cspname being optional
| 55733 | XWPF | XWPFWordExtractor needs to handle .docx files with neither headers nor footers
| 55729 | HSSF | DataFormatter should format Error cells, returning the Excel error string
| 55612 | HSSF | Performance improvement in HSSFCellStyle.getDataFormatString()
| 55611 | HSSF | Performance improvement in DateUtil.isADateFormat(int, String)
| 55578 | HSSF | Support embedding OLE1.0 packages in HSSF
| 49658 | HSSF | Support embedding EMF/WMF pictures in HSSF
| 52400 | HMEF | Fix handling some types of TNEF files
| 54400 | HSSF | Updating the index in the LinkTable whenever sheets are removed
| 49940 | XSSF | Apply patch to avoid XmlValueDisconnectedException when saving a file twice
| 55369 | SXSSF | Add support for collapsing rows in SXSSF
| 55692 | POIFS | Give a more helpful error if an Encrypted .xlsx file is passed to HSSF
| 55650 | XSSF | Avoid AIOOBE if a non-existant Xfs is requested for a style
| 55658 | SXSSF | Don't fail in SXSSF if a numeric cell is overwritten with a string
| 55341 | POI_Overall | Constants for HAIR and DOTTED border styles are swapped
|  | POI_Overall | Add Eclipse project files
| 55647 | POI_Overall | When creating a temp file, ensure the name isn't already taken
| 54722 | HSLF | Extract text from HSLF tables
| 55544 | POIFS | Support for SHA-512 hashes on OOXML protected documents, as used by Office 2013

## Version 3.10-beta2 (2013-09-19)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 53798 | XSSF | Add fix for XmlValueDisconnectException during shifting rows
| 54524 | POI_Overall | Fix handling of special case in FormulaShifter
| 50298 | HSSF | Fix corruption of Workbook when setting sheet order
| 55419 | POI_Overall | Fix SimpleFractionException when fraction goes to greater than overflow
| 54786 | XSSF | Add support for quoting in date formatting
| 52233 | XSSF | Do not make the XSSFSheet invalid during write()
| 55195 | HSSF | MultiOperandNumericFunction.collectValue() currently uses concrete final classes but should use interfaces instead
| 55380 | HSSF | Endless loop in CellRangeUtil.mergeRanges() when regions are overlapping
| 55347 45551 | XSSF | Integrate 55292 into XSSF extractors -- extract text from text boxes in xlsx files
| 55361 | XWPF | Tika 792 - Avoid CTMarkup NoSuchMethodException stack trace by adding two beans to ooxml-lite"
| 55294 52186 | XSSF | Fix column grouping in XSSF
| 55292 | XSSF | Enhancements to XSSFSimpleShape (textbox) including: ability to add multiple paragraphs, formatting (read/write) and text extraction
| 55191 | HPSF | Avoid a ClassCastException if a HPSF string property isn't directly stored as a string
|  | HSMF | HSMF ascii encoding detection should use the CodePage properties where available
|  | HSMF | HSMF fixed length property parsing should be more forgiving of some type differences from the property default
| 54233 | HPSF | Some HPSF documents require UnicodeStrings to be 4-byte aligned, spot these from the otherwise invalid length
|  | POI_Overall | Upgrade version of JUnit to 4.11 to avoid problems when executing unit tests using Apache Ant >= 1.7

## Version 3.10-beta1 (2013-06-28)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 54925 | HSLF | Avoid issues if the length of a StyleTextPropAtom prop is longer than the parent text
| 54564 | HSSF | Fix error message text for a workbook with no sheets when a sheet operation is performed
| 53972 | HSSF | Presence of PLV record shouldn't affect HSSF Data Validation
| 55142 | XWPF | Not all XWPF SDT blocks need newlines
| 54920 | XSSF | XSSFDrawing.createCellComment causes CommentsTable to lose reference to comment in cell A1
| 54982 | XSSF | ExtractorFactory does not close files when extracting via OCPPackage.open()
| 54607 | XSSF | NullPointerException in XSSFSheet.getTopRow() when the top row is 1
| 54686 | XSSF | Improve how DataFormatter handles fractions
| 55066 | XWPF | Don't load XWPF Footnotes twice
| 54849 | XWPF | Controlled content/Form (Std/StdBlock) content
| github-2 | HSSF | HSSFWorkbook.getAllEmbeddedObjects() needs to recurse into container Shapes
| github-4 | XWPF | Expose from XWPFParagraph the number level and format, if applied
| github-3 | XWPF | Extract references from XWPF footnotes
| 55053 | POI_Overall | Update License links following ECMA site re-organisation
| 49658 | HSSF | Support embedding EMF/WMF pictures in HSSF
| 55047 | POI_Overall | REPT formula support
| 55042 | POI_Overall | COMPLEX formula support
| 55041 | POI_Overall | CODE formula support
| 55001 | HSLF | Support Unicode text (TextCharsAtom) in HSLF TextShape
| 54682 | HWPF | UnhandledDataStructure should sanity check before allocating, not after
| 54673 | POI_Overall | Simple wildcard support in HLOOKUP, VOOLKUP, MATCH, COUNTIF
| 54625 | HSSF | Register user-defined functions in instance scope instead of static
| 54469 | SS_Common | Support for financial functions IPMT and PPMT
| 54407 | HSLF | Avoid XmlValueDisconnectedException when merging slides
| 54356 | POI_Overall | Support of statistical function SLOPE
| 54403 | POI_Overall | Support of statistical function INTERCEPT
| 54557 | POI_Overall | Don't mis-detect format patterns like .000 as dates
| 54506 | HSSF | Support unusual .xls files with a BOOK directory entry (normally it is Workbook)
| 54508 | POI_Overall | EDATE formula support
| 53810 | POIFS | NPOIFS fix for 0 not -1 padded partially used XBATs
| 54402 | POI_Overall | IfError handling of indirect references
| 53966 | POI_Overall | IfError support (from Analysis Toolpak)
| 53650 | SXSSF | Prevent unreadable content and disallow to overwrite rows from input template in SXSSF
| 54228 53672 | XSSF | Fixed XSSF to read cells with missing R attribute
| 54206 | HSSF | Ensure that shared formulas are updated when shifting rows in a spreadsheet
|  | HSSF | Synchronize table headers with parent sheet in XSSF
| 54210 | HSLF | Fixed rendering text in flipped shapes in PPT2PNG and PPTX2PNG

## Version 3.9 (2012-12-03)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 54188 | HSLF | Avoid NPE in PPT2PNG
| 52628 | POI_Overall | Replace System.err info messages with a POILogger
| 54137 | POI_Overall | improved performance of DataFormatter with Fractions
| 54099 | XWPF | Ensure that CTHMerge and CTTcBorders go to poi-ooxml-schemas jar
| 54111 | HSLF | Fixed extracting text from table cells in HSLF
| 52583 | HWPF | add support for drop-down lists in doc to html conversion
| 52863 | HWPF | add workaround for files with broken CHP SPRMs
| 53182 | HWPF | Reading combined character styling and direct formatting of a character run
| 52311 | HWPF | Conversion to html : Problem in titles number
| 53914 | HWPF | TableRow#getTopBorder() return bottom's border
| 53282 | XSSF | Avoid exception when parsing OPC relationships with non-breaking spaces
| 54016 | HSSF | Avoid exception when parsing workbooks with DConRefRecord in row aggregate
| 54008 | POI_Overall | Fixed Ant build to support build directories with blanks
| 53374 | POI_Overall | Avoid exceptions when parsing hyperlinks of type "javascript://"
| 53404 | HSSF | Fixed compatibility bug with modifying xls files created by POI-3.6 and earlier
| 53979 | HSLF | Support fetching properties of Numbered Lists from PPT files
| 53784 | HSMF | Partial HSMF support for fixed sized properties
| 53943 | HWPF | added method processSymbol() to allow converting word symbols
| 53763 | HSSF | avoid style mess when using HSSFOptimiser
| 52972 | SXSSF | preserve leading / trailing spaces in SXSSF
| 53965 | XSSF | Fixed XmlValueOutOfRangeException calling getDataValidations for custom validations with XSSFSheet
| 53974 | HSSF | Avoid NPE when constructing HSSFWorkbook on Google App Engine
| 53568 | XSSF | Fixed null returned by XSSFPicture.getPictureData()
| 53950 | XSSF | fixed setForceFormulaRecalculation to reset workbook-level "manual" flag
| 52211 | XSSF | avoid unnecessary re-converting content types to US-ASCII, it can cause exceptions on ibm mainframes
| 53568 | XSSF | Set shapes anchors in XSSF when reading from existing drawings
|  | HSSF | HSSFOptimiser will now also tidy away un-used cell styles, in addition to duplicate styles
| 53493 | SXSSF | Fixed memory and temporary file leak in SXSSF
| 53780 | SXSSF | Fixed memory and temporary file leak in SXSSF
| 53380 | HWPF | ArrayIndexOutOfBounds Exception parsing word 97 document.
| 53434 | POI_Overall | Subtotal is not return correct value.
| 53642 | POI_Overall | XLS formula evaluation logging
| 53561 | HSSF | Unexpected adding of drawings into a workbook
| 53413 | HSSF | [GSoC] Improved work with shapes. HSSF
| 53361 | HSSF | feature: enhancements in EscherAggregate
| 53302 | HSSF | EscherAggregate does not handle Continue records
| 53144 | HSSF | First comment not cloned after cloneSheet()
| 53028 | HSSF | Broken auto fit row height in the cells with word wrap
| 53010 | HSSF | [GSoC2012] Improve drawing support in HSSF
| 52764 | HSSF | Unmodified cell comments disappear after HSSFWorkbook.write
| 52300 | HSSF | Corrupted File after cloneSheet()
| 52272 | HSSF | Inserting images on cloned sheet with images.
| 51796 | HSSF | The [EscherClientAnchorRecord] for object (eg: TextBox,Shape) may get lost.
| 51683 | HSSF | [HSSF] Improve support for Shapes and Shape Groups
| 51676 | HSSF | Using drawingPatriarch.createCellComment(anchor) leads to File error: data may have been lost
| 51675 | HSSF | Background images cause problems in HSSF spreadsheet
| 51455 | HSSF | It would be really nice to be able to set the background picture of a comment
| 51341 | HSSF | Adding Image to Header in Excel Using HSSF
| 51280 | HSSF | when we insert a new image to the existing excel file that corrupts the previous images
| 50696 | HSSF | File Error: data may have been lost
| 48989 | HSSF | If we have a comment but the row is not created we will not be able to get it.
| 48873 | HSSF | Comments not saving in XLS files with collapsible columns
| 48654 | HSSF | Not able to read Excel (xls) file having drawing objects
| 48590 | HSSF | Excel crashes after using removeCellComment methods
| 46444 | HSSF | cloning cloned sheet with autofilters corrupts the workbook
| 45129 | HSSF | Lost picture in file output after saving with POI
| 47624 | HSSF | File Error Data May Have been Lost error while opening commented workbook(excel file)
| 46143 | HSSF | setLineStyleColor for comments do not work
| 53699 | XSSF | Patch to correct BorderStyle enum positions
| 53604 | HSSF | Ugly Duckling case study
| 53644 | HSSF | XLS formula bugfix (CalFieldFunc) + WeekDay addon
| 53446 | POI_Overall | Fixed some problems extracting PNGs
| 53205 | HDGF | Fixed some parsing errors and encoding issues in HDGF
| 53204 | HSSF | Improved performance of PageSettingsBlock in HSSF
| 53500 | POI_Overall | Getter for repeating rows and columns
| 53369 | XSSF | Fixed tests failing on JDK 1.7
| 53360 | SXSSF | Fixed SXSSF to correctly write text before escaped Unicode control character
|  | HSMF | Change HSMF Types to have full data on ID, Name and Length, rather than just being a simple ID
| 48469 | HSSF | Updated case study
| 53476 | HSSF | Support Complex Name in formulas
| 53414 | HSSF | properly update sheet dimensions when adding column
|  | OPC | Add File based constructor to OPCPackage, alongside existing String one (which constructed a File from the string internally)
| 53389 | POI_Overall | Handle formatting General and @ formats even if a locale is prefixed to them
| 53271 | SXSSF | Removed unconditional asserts in SXSSF
| 53025 | XSSF | Updated documentation and example on using Data Validations
| 53227 | XSSF | Corrected AddDimensionedImage.java to support XSSF/SXSSF
| 53058 | HSSF | Utility for representing drawings contained in a binary Excel file as a XML tree
| 53165 | HWPF | HWPF support for fetching the description (alt text) of a picture
| 48528 | XSSF | support negative arguments to the DATE() function
| 53092 | POI_Overall | allow specifying of a TimeZone to DateUtil.getJavaDate(), for when it is known that a file comes from a different (known) timezone to the current machine
| 53043 | XSSF | don't duplicate hyperlink relationships when saving XSSF file
| 53101 | XSSF | fixed evaluation of SUM over cell range > 255
| 49529 | HSSF | avoid exception when cloning sheets with no drawing records and initialized drawing patriarch

## Version 3.8-FINAL (2012-03-26)

### Summary

- NPOIFS: NIO driven API to read OLE2 filesystems with low memory footprint.
- SXSSF: a low-memory footprint API built on top of XSSF that can be used when very large spreadsheets have to be produced, and heap space is limited
- poi-excelant: Ant tasks for running POI against a workbook
- Supported evaluation of new Excel formulas: IRR,NPV,MROUND,VAR,VARP,CLEAN,CHAR,ADDRESS,HOUR,MINUTE,SECOND,RATE,WORKDAY,NETWORKDAYS,SUMIFS,RANK
- XSLF usermodel API: POI's implementation of the PowerPoint 2007 OOXML (.xlsx) file format. XSLF provides a rich usermodel API and a PPTX2PNG utility to export slides to images.
- WordToFO, WordToHtml and WordToText converters: utilities to export MS Word .doc files into XSL-FO, html and text files. Output from WordToFO can be used to convert .doc files to pdf using Apache FOP.
- Numerous improvements and refactorings in HWPF, Java API for MS Word .doc files: support for reading footnotes, endnotes and bookmarks, improved support for handling tables, paragraphs, text runs and much more...
- Initial support for charts in XSSF
- support for OOXML Agile Encryption

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 52928 | POI_Overall | DateFormatConverter: an utility to convert instances of java.text.DateFormat to Excel format patterns
| 52895 | HSSF | show SSTIndex instead of XFIndex in LabelSSTRecord.toString()
| 52835 | XSSF | Tolerate missing Count and UniqueCount attributes when parsing shared strings table in XSSF eventusermodel
| 52818 | HSSF | Added implementation for RANK()
| 52682 | HSLF | allow setting text with trailing carriage return in HSLF
| 52244 | HSLF | use correct text attributes when presentation has multiple TxMasterStyleAtoms of the same type
|  | XSSF | support setting background color of sheet tab in XSSF
| 51564 | XWPF | support for enforcing fields update in XWPF
| 51673 | SXSSF | support grouping rows in SXSSF
| 51780 | POI_Overall | support replacement of content types in OPC packages
| 52784 | SXSSF | replace ISO control characters with question marks in SXSSF to be consistent with XSSF
| 52057 | HSSF | updated formula test framework to be aware of recently added Functions
| 52574 | HSSF | support setting header / footer page margins in HSSF
| 52583 | HWPF | fixed WorkbookUtil#createSafeSheetName to escape colon
| 51710 | XSSF | fixed reading shared formulas in XSSF
| 52708 | POI_Overall | misc improvements in CellFormat
| 52690 | POIFS | added a getter for length of encrypted data in Ecma and Agile decryptors
| 52255 | XWPF | support adding TIFF,EPS and WPG pictures in OOXML documents
| 52078 | HSLF | avoid OutOfMemoryError when rendering grouped pictures in HSLF
| 52745 | XSSF | fixed XSSFRichtextString.append to preserve leading / trailing spaces
| 52716 | XSSF | tolerate hyperlinks that have neither location nor relation
| 52599 | HSLF | avoid duplicate text when rendering slides in HSLF
| 52598 | HSLF | respect slide background when rendering slides in HSLF
| 51731 | HSLF | fixed painting shape outlines in HSLF
| 52701 | XSLF | fixed setting vertical alignment for XSLFTableCell
| 52687 | XSLF | fixed merging slides with pictures with associated custom tags
|  | SS_Common | allow runtime registration of functions in FormulaEvaluator
| 52665 | POI_Overall | When reading from a ZipFileZipEntrySource that has already been closed, give IllegalArgumentException rather than NPE
| 52664 | HSMF | MAPIMessage may not always have name chunks when checking for 7 bit encodings
| 52649 | HWPF | fixed namespace issue in WordToFoConverter
| 52385 | HPSF | avoid truncated array and vector data when reading OLE properties
| 52662 | HWPF | CharacterRun NPE fix when fetching symbol fonts, where no fonts are defined
| 52658 | XSLF | support merging table cells in XSLF
|  | SXSSF | validate row number and column index in SXSSF when creating new rows / cells
| 51498 | POI_Overall | fixed evaluation of blank cells in COUNTIF
| 52576 | HSSF | support changing external file references in HSSFWorkbook
| 49896 | POI_Overall | support external references in FormulaRenderer
| 52527 | HSSF | avoid exception when matching shared formula records in HSSF
| 52568 | XWPF | Added methods to set/get an XWPFRun's text color
| 52566 | XWPF | Added methods to set/get vertical alignment and color in XWPFTableCell
| 52562 | XWPF | Added methods to get/set a table row's Can't Split and Repeat Header attributes in XWPF
| 52561 | XWPF | Added methods to set table inside borders and cell margins in XWPF
| 52569 | HSSF | Support DConRefRecord in HSSF
| 52575 | HSSF | added an option to ignore missing workbook references in formula evaluator
|  | XSSF | Validate address of hyperlinks in XSSF
| 52540 | XWPF | Relax the M4.1 constraint on reading OOXML files, as some Office produced ones do have 2 Core Properties, despite the specification explicitly forbidding this
| 52462 | HSSF | Added implementation for SUMIFS()
|  | OOXML | POIXMLPropertiesTextExtractor support for extracting custom OOXML properties as text
| 52449 | XWPF | Support writing XWPF documents with glossaries (Glossaries are not yet supported, but can now be written out again without changes)
| 52446 | POIFS | Handle files which have been truncated by a few bytes in NPropertyTable
| 52438 | POI_Overall | Update CellDateFormatter to handle times without seconds
| 52389 | XSSF | Support ?/? as well as #/# fractions, and tighten DataFormatter rules for fraction matching
| 52200 | XWPF | Updated XWPF table example code
| 52378 | HSSF | Support for WORKDAY and NETWORKDAYS functions
| 52349 | XSSF | Merge the logic between the TEXT function and DataFormatter
| 52349 | XSSF | Correctly support excel style date format strings in the TEXT function
| 52369 | XSSF | XSSFExcelExtractor should format numeric cells based on the format strings applied to them
| 52369 | XSSF | Event based XSSF parsing should handle formatting of formula values in XSSFSheetXMLHandler
| 52348 | XSSF | Avoid exception when creating cell style in a workbook that has an empty xf table
| 52219 | XSSF | fixed XSSFSimpleShape to set rich text attributes from XSSFRichtextString
| 52314 | POI_Overall | enhanced SheetUtil.getColumnWidth

## Version 3.8-beta5 (2011-12-17)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 52204 | XSSF | Deprecated XSSFWorkbook(String path) constructor because it does not close underlying .zip file
| 46288 | HSLF | fixed refcount of Fill pictures in HSLF
| 51961 | SXSSF | support compression of temp files in SXSSF
| 52268 | XSSF | support cloning sheets with drawings in XSSF
| 52285 | XWPF | Support XWPF smart tags text in Paragraphs
| 51875 | XSSF | More XSSF new-line in formula support
|  | POIFS | POIFS EntryUtils.copyNodes(POFS,POIFS) now uses FilteringDirectoryNode, so can exclude from copying nodes not just directly under the root
|  | POIFS | POIFS Helper FilteringDirectoryNode, which wraps a DirectoryEntry and allows certain parts to be ignored
| 52209 | XSLF | fixed inserting multiple pictures in XSLF
| 51803 | HSLF | fixed HSLF TextExtractor to extract content from master slide
| 52190 | XWPF | null check on XWPF setFontFamily
| 52062 | SXSSF | ensure that temporary files in SXSSF are deleted
| 50936 | HWPF | Exception parsing MS Word 8.0 file (as duplicate of 47958)
| 47958 | HWPF | ArrayIndexOutOfBoundsException from PicturesTable.getAllPictures() during Escher tree walk
| 51944 | HWPF | PAPFormattedDiskPage.getPAPX - IndexOutOfBounds
| 52032 | HWPF | HWPF - ArrayIndexOutOfBoundsException with no stack trace (broken after revision 1178063)
|  | XSLF | support for converting pptx files into images with a PPTX2PNG tool
| 52050 | HSSF | Support for the Excel RATE function
| 51566 | HSLF | HSLF fix for finishing parsing the picture stream on the first non-valid type
| 51974 | HWPF | Avoid HWPF issue when identifying the picture type
| 52035 | HWPF | Fix signed issue with very large word 6 files
| 51949 | POI_Overall | Avoid NPE on double close of ZipFileZipEntrySource
| 51950 | XWPF | XWPF fix for footnotes not always being present in a document
| 51963 | POI_Overall | Correct AreaReference handling of references containing a sheet name which includes a comma
| 51955 | XSSF | XSSFReader supplied StylesTables need to have the theme data available
| 51716 | SXSSF | Removed incorrect assert in SXSSFSheet#getSXSSFSheet
| 51834 | HWPF | Opening and Writing .doc file results in corrupt document
| 51902 | HWPF | Picture.fillRawImageContent - ArrayIndexOutOfBoundsException (duplicate)
| 51890 | HWPF | ArrayIndexOutOfBounds ExceptionPicture.fillRawImageContent
|  | SS_Common | Allow the passing of a File object to WorkbookFactory.create, which permits lower memory processing than the InputStream version
| 51873 | HSMF | update HSMF to ignore Outlook 2002 Olk10SideProp entries, which don't behave like normal chunks
| 51850 | XSSF | support creating comments in XSSF on an earlier slide when later ones already have them
| 51804 | XSLF | optionally include Master Slide text in XSLF text extraction, as HSLF already offers
|  | OPC | New PackagePart method getRelatedPart(PackageRelationship) to simplify navigation of relations between OPC Parts
| 51832 | HSSF | handle XLS files where the WRITEPROTECT record precedes the FILEPASS one, rather than following as normal
| 51809 | HSSF | correct GTE handling in COUNTIF
|  | HWPF | Add HWPF API to update range text and delete bookmarks
|  | HWPF | HWPF Bookmarks tables are correctly updated on text updates
| 51670 | POI_Overall | avoid LeftoverDataException when reading .xls files with invalid LabelRecords
| 51196 | XSSF | prevent NPE in XWPFPicture.getPictureData()
| 51771 | HSLF | prevent NPE when getting object data from OLEShape in HSLF
| 51196 | XSSF | more progress with Chart APi in XSSF
| 51785 | XSSF | Allow XSSF setForceFormulaRecalculation to work with the minimal ooxml-schemas jar
| 51772 | HWPF | IllegalArgumentException Parsing MS Word 97 - 2003
|  | XSLF | XSLFPowerPointExtractor support for including comment authors with comment text
|  | XSLF | Converted XSLFPowerPointExtractor to use UserModel for all text extraction
|  | XSLF | XSLF initial UserModel support for Notes and Comments for Slides
|  | HSLF | support for uncompressed OLE embeddings

## Version 3.8-beta4 (2011-08-26)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 51678 | HWPF | Extracting text from Bug51524.zip is slow
| 51671 | HWPF | HWPFDocument.write based on NPOIFSFileSystem throws a NullPointerException
|  | XSLF | support for tables and hyperlinks in XSLF
| 51535 | HSSF | correct signed vs unsigned short reading in NDocumentInputStream
| 51634 | SXSSF | support SXSSF streaming from templates
|  | XSLF | initial support for XSLF usermodel API
| 51187 | XSLF | fixed OPCPackage to correctly handle self references
| 51635 | XSSF | Improved performance of XSSFSheet#write
| 47731 | HWPF | Word Extractor considers text copied from some website as an embedded object
|  | HWPF | Add Word-to-Text converter and use it as replacement for WordExtractor
| 51604 | HWPF | replace text fails for doc ( poi 3.8 beta release from download site )
|  | SXSSF | Fixed incorrect encoding of non-breaking space (0xA0) in SXSSF
|  | XSSF | Support for conditional formatting in XSSF
|  | HSSF | Support isRightToLeft and setRightToLeft on the common spreadsheet Sheet interface, as per existing HSSF support
| 50209 | HSSF | Fixed evaluation of Subtotals to ignore nested subtotals
| 44431 | HWPF | HWPFDocument.write destroys fields
| 50401 | HSLF | fixed EscherProperty to return property name instead of 'unknown' for complex properties
|  | HWPF | Initial support for endnotes and footnotes in HWPF
| 51470 | XSSF | avoid exception when cloning XSSF sheets with background images
| 51481 | HSSF | Fixed autofilters in HSSF to avoid warnings in Excel 2007
| 51533 | XSSF | Avoid exception when changing name of a sheet containing shared formulas
|  | HSSF | Support for appending images to existing drawings in HSSF
|  | HWPF | Initial support for bookmarks in HWPF
| 46250 | HSSF | Fixed cloning worksheets with images
| 51524 | HWPF | PapBinTable constructor is slow (regression)
| 51514 | HSSF | allow HSSFObjectData to work with both POIFS and NPOIFS
| 51514 | HSSF | avoid NPE when copying nodes from one HSSF workbook to a new one, when opened from NPOIFS
| 51504 | HSSF | avoid NPE when DefaultRowHeight or DefaultColumnWidth records are missing
| 51502 | POI_Overall | Correct Subtotal function javadoc entry
|  | SXSSF | Support for hyperlinks in SXSSF
| 49933 | HWPF | Word 6/95 documents with sections cause ArrayIndexOutOfBoundsException
| 51469 | XSSF | XSSF support for row styles, to match existing HSSF functionality
| 51476 | XSSF | Correct XSSF cell formatting in HTML export
| 51486 | XWPF | XWPF support for adding new footnotes
| 48065 | HWPF | Problems with save output of HWPF (losing formatting)
| 47563 | HWPF | Exception when working with table
| 47287 | HWPF | StringIndexOutOfBoundsException in CharacterRun.replaceText()
| 46817 | HWPF | Regression: Text from some table cells missing
|  | HWPF | Add getOverallRange() method to HWPFDocumentCore
|  | HWPF | PAPX referenced outside of TextPiecesTable are ignored now and not loaded
|  | HWPF | Fix main part range (and section) detection for files with additional parts (like footers/headers)
|  | HWPF | Fix wrong TextPiece parsing in very rare cases like Bug33519.doc
|  | HWPF | Inner tables are correctly supported
|  | HWPF | Allow user to retrieve Table nesting level (based on file information)
|  | HWPF | Functionality of internal tool HWPFLister is greatly improved, including output of document PAPX and paragraphs
|  | HWPF | Expand Word structures definitions (TAP, PAP, TLP, etc) based on official documentation
|  | HWPF | Add Excel-to-HTML converter (2007 versions)
|  | HWPF | Add Word-to-HTML converter (95-2007 versions)
|  | HWPF | Skip wrong-type SPRMs when characters SPRM is expected
|  | HWPF | Add toStrings() methods to internal HWPF structures: BorderCode, PAPX, Paragraph, PieceDescriptor, Section, SEPX, SprmOperation, TextPiece etc
| 51474 | SXSSF | SXSSF handling for null strings
| 48294 | HSSF | Fixed HSSFWorkbook.setSheetOrder() to respect inter-sheet references
| 51448 | POI_Overall | Avoid exception when evaluating workbooks with more than 256 sheets
| 51458 | POI_Overall | Correct BitField wrapping when setting large values
| 51460 | HSSF | Improve HSSF performance when loading very long rows, by switching the CellValue array to an iterator
| 51444 | XSSF | Prevent corrupted output when saving files created by LibreOffice 3.3
| 51422 | HSSF | Support using RecalcIdRecord to trigger a full formula recalculation on load
| 50474 | XWPF | Example demonstrating how to update Excel workbook embedded in a WordprocessingML document
| 51431 | XSSF | Avoid IndexOutOfBoundException when removing freeze panes in XSSF
| 48877 | XSSF | Fixed XSSFRichTextString to respect leading and trailing line breaks
| 49564 | XSSF | Fixed default behaviour of XSSFCellStyle.getLocked()
| 48314 | XSSF | Fixed setting column and row breaks in XSSF
| 51424 | HWPF | Ignore exceptions in ParagraphSprmUncompressor
| 51415 | XSSF | Fixed Workbook.createSheet(sheetName) to truncate names longer than 31 characters
| 51332 | HSSF | Fixed internal IDs of shapes generated by HSSFPatriarch when there are more than 1023 drawing objects
| 48408 | HSSF | Improved documentation for Sheet.setColumnWidth
| 51390 | HWPF | Added handling of additional properties to HWPF ParagraphSprmCompressor
| 51389 | HWPF | Support for sprmPJc paragraph SPRM in HWPF
| 48469 | HSSF | New Case Study for POI web site
| 50681 | XSSF | Avoid exceptions in HSSFDataFormat.getDataFormatString()
| 50681 | XSSF | Fixed autosizing columns beyond 255 character limit
| 51374 | XSSF | Fixed incorrect setting of lastPrinted OOXML core property
| 51351 | HWPF | Word to XSL-FO converter
| 50458 | XSSF | Fixed missing shapeId in XSSF drawings
| 51339 | XSSF | Fixed arithmetic rounding in formula evaluation
| 51356 | SXSSF | Support autoSizeColumn in SXSSF
| 51335 | HWPF | Parse picture goal and crop sizes in HWPF
| 51305 | HWPF | Add sprmTCellPaddingDefault support in HWPF
| 51265 | XWPF | Enhanced Handling of Picture Parts in XWPF
| 51292 | HDF | Additional HWPF Table Cell Descriptor values

## Version 3.8-beta3 (2011-06-06)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 51098 | XSSF | Correctly calculate image width/height, if image fits into one cell
| 47147 | XWPF | Correct extra paragraphs from XWPF Table Cells
| 51188 | XWPF | Support for getting and setting XWPF zoom settings
| 51134 | XWPF | Support for adding Numbering and Styles to a XWPF document that doesn't already have them
| 51273 | HSSF | Formula Value Cache fix for repeated evaluations
| 51171 | HSSF | Improved performance of SharedValueManager
| 51236 | XSSF | XSSF set colour support for black/white to match getter
| 51196 | XSSF | Initial support for Spreadsheet Chart API
|  | OPC | Add support for OOXML Agile Encryption
| 51160 | XSSF | Initial version of SXSSF, a low memory footprint API to produce xlsx files
| 51171 | HSSF | Improved performance of opening large .xls files
| 51172 | XWPF | Add XWPF support for GIF pictures
|  | POIFS | NPOIFS Mini Streams now support extending the underlying big block stream to fit more data
| 51148 | XWPF | XWPFDocument now properly tracks paragraphs and tables when adding/removing them
| 51153 | HSSF | Correct sizing of LbsDataSubRecord with unused padding fields
| 51143 | HSSF | NameCommentRecord correction for writing non ASCII strings
| 51112 | XWPF | Correct XWPFTable tracking of new rows
| 51113 | XWPF | Correct XWPFParagraph tracking of inserted runs
| 51111 | XWPF | Correct XWPFParagraph tracking of new runs
| 51115 | POI_Overall | Handle DataFormatter escaping of "." in the same way as "-" and "/"
| 51100 | POIFS | Fix IOUtils issue for NPOIFS reading from an InputStream where every block is full
| 50956 | XSSF | Correct XSSF cell style cloning between workbooks
|  | XSSF | Add get/setForceFormulaRecalculation for XSSF, and promote the methods to the common usermodel Sheet
|  | HSSF | Tweak the logic for sizing the HSSFCells array on a HSSFRow to reduce memory over allocation in many use cases
| 49765 | XWPF | Support for adding a picture to a XSSFRun
|  | XSSF | Rename/Move xssf.model.Table to xssf.usermodel.XSSFTable as it now has usermodel-like features
| 51061 | XSSF | Correct target URI for new XSSF Tables
|  | XSSF | Initial support for XSSF Charts. Provides easy access to the underlying CTChart object via the Sheet Drawing, but no high level interface onto the chart contents as yet
| 50884 | XSSF | XSSF and HSSF freeze panes now behave the same
|  | XSSF | Support for adding a table to a XSSFSheet
|  | HSMF | Improve HSMF MAPIMessage access to the HTML and RTF versions of the message body (where available)
|  | HSMF | Add new method to HSMF of MAPIMessage.has7BitEncodingStrings() to make it easier to decide when encoding guessing is needed
|  | HSMF | OutlookTextExtractor now requests 7 bit encoding guessing
|  | HSMF | Improve HSMF encoding guessing for 7 bit fields in MAPIMessage
|  | HSMF | Allow HSMF access to the HTML body contents in MAPIMessage

## Version 3.8-beta2 (2011-04-08)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
|  | OPC | Implement the load method on MemoryPackagePart
| 50967 | HSSF | Support for continued ExtSSTRecords
| 48968 | HSSF | Support for HOUR, MINUTE and SECOND date formulas
|  | POIFS | Added NPOIFS constructors to most POIDocument classes and their extractors, and more widely deprecated the Document(DirectoryNode, POIFSFileSystem) constructor in favour of the more general Document(DirectoryNode) one
|  | POIFS | Fixed NPOIFS handling of new and empty Document Nodes
|  | POIFS | Fixed NPOIFS access to Document Nodes not in the top level directory
| 50841 | POI_Overall | Improved SpreadSheet DataFormatter to handle scientific notation, invalid dates and format spacers
| 49381 | HSSF | Correct createFreezePane in XSSF, so that the left row/column matches the documentation + HSSF
| 49253 | XSSF | When setting repeating rows and columns for XSSF, don't break the print settings if they were already there
| 49219 | HSSF | ExternalNameRecord support for DDE Link entries without an operation
| 50846 | XSSF | More XSSFColor theme improvements, this time for Cell Borders
| 50939 | HSSF | ChartEndObjectRecord is supposed to have 6 bytes at the end, but handle it not
|  | HMEF | HMEF - New component which supports TNEF (Transport Neutral Encoding Format), aka winmail.dat
| 50313 | HWPF | support for getting HWPFDocument fields
| 50912 | HSSF | fixed setting named styles to HSSFCells
| 50779 | HSSF | fixed RecordFormatException when reading unicode strings with photenic data
| 50718 | POI_Overall | More helpful error message when you try to create a CellReference with #REF!
| 50784 | XSSF | XSSFColors return by XSSFFont now have theme information applied to them
| 50846 | XSSF | Improve how XSSFColor inherits from Themes
| 50847 | XSSF | XSSFFont now accepts the full range of Charsets from FontChartset
| 50786 | XSSF | Speed up calls to HSSFColor.getIndexHash() by returning a cached, unmodifiable Map. HSSFColor.getModifiableIndexHash() provides access to the old (slow but modifiable) functionality
| 47100 | XSSF | Change related formulas and named ranges when XSSFWorkbook.setSheetName is called

## Version 3.8-beta1 (2011-03-07)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 50610 | HSSF | Ant tasks for running POI against a workbook
| 32903 | POIFS | Correct XBAT chaining explanation in /poifs/fileformat.html
| 50829 | XSSF | Support for getting the tables associated with a XSSFSheet
| 50299 | XSSF | More XSSFColor updates for ARGB vs RGB
| 50581 | OOXML | Use stax:stax-api instead of org.apache.geronimo.specs:geronimo-stax-api_1.0_spec
| 50786 | XSSF | Fix XSSFColor to fetch the RGB values of old-style indexed colours
| 50299 | XSSF | Fix XSSFColor fetching of white and black background themes
| 50795 | XSSF | Avoid NPE from xmlbeans when moving XSSF Comments from one cell to another
| 46664 | HSSF | When creating HSSF Print Areas, ensure the named range is reference based not value based
| 50756 | POI_Overall | When formatting numbers based on their Cell Style, treat GENERAL the same as the more typical General
|  | HSSF | fixed HSSFWorkbook.createCellStyle to throw exception if the maximum number of cell styles was exceeded
| 50539 | XSSF | Better fix for html-style br tags (invalid XML) inside XSSF documents
| 49928 | POI_Overall | allow overridden built-in formats in HSSFCellStyle
| 50607 | POI_Overall | Added implementation for CLEAN(), CHAR() and ADDRESS()
| 50587 | HSSF | Improved documentation on user-defined functions
|  | OOXML | Inside ExtractorFactory, support finding embedded OOXML documents and providing extractors for them
|  | HDGF | Partial HDGF LZW compression support
| 50244 | HSSF | Support for continued NameRecords
| 50416 | HSSF | Correct shifting of the first or last row in a sheet by multiple rows
| 50440 | XSSF | Support evaluating formulas with newlines in them, which XSSF may have (but HSSF may not)
|  | XSSF | Added inline string support to XSSF EventModel
| 50246 | HSSF | Properly position GutsRecord when reading HSSF workbooks
| 48539 | XSSF | Added implementation for MROUND(), VAR() and VARP()
| 50446 | POI_Overall | Code cleanup and optimizations to keep some IDE quiet
| 50437 | POI_Overall | Support passing ranges to NPV()
| 50409 | XSSF | Added implementation for IRR()
| 47405 | HSSF | Improved performance of RowRecordsAggregate.getStartRowNumberForBlock / getEndRowNumberForBlock
| 50315 | XSSF | Avoid crashing Excel when sorting XSSFSheet autofilter
| 50076 | XSSF | Allow access from XSSFReader to sheet comments and headers/footers
| 50076 | XSSF | Refactor XSSFEventBasedExcelExtractor to make it easier for you to have control over outputting the cell contents
| 50258 | XSSF | avoid corruption of XSSFWorkbook after applying XSSFRichTextRun#applyFont
| 50154 | POIFS | Allow white spaces and unicode in OPC relationship targets
| 50113 | XSSF | Remove cell from Calculation Chain after setting cell type to blank
| 49966 | XSSF | Ensure that XSSFRow#removeCell clears calculation chain entries
| 50096 | XSSF | Fixed evaluation of cell references with column index greater than 255
| 49761 | HSSF | Tolerate Double.NaN when reading .xls files
| 50211 | HSSF | Use cached formula result when auto-sizing formula cells
| 50118 | POIFS | OLE2 does allow a directory with an empty name, so support this in POIFS
| 50119 | XSSF | avoid NPE when XSSFReader comes across chart sheets

## Version 3.7 (2010-10-29)

### Summary

- OOXML
- support for reading aes-encrypted/write-protected ooxml files
- support Java 1.5 in auto-generated xmlbeans for ooxml schemas
- Spreadsheet (Excel)
- initial support for autofilters
- support for data validation for ooxml format
- initial support for themes for ooxml format
- added implementation for new functions: RANDBETWEEN, POISSON, SUBTOTAL, TEXT, TRUNC
- support evaluation of indirect defined names in INDIRECT
- numerous fixes and performance optimizations in the Formula Evaluation module
- ability to add, modify and remove series from HSSF Charts
- numerous improvements in the cell data formatter (handling more formatting rules, better color detection, allow overriding of default locale)
- more examples including a rich "spreadsheet to HTML" converter
- Document (Word)
- initial support for the HWPF revision marks authors list
- support for border codes in HWPF
- support for processing of symbols in HWPF
- support sections in Word 6 and Word 95 files
- improved reading of auto-saved ("complex") documents in HWPF
- improved support for manipulation of tables and paragraphs in XWPF
- SlideShow (PowerPoint)
- allow editing workbooks embedded into HSLF slide shows
- Text Extraction
- support for text extraction from XSLF tables
- add PublisherTextExtractor support to extractorfactory
- support attachments as embedded documents within the new OutlookTextExtactor
- new event based XSSF text extractor (XSSFEventBasedExcelExtractor)
- make it easier to tell which content types each POIXMLTextExtractor handles
- paragraph level as well as whole-file text extraction for word 6/95 files
- ...and much much more: code cleanup, many bug fixes and performance improvements

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 50075 | HWPF | avoid NPE in ListLevel.getNumberText() when numberText is null
| 50067 | POI_Overall | marked commons-logging and log4j as optional dependencies in POI poms
| 49928 | POI_Overall | allow overridden built-in formats in XSSFCellStyle
| 49919 | HWPF | support for BorderCode in HWPF
| 49908 | HWPF | support for processing of symbols in HWPF
| 50022 | HSSF | support for retrieving pictures from HSSF workbooks
| 50020 | HSSF | Avoid IllegalStateException when creating Data validation in sheet with macro
| 50033 | XSSF | Improved rounding in MOD
|  | POI_Overall | Generate SHA1 hashes of distribution files, alongside existing MD5 ones

## Version 3.7-beta3 (2010-09-24)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 48325 | HSSF | If a HSSF header or footer lacks left/right/centre information, assume it is a centre one
| 49966 | XSSF | Correctly remove calcChain entries for XSSF cells that stop holding formulas
| 47582 | XSSF | XSSFCellStyle support for creating a style in one workbook based on a style from a different one
| 49931 | HSSF | Avoid concurrency problems when re-ordering multiple HSSF header records for a PageSettingsBlock
| 49765 | XWPF | Fix XWPFDocument.addPicture so that it correctly sets up relationships
| 48018 | HWPF | Improve HWPF handling of lists in documents read and then saved, by preserving order better
| 49820 | HWPF | Fix HWPF paragraph levels, so that outline levels can be properly fetched
| 47271 | HWPF | Avoid infinite loops on broken HWPF documents with a corrupt CHP style with a parent of itself
| 49936 | HWPF | Handle HWPF documents with problematic HeaderStories better
| 49933 | HWPF | Support sections in Word 6 and Word 95 files (HWPFOldDocument)
| 49941 | HSSF | Correctly handle space preservation of XSSFRichTextRuns when applying fonts to parts of the string
|  | XWPF | Correct XWPFRun detection of bold/italic in a paragraph with multiple runs of different styles
|  | XWPF | Link XWPFPicture to XWPFRun, so that embedded pictures can be access from where they live in the text stream
|  | XWPF | Improve handling of Hyperlinks inside XWPFParagraph objects through XWPFHyperlinkRun
|  | XWPF | Make XWPFParagraph make more use of XWPFRun, and less on internal StringBuffers
|  | XWPF | Add a getBodyElements() method to XWPF IBody, to make access to embedded paragraphs and tables easier
|  | XSLF | More XSLFRelation entries for common .pptx file parts
| 49872 | XSSF | avoid exception in XSSFFormulaEvaluator.evaluateInCell when evaluating shared formulas
| 49895 | XSSF | avoid corruption of XSSFWorkbook after removing all merged cells from sheet
| 49907 | HSSF | fixed inconsistent behaviour between HSSF and XSSF when creating consecutive names
|  | HWPF | Add getMimeType() method to HWPF Picture, alongside existing file extension
|  | POIFS | Add code for reading Ole10Native data
|  | HSSF XSSF | Add getMimeType() method to HSSF/XSSF PictureData, alongside existing file extension
| 49887 | HSSF | allow sheet names longer than 31 chars in XSSF, enforce name uniqueness on the first 31 chars
| 49878 | XSSF | improved API for hiding sheets
| 49875 | XSSF | fixed XSSFWorkbook.createSheet to throw exception if sheet name begins or ends with a single quote (')
| 49873 | XSSF | fixed XSSFFormulaEvaluator to support blank cells
| 49850 | HWPF | added a getter for _iStartAt in ListFormatOverrideLevel
| 49761 | HSSF | change cell type to error when setting Double.NaN or Infinities
| 49833 | XWPF | ensure that CTNumPr is included in poi-ooxml-schemas.jar
| 49841 | HSSF | fixed LEFT and RIGHT to return #VALUE! when called with a negative operand
| 49783 | POI_Overall | fixed evaluation of XSSF workbooks containing formulas with reference errors (#REF!)
| 49751 | HSSF | fixed fetching names of user defined styles in HSSFCellStyle.getUserStyleName()
| 48900 | XSSF | support for protecting a XSSF workbook
| 49725 | POI_Overall | fixed FormulaParser to correctly process defined names with underscore
| 48526 | XSSF | added implementation for RANDBETWEEN()
| 49725 | POI_Overall | avoid exception in OperandResolver.parseDouble when input is minus ("-")
| 49723 | HSSF | fixed OperandResolver to correctly handle inputs with leading decimal place
|  | HSSF | initial support for Excel autofilter

## Version 3.7-beta2 (2010-08-09)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 47990 | HSMF | Support for .msg attachments within a MAPIMessage .msg
|  | OPC | Improve handling and warnings when closing OPCPackage objects
| 49702 | XSSF | Correct XSSFWorkbook.getNumCellStyles to check the right styles list
| 49690 | HSSF | Add WorkbookUtil, which provides a way of generating valid sheet names
| 49694 | HSSF | Use DataFormatter when autosizing columns, to better match the real display width of formatted cells
| 49441 | HSMF | Allow overriding and guessing of HSMF non-unicode string encodings
| 49689 | HSSF | Allow the setting of user style names on newly created HSSF cell styles
|  | OOXML | Make it easier to tell which content types each POIXMLTextExtractor handles
| 49649 | HSSF | Added clone support for UserSView* and Feat* families of records
| 49653 | XSSF | Support for escaped unicode characters in Shared String Table
| 49579 | HSLF | prevent ArrayIndexOutOfBoundException in UnknownEscherRecord
| 49593 | XWPF | preserve leading and trailing white spaces in XWPFRun
| 49455 | XWPF | Insert the content of fldSimple fields into the XWPFWordTextExtractor output
| 49640 | POI_Overall | Fixed parsing formulas containing defined names beginning with an underscore
| 49538 | HSSF | Added implementation for POISSON()
| 49524 | HSSF | Support for setting cell text to be vertically rotated, via style.setRotation(0xff)
| 49609 | XSSF | Case insensitive matching of OOXML part names
| 49581 | HSSF | Ability to add, modify and remove series from HSSF Charts
| 49185 | HSSF | Support for HSSFNames where the comment is stored in a NameCommentRecord
| 49599 | HSSF | correct writing of noterecord author text when switching between ascii and unicode
|  | HWPF | improve reading of auto-saved ("complex") documents
|  | HWPF | paragraph level as well as whole-file text extraction for word 6/95 files through hwpf
|  | HWPF | text extraction support for older word 6 and word 95 files via hwpf
| 49508 | XWPF | allow the addition of paragraphs to xwpf table cells
| 49446 | XWPF | don't consider 17.16.23 field codes as properly part of the paragraph's text
|  | XSLF | xslfslideshow shouldn't break on .thmx (theme) files. support for them is still very limited though

## Version 3.7-beta1 (2010-06-20)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 49432 | XSSF | lazy caching of xssfcomment ctcomment objects by reference, to make repeated comment searching faster
|  | HSMF | better handling of outlook messages in hsmf when there's no recipient email address
|  | HSSF | when formatting numbers with dataformatter, handle brackets following colours
| 48574 | XWPF | further xwpf support for tables, paragraphs, including enhanced support for adding new ones
| 48245 | HWPF | tweak hwpf table cell detection to work across more files
| 48996 | POI_Overall | initial support for external name references in hssf formula evaluation
| 46664 | HSSF | fix up tab ids when adding new sheets, so that print areas don't end up invalid
| 45269 | HWPF | improve replacetext on hwpf ranges
| 47815 | HSSF | correct documentation on what happens when you request a string from a non-string formula cell
| 49386 | HSLF | avoid npe when extracting ooxml file properties which are dates
| 49377 | POI_Overall | only call decimalformat.setroundingmode on java 1.6 - it's needed to match excel's rendering of numbers
| 49378 | POI_Overall | correct 1.6ism
|  | HSMF | parse the hsmf headers chunk if present, and use it to find dates in text extraction if needed
| 48494 | HSSF | detect and support time formats like hh:mm;hh:mm
| 48494 | HSSF | have excelextractor make use of hssfdataformatter, so that numbers and dates come out closer to how excel would render them
| 48494 | HSSF | have eventbasedexcelextractor make use of hssfdataformatter, so that numbers and dates come out closer to how excel would render them
| 49096 | HSSF | add clone support to chart begin and end records, to allow cloning of more chart containing sheets
|  | HSMF | list attachment names in the output of outlooktextextractor (to get attachment contents, use extractorfactory as normal)
| 48872 | POI_Overall | allow dateformatter.formatrawcellcontents to handle 1904 as well as 1900 dates
| 48872 | POI_Overall | handle mmmmm and elapsed time formatting rules in dataformatter
| 48872 | POI_Overall | handle zero formatting rules, and better color detection in dataformatter
| 48872 | POI_Overall | support for more kinds of formatting in dataformatter
| 43161 | HSLF | fixed construction of the dib picture header
| 49311 | POIFS | initial support for reading aes-encrypted/write-protected ooxml files
| 48718 | XSSF | make the creation of multiple, un-modified fonts in a row in xssf match the old hssf behaviour
| 44916 | HSSF | allow access to the hssfpatriarch from hssfsheet once created
| 48779 | XSSF | allow you to get straight from a cellstyle to a color, irrespective of if the color is indexed or inline-defined
| 48924 | HWPF | allow access of the hwpf dateandtime underlying date values
| 48926 | HWPF | initial support for the hwpf revision marks authors list
| 49160 | POI_Overall | ensure that ctdigsigblob is included in poi-ooxml jar
| 49189 | XWPF | detect w:tab and w:cr entries in xwpf paragraphs, even when the xsd is silly and maps them to ctempty
| 49273 | XSSF | correct handling for font character sets with indicies greater than 127
| 49334 | HSSF | track the valuerangerecords of charts in hssfchart, to allow the basic axis operations
| 49242 | HSSF | track the linkdatarecords of charts in hssfchart
|  | XSSF | improved performance of xssfworkbook.write
| 48846 | HSSF | avoid npe when finding cell comments
| 49325 | XSSF | ensure that ctphoneticpr is included in poi-ooxml jar
| 49191 | XSSF | fixed tests failing in non-english locales
| 48432 | XSSF | support for xssf themes
| 49244 | XSSF | support for data validation for ooxml format
| 49066 | HSSF | worksheet/cell formatting, with view and html converter
| 49020 | XSSF | workaround excel outputting invalid xml in button definitions by not closing br tags
| 49050 | HSSF | improve performance of abstractescherholderrecord when there are lots of continue records
| 49194 | XSSF | correct text size limit for ooxml .xlsx files
| 49254 | XSSF | fix cellutils.setfont to use the correct type internally
| 49139 | POIFS | properly support 4k big block size in poifs
| 48936 | XSSF | avoid writing malformed cdata blocks in sharedstrings.xml
| 49026 | POI_Overall | added implementation for text()
| 49025 | POI_Overall | added implementation for trunc()
| 49147 | POI_Overall | properly close internal inputstream in extractorfactory#createextractor(file)
| 49138 | POI_Overall | fixed locale-sensitive formatters in packagepropertiespart
| 49153 | POI_Overall | ensure that ctvectorvariant is included in poi-ooxml-schemas.jar
| 49146 | XWPF | added accessors to coreproperties.keywords
| 48916 | HSLF | propagate parent to parent-aware records decoded from escher
| 48485 | HSSF | add extra paper size constans to printsetup, such as a3, b4 and b5
|  | POIFS | make poifs.filesystem.directorynode preserve the original ordering of its files, which hsmf needs to be able to correctly match up chunks
|  | HSSF | support evaluation of indirect defined names in indirect
| 43670 | POI_Overall | improve hdgf chunkv11 separator detection, and short string detection, to solve the "negative length of chunkheader" problem
| 48617 | HSSF | optionally allow the overriding of the locale used by dataformatter to control how the default number and date formats should look
|  | XSSF | new event based xssf text extractor (xssfeventbasedexcelextractor)
|  | HSSF | extractorfactory can now be told to prefer event based extractors (current excel only) on a per-thread or overall basis
| 48544 | XSSF | avoid failures in xlsx2csv when shared string table is missing
| 48571 | POI_Overall | properly close all io streams created in opcpackage
| 48572 | XSSF | always copy all declared inner classes and interfaces when generating poi-ooxml-schemas
|  | HSSF | low level record support for the extrst (phonetic text) part of unicode strings. no usermodel access to it as yet though
|  | HSSF | record.unicodestring has moved to record.common.unicodestring, to live with the other record-part classes, as it isn't a full record
|  | OPC | avoid creating temporary files when opening opc packages from input stream
|  | HSMF | improved how hsmf handles multiple recipients
|  | HPBF | add publishertextextractor support to extractorfactory
|  | XSLF | add xslf support for text extraction from tables
|  | HSMF | support attachments as embeded documents within the new outlooktextextractor
|  | HSMF | add a text extractor (outlooktextextractor) to hsmf for simpler extraction of text from .msg files
|  | HSMF | some improvements to hsmf parsing of .msg files
|  | HSSF | initialise the link type of hssfhyperlink, so that gettype() on it works
| 48425 | POI_Overall | improved performance of dateutil.iscelldateformatted()
| 47215 | HSSF | fixed interfaceendrecord to tolerate unexpected record contents
| 48415 | HSSF | improved javadoc on hsspicture.resize()
|  | POI_Overall | added ant target to install artifacts in local repository
| 48026 | HSSF | fixed pagesettingsblock to allow multiple headerfooterrecord records
| 48202 | HSSF | fixed cellrangeutil.mergecellranges to work for adjacent cell regions
| 48339 | HSSF | fixed externalnamerecord to properly distinguish dde data from ole data items
| 47920 | HSLF | allow editing workbooks embedded into powerpoint files
| 48343 | HSSF | added implementation of subtotal function
|  | OOXML | switch to compiling the ooxml schemas for java 1.5

## Version 3.6 (2009-12-14)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 48332 | HSSF | fixed xssfsheet autosizecolumn() to tolerate empty richtextstring
| 48332 | HSSF | fixed columninforecord to tolerate missing reserved field
| 47701 | HSSF | fixed recordformatexception when reading list subrecords (lbsdatasubrecord)
|  | XSSF | memory usage optimization in xssf - avoid creating parentless xml beans
| 47188 | XSSF | avoid corruption of workbook when adding cell comments
| 48106 | XSSF | improved work with cell comments in xssf
|  | HPSF | add support for creating summaryinformation and documentsummaryinformation properties on poidocuments that don't have them, via poidocument.createinformationproperties()
| 48180 | POI_Overall | be more forgiving of short chart records, which skip some unused fields
| 48274 | HSSF | fix erronious wrapping of byte colours in hssfpalette.findsimilarcolor
| 48269 | XSSF | fix fetching of error codes from xssf formula cells
| 48229 | HSSF | fixed javadoc for hssfsheet.setcolumnwidth and xssfsheet setcolumnwidth
| 47757 | HSSF | fixed xlsx2csv to avoid exception when processing cells with multiple "t" elements
| 48195 | HSSF | short-circuit evaluation of if() and choose()
| 48161 | HSLF | support for text extraction from ppt master slides
| 47970 | HSSF | added a method to set arabic mode in hssfsheet
| 48134 | HSSF | release system resources when using picture.resize()
| 48087 | XSSF | avoid npe in xssfchartsheet when calling methods of the superclass
| 48038 | HWPF | handle reading hwpf stylesheets from non zero offsets
|  | OOXML | when running the "compile-ooxml-xsds" ant task, also generate the source jar for the ooxml schemas
| 45672 | HSSF | improve handling by missingrecordawarehssflistener of records that cover multiple cells (mulblankrecord and mulrkrecord)
| 48096 | HSSF | relaxed validation check in recalcidrecord
| 48085 | HSSF | improved error checking in blockallocationtablereader to trap unreasonable field values
| 47924 | HSSF | fixed logic for matching cells and comments in hssfcell.getcellcomment()
| 47942 | XWPF | added implementation of protection features to xlsx and docx files
| 48070 | XSSF | preserve leading and trailing white spaces in xssfrichtextstring
| 48044 | HSSF | added implementation for countblank function
| 48036 | HSSF | added intersectioneval to allow evaluation of the intersection formula operator
| 47999 | POI_Overall | avoid un-needed call to the jvm garbage collector when working on ooxml opc packages
| 47922 | HSMF | added example hsmf application that converts a .msg file to text and extracts attachments
| 47903 | POI_Overall | added ant target to compile scratchpad examples
| 47839 | POI_Overall | improved api for ooxml custom properties
| 47862 | XSSF | fixed xssfsheet.setcolumnwidth to handle columns included in a column span
| 47804 | XSSF | fixed xssfsheet.setcolumnhidden to handle columns included in a column span
| 47889 | XSSF | fixed xssfcell.getstringcellvalue() to properly handle cached formula results

## Version 3.5-final (2009-09-28)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 47747 | HSSF | fixed logic for locating shared formula records
| 47809 | POI_Overall | improved work with user-defined functions
| 47581 | XSSF | fixed xssfsheet.setcolumnwidth to produce xml compatible with mac excel 2008
| 47734 | POI_Overall | removed unnecessary svn:executable flag from files in svn trunk
| 47543 | HSSF | added javadoc how to avoid excel crash when creating too many hssfrichtextstring cells
| 47813 | XSSF | fixed problems with xssfworkbook.removesheetat when workbook contains chart
| 47737 | XSSF | adjust sheet indices of named ranges when deleting sheets
| 47770 | POI_Overall | built-in positive formats don't need starting '('
| 47771 | POI_Overall | added method setfunction(boolean) for defined names
| 47768 | HSSF | implementation of excel "days360" and "npv" functions
| 47751 | HSSF | do not allow hssf's cell text longer than 32,767 characters
| 47757 | HSSF | added an example demonstrating how to convert an xlsx workbook to csv
| 44770 | HSLF | fixed ppt parser to tolerate comment2000 containers with missing comment text
| 47773 | XWPF | fix for extraction paragraphs and sections from headers/footers with xwpfwordextractor
| 47727 | XWPF | support for extraction of header / footer images in hwpf
|  | POI_Overall | moved all test data to a top-level directory
| 47721 | HSSF | Added implementation for INDIRECT()
| 45583 | HWPF | Avoid exception when reading ClipboardData packet in OLE property sets
| 47652 | HSSF | Added support for reading encrypted workbooks
| 47604 | XSSF | Implementation of an XML to XLSX Importer using Custom XML Mapping
| 47620 | XSSF | Avoid FormulaParseException in XSSFWorkbook.setRepeatingRowsAndColumns when removing repeated rows and columns
| 47606 | XSSF | Fixed XSSFCell to correctly parse column indexes greater than 702 (ZZ)
| 47598 | HSSF | Improved formula evaluator number comparison
| 47571 | XWPF | Fixed XWPFWordExtractor to extract inserted/deleted text
| 47548 | HSSF | Fixed RecordFactoryInputStream to properly read continued DrawingRecords
| 46419 | XSSF | Fixed compatibility issue with OpenOffice 3.0
| 47559 | XSSF | Fixed compatibility issue with Excel 2008 Mac sp2. Please see the HSSF+XSSF project page for more information.
| 47540 | XSSF | Fix for saving custom and extended OOXML properties
| 47535 | HWPF | Fixed WordExtractor to tolerate files with empty footnote block
| 47517 | POI_Overall | Fixed ExtractorFactory to support .xltx and .dotx files
| 45556 | POI_Overall | Support for extraction of footnotes from docx files
| 45555 | POI_Overall | Support for extraction of endnotes from docx files
| 47520 | XSSF | Initial support for custom XML mappings in XSSF
| 47460 | XSSF | Fixed NPE when retrieving core properties from a newly created workbook
| 47498 | HSSF | Fixed HyperlinkRecord to properly handle URL monikers
| 47504 | XSSF | Fixed XSSFWorkbook to read files with hyperlinks to document locations
| 47479 | HSSF | Fix BoolErrRecord to tolerate incorrect format written by OOO
| 47448 | HSSF | Allow HSSFEventFactory to handle non-zero padding at the end of the workbook stream
| 47456 | HSLF | Support for getting OLE object data in PowerPointExtractor
| 47411 | XSSF | Explicitly set the 1900 date system when creating XSSF workbooks
| 47400 | HWPF | Support for text extraction of footnotes, endnotes and comments in HWPF
| 47415 | HSSF | Fixed PageSettingsBlock to allow multiple PLS records
| 47412 | POI_Overall | Fixed concurrency issue with EscherProperties.initProps()
| 47143 | HSSF | Fixed OOM in HSSFWorkbook#getAllPictures when reading .xls files containing metafiles
|  | HSSF | Added implementation for ISNA()
| 46793 | HSLF | fixed SimpleShape#getLineWidth to handle default line width
| 47356 | HWPF | removed unused private fields in HWPF BorderCode
| 47355 | HWPF | Improved HWPF TableCell to expose TableCellDescriptor
| 46610 | HWPF | Improved HWPF to better handle unicode
| 47261 | HSLF | Fixed SlideShow#removeSlide to remove references to Notes
| 47375 | HSSF | Fixed HSSFHyperlink to correctly set inter-sheet and file links
| 47384 | HSSF | Fixed ExternalNameRecord to handle unicode names
| 47372 | HSSF | Fixed locale-sensitive unit tests to pass when running on non-US locale

## Version 3.5-beta6 (2009-06-22)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 47363 | HSSF | Fixed HSSFSheet to allow addition of data validations after sheet protection
| 47294 | XSSF | Fixed XSSFWorkbook#setRepeatingRowsAndColumns to tolerate sheet names with quotes
| 47309 | HSSF | Fixed logic in HSSFCell.getCellComment to handle sheets with more than 65536 comments
| 46776 | HSSF | Added clone() method to MulBlankRecord to fix crash in Sheet.cloneSheet()
| 47244 | HSSF | Fixed HSSFSheet to handle missing header / footer records
| 47312 | HSSF | Fixed formula parser to properly reject cell references with a '0' row component
| 47199 | HSSF | Fixed PageSettingsBlock/Sheet to tolerate margin records after other non-PSB records
| 47069 | HSSF | Fixed HSSFSheet#getFirstRowNum and HSSFSheet#getLastRowNum to return correct values after removal of all rows
| 47278 | XSSF | Fixed XSSFCell to avoid generating xsi:nil entries in shared string table
| 47206 | XSSF | Fixed XSSFCell to properly read inline strings
| 47250 | HSSF | Fixed FontRecord to expect unicode flags even when name length is zero
| 47198 | HSSF | Fixed formula evaluator comparison of -0.0 and 0.0
| 47229 | HSSF | Fixed ExternalNameRecord to handle DDE links
| 46287 | HSSF | Control of header and footer extraction in ExcelExtractor / XSSFExcelExtractor
| 46554 | POI_Overall | New ant target "jar-examples"
| 46161 | XSSF | Support in XSSF for setGroupColumnCollapsed and setGroupRowCollapsed
| 46806 | XSSF | Allow columns greater than 255 and rows greater than 0x100000 in XSSF formulas
| 41711 | HSLF | Base class for "old version" exceptions, and new HSLF detection + use of old versions exception
| 47179 | POIFS | Fix string encoding issues with HSMF chunks on non-windows platforms
| 47183 | POIFS | Attachment support for HSMF
| 47154 | HSSF | Handle the cell format @ as the same as General
| 47048 | HSSF | Fixed evaluation of defined names with the 'complex' flag set
| 46953 | HSSF | More tweaks to PageSettingsBlock parsing logic in Sheet constructor
| 47089 | XSSF | Fixed XSSFWorkbook.createSheet to properly increment sheetId
| 46568 | POI_Overall | Fixed XSLFPowerPointExtractor to properly process line breaks
| 39056 | POIFS | Fixed POIFSFileSystem to set CLSID of root when constructing instances from InputStream
| 47054 | HSSF | Fixed cloneStyleFrom to avoid exception when cloning styles of the same family
| 46186 | HSSF | Fixed Sheet to read GutsRecord in the Sheet(RecordStream rs)
| 46714 | HSSF | Automatically call sheet.setAlternativeExpression when sheet.setRowSumsBelow is called
| 46279 | XSSF | Allow 255 arguments for excel functions in XSSF
| 47028 | XSSF | Fixed XSSFCell to preserve cell style when cell value is set to blank
| 47026 | XSSF | Avoid NPE in XSSFCell.setCellType() when workbook does not have SST
| 46987 | HSSF | Allow RecordFactory to handle non-zero padding at the end of the workbook stream
| 47034 | HSSF | Fix reading the name of a NameRecord when the name is very long
| 47001 | HSSF | Fixed WriteAccessRecord and LinkTable to handle unusual format written by Google Docs
| 46973 | HSSF | Fixed defined names to behave better when refersToFormula is unset
| 46832 | XSSF | Allow merged regions with columns greater than 255 or rows bigger than 65536 in XSSF
| 46951 | HSSF | Fixed formula parser to better handle range operators and whole row/column refs
| 46948 | HSSF | Fixed evaluation of range operator to allow for area-ref operands
| 46918 | HSSF | Fixed ExtendedPivotTableViewFieldsRecord(SXVDEX) to allow shorter format
| 46898 | XSSF | Fixed formula evaluator to not cache intermediate circular-reference error results
| 46917 | HSSF | Fixed PageItemRecord(SXPI) to allow multiple field infos
| 46904 | HSSF | Fix POIFS issue with duplicate block 0 references on very old BIFF5/BIFF7 files
| 46840 | HSSF | PageSettingsBlock should include HEADERFOOTER record
| 46885 | XSSF | update cell type when setting cached formula result in XSSFCell
|  | XSSF | added modifiers for anchor type to XSSFClientAnchor
| 46772 | XSSF | support built-in data formats in XSSFDataFormat
| 46719 | XSSF | fixed XSSFSheet.shiftRows to correctly preserve row heights
| 46715 | XSSF | preserve custom column widths across re-serialization of XSSFWorkbook
| 46703 | HSSF | added setDisplayZeros / isDisplayZeros to common interface org.apache.poi.ss.usermodel.Sheet
| 46708 | XSSF | added getMergedRegion(int) to common interface org.apache.poi.ss.usermodel.Sheet
|  | SS_Common | fixed Sheet.autoSizeColumn() to use cached formula values when processing formula cells
|  | SS_Common | Fixed formula parser to handle names with backslashes
| 46660 | HSSF | added Workbook getHidden() and setHidden(boolean)
| 46693 | HSSF | Fixed bugs serialization bugs in records: CHARTFORMAT, SHTPROPS, SXVD and SXVDEX
| 46627 | HSLF | Fixed offset of added images if Pictures stream contains pictures with zero length

## Version 3.5-beta5 (2009-02-19)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 46536 | XSSF | When shifting rows, update formulas on that sheet to point to the new location of those rows
| 46663 | XSSF | Fixed XSSFSheet.shiftRows to properly update references of the shifted cells
| 46535 | XSSF | Remove reference from calculation chain when a formula is deleted
| 46654 | HSSF | HSSFRow/RowRecord to properly update cell boundary indexes
| 46643 | HSSF | Fixed formula parser to encode range operator with tMemFunc
| 46647 | HSSF | Fixed COUNTIF NE operator and other special cases involving type conversion
| 46635 | HSLF | Added a method to remove slides
| 40520 | HSSF | Fixed HSSFFont.applyFont() to properly apply font to overlapping regions
| 46545 | HSSF | Fixed ObjRecord to ignore excessive padding written by previous POI versions
| 46613 | HSSF | Fixed evaluator to perform case insensitive string comparisons
| 46544 | HSSF | command line interface for hssf ExcelExtractor
| 46547 | HSSF | Allow addition of conditional formatting after data validation
| 46548 | HSSF | Page Settings Block fixes - continued PLS records and PSB in sheet sub-streams
| 46523 | HSSF | added implementation for SUMIF function
|  | HSSF | Support for reading HSSF column styles
|  | OOXML | Hook up POIXMLTextExtractor.getMetadataTextExtractor() to the already written POIXMLPropertiesTextExtractor
| 46472 | HPSF | Avoid NPE in HPSFPropertiesExtractor when no properties exist
| 46479 | HSSF | fixed bugs related to cached formula values and HSSFFormulaEvaluator.evaluateInCell()
| 45031 | HSSF | added implementation for CHOOSE() function
| 46361 | HDF | resolve licensing issues around the HDGF resource file, chunks_parse_cmds.tbl
| 46410 | HSSF | added implementation for TIME() function
| 46320 | HSSF | added HSSFPictureData.getFormat()
| 46445 | HSSF | fixed HSSFSheet.shiftRow to move hyperlinks
|  | SS_Common | fixed formula parser to correctly resolve sheet-level names
| 46433 | XSSF | support for shared formulas in XSSF
| 46299 | XWPF | support for carriage return and line break in XWPFRun
| 46300 | XWPF | support for line spacing in XWPFParagraph
| 46308 | XWPF | initial support for creation of XWPFTable
|  | HSSF | Added getters to parent objects: HSSFSheet.getWorkbook(), HSSFRow.getSheet() and HSSFCell.getRow()
| 46385 | HSSF | (also patch 46362) fix serialization of StyleRecord with unicode name
| 46368 | HSSF | Fix HSSFRichTextRun and strings longer than 32768 characters
|  | HSSF | Support sheet-level names
|  | XSSF | Fixed XSSFCell to properly handle cell references with column numbers up to XFD
| 44914 | HSSF | Fixed warning message "WARN. Unread n bytes of record 0xNN"
| 46156 | HSSF | Improved number to text conversion to be closer to that of Excel
| 46312 | HSSF | Fixed ValueRecordsAggregate to handle removal of new empty row
| 46269 | HSSF | Improved error message when attempting to read BIFF2 file
| 46206 | HSSF | Fixed Sheet to tolerate missing DIMENSION records
| 46301 | HSSF | added pivot table records: SXDI, SXVDEX, SXPI, SXIDSTM, SXVIEW, SXVD, SXVS, et al
| 46280 | HSSF | Fixed RowRecordsAggregate etc to properly skip PivotTable records

## Version 3.5-beta4 (2008-11-29)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 46213 | HSSF | Fixed FormulaRecordAggregate to gracefully ignore extra StringRecords
| 46174 | HSSF | Fixed HSSFName to handle general formulas (not just area references)
| 46189 | HSSF | added chart records: CHARTFRTINFO, STARTBLOCK, ENDBLOCK, STARTOBJECT, ENDOBJECT, and CATLAB
| 46199 | HSSF | More tweaks to EmbeddedObjectRefSubRecord
|  | SS_Common | Changes to formula evaluation allowing for reduced memory usage
| 45290 | POIFS | Support odd files where the POIFS header block comes after the data blocks, and is on the data blocks list
| 46184 | HSSF | More odd escaped date formats
|  | HSSF | Include the sheet number in the output of XLS2CSVmra
| 46043 | HWPF | correctly write out HPSF properties with HWPF
| 45973 | POI_Overall | added CreationHelper.createFormulaEvaluator(), implemeted both for HSSF and XSSF
| 46182 | HSLF | fixed Slideshow.readPictures() to skip pictures with invalid headers
| 46137 | POIFS | Handle odd files with a ContinueRecord after EOFRecord
|  | SS_Common | Fixed problem with linking shared formulas when ranges overlap
| 45784 | HSSF | More fixes to SeriesTextRecord
| 46033 | HSLF | fixed TableCell to correctly set text type
| 46122 | HSLF | fixed Picture.draw to skip rendering if picture data was not found
| 15716 | HSSF | memory usage optimisation - converted Ptg arrays into Formula objects
| 46065 | HSSF | added implementation for VALUE function
| 45966 | HSSF | added implementation for FIND function
| 45778 | HSSF | fixed ObjRecord to read ftLbsData properly
| 46053 | HSSF | fixed evaluation cache dependency analysis when changing blank cells

## Version 3.5-beta3 (2008-09-26)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 45518 | POI_Overall | Fix up ColumnHelper to output valid col tags, by making 1 based and 0 based bits clearer, and using the right ones
| 45676 | POI_Overall | Handle very long cells in the XSSF EventUserModel example
|  | OOXML | Initial ExtractorFactory support for building TextExtractors for embeded documents

## Version 3.5-beta2 (2008-08-20)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
|  | XSSF | Support stripping XSSF header and footer fields (eg page number) out of header and footer text if required
|  | OOXML | Add POIXMLPropertiesTextExtractor, which provides to the OOXML file formats a similar function to HPSF's HPSFPropertiesExtractor
| 45539 | POI_Overall | Improve XWPFWordExtractor to extract headers and footers
|  | XWPF | Improve how XWPF handles paragraph text
|  | XWPF | Support in XWPF handles headers and footers
| 45592 | HWPF | Improve XWPF text extraction to include tables always, and picture text where possible
| 45545 | POI_Overall | Improve XSLF usermodel support, and include XSLF comments in extracted text
| 45540 | POI_Overall | Fix XSSF header and footer support, and include headers and footers in the output of XSSFExcelExtractor
| 45431 | XSSF | Support for .xlsm files, sufficient for simple files to be loaded by excel without warning
|  | HSSF | New class org.apache.poi.hssf.record.RecordFormatException, which DDF uses instead of the HSSF version, and the HSSF version inherits from
| 45431 | XSSF | Partial support for .xlm files. Not quite enough for excel to load them though
| 45430 | HSSF | Correct named range sheet reporting when no local sheet id is given in the xml

## Version 3.5-beta1 (2008-07-18)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 45018 | POI_Overall | Support for fetching embedded documents from within an OOXML file
|  | XSSF | Port support for setting a policy on missing / blank cells when fetching, to XSSF too
|  | OOXML | Common text extraction factory, which returns the correct POITextExtractor for the supplied data
|  | OOXML | Text Extraction support for the new OOXML files (.xlsx, .docx and .pptx)
|  | XSSF | Initial support for processing OOXML Excel files (.xlsx), both directly through XSSF, and also through the new common UserModel
|  | HSLF XSLF | Created a common interface for handling PowerPoint files, irrespective of if they are .ppt or .pptx
|  | HSSF XSSF | Created a common interface for handling Excel files, irrespective of if they are .xls or .xlsx

## Version 3.2-FINAL (2008-10-19)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 45866 | HSSF | allowed for change of unicode compression across Continue records
| 45964 | HSSF | support for link formulas in Text Objects
| 43354 | HSSF | support for evaluating formulas with missing args
| 45912 | HSSF | fixed ArrayIndexOutOfBoundsException in EmbeddedObjectRefSubRecord
| 45889 | HSLF | fixed ArrayIndexOutOfBoundsException when constructing HSLF Table with a single row
|  | HSLF | Initial support for creating hyperlinks in HSLF
| 45876 | HSSF | fixed BoundSheetRecord to allow sheet names longer than 31 chars
| 45890 | HSSF | fixed HSSFSheet.shiftRows to also update conditional formats
| 45865 | HSSF | modified Formula Parser/Evaluator to handle cross-worksheet formulas
|  | SS_Common | Optimised the FormulaEvaluator to take cell dependencies into account
| 16936 | HSSF | Initial support for whole-row cell styling
|  | HSSF | Update hssf.extractor.ExcelExtractor to optionally output blank cells too
|  | HSSF | Include the sheet name in the output of examples.XLS2CSVmra
| 45784 | HSSF | Support long chart titles in SeriesTextRecords
| 45777 | HSSF | Throw an exception if HSSF Footer or Header is attempted to be set too long, rather than having it break during writing out
| 45844 | HSLF | Additional diagnostics for HSLF SlideShowRecordDumper
| 45829 | HSSF | HSSFPicture.getImageDimension() failed when DPI of image is zero
| 45815 | HSLF | Bit mask values in StyleTextPropAtom were not preserved across read-write
| 45814 | HSLF | Specify RecordType for slide show Handout (4041)
| 45805 | HSSF | Fixed 16-bit signed/unsigned bug in HSSFSheet.getColWidth etc
| 45780 | HSSF | Fixed HSSFSheet.shiftRows to also update Area refs
| 45804 | POI_Overall | Update HSMF to handle Outlook 3.0 msg files, which have a different string chunk type
|  | HSSF | Expose the name of Named Cell Styles via HSSFCellStyle (normally held on the parent style though)
| 45978 | HSSF | Fixed IOOBE in Ref3DPtg.toFormulaString() due eager initialisation of SheetReferences
|  | HSSF | Made HSSFFormulaEvaluator no longer require initialisation with sheet or row
|  | HSSF | Extended support for cached results of formula cells
| 45639 | HSSF | Fixed AIOOBE due to bad index logic in ColumnInfoRecordsAggregate
|  | HSSF | Fixed special cases of INDEX function (single column/single row, errors)
| 45761 | HSSF | Support for Very Hidden excel sheets in HSSF
| 45738 | HWPF | Initial HWPF support for Office Art Shapes
| 45720 | HSSF | Fixed HSSFWorkbook.cloneSheet to correctly clone sheets with drawings
| 45728 | HSLF | Fix for SlideShow.reorderSlide in HSLF
|  | HSLF | Initial support for embedded movies and controls in HSLF
| 45358 | HSSF | signed/unsigned error when parsing 3-d area refs, performance problem evaluating area refs, and ClassCastExcecption in IF()
|  | HPBF | Support for HPBF Publisher hyperlinks, including during text extraction
| 26321 44958 | HSSF | preserve position of ArrayRecords and TableRecords among cell value records
|  | HWPF | Impove empty header or footer handling in HWPF HeaderStories
|  | HSSF | Avoid NPE in hssf.usermodel.HeaderFooter when stripping fields out
|  | HSSF | Avoid NPE in EscherBSERecord on older escher records
|  | HPBF | Basic text extraction support in HPBF
|  | HPBF | Initial, low level support for Publisher files, in the form of HPBF
| 45699 | HSSF | Fix RowRecordsAggregate to tolerate intervening MERGEDCELLS records
| 45698 | HSSF | Fix LinkTable to tolerate multiple EXTERNSHEET records
| 45682 | HSSF | Fix for cloning of CFRecordsAggregate
|  | HSSF | Initial support for evaluating external add-in functions like YEARFRAC
| 45672 | HSSF | Fix for MissingRecordAwareHSSFListener to prevent multiple LastCellOfRowDummyRecords when shared formulas are present
| 45645 | HSSF | Fix for HSSFSheet.autoSizeColumn() for widths exceeding Short.MAX_VALUE
| 45623 | HSSF | Support for additional HSSF header and footer fields, including bold and full file path
| 45623 | HSSF | Support stripping HSSF header and footer fields (eg page number) out of header and footer text if required
| 45622 | HWPF | Support stripping HWPF fields (eg macros) out of text, via Range.stripFields(text)
|  | HPSF | New HPSF based TextExtractor for document metadata, org.apache.poi.hpsf.extractor.HPSFPropertiesExtractor
|  | HSLF | Properly update the array of Slide's text runs in HSLF when new text shapes are added
| 45590 | HSLF | Fix for Header/footer extraction for .ppt files saved in Office 2007
|  | HWPF | Big improvement in how HWPF handles unicode text, and more sanity checking of text ranges within HWPF
|  | HWPF | Include headers and footers int he extracted text from HWPF's WordExtractor
|  | HWPF | Added support to HWPF for headers and footers
|  | HWPF | Improve how HWPF deals with unicode internally. Should avoid some odd behaviour when manipulating unicode text
| 45577 | HSSF | Added implementations for Excel functions NOW and TODAY
| 45582 | HSSF | Fix for workbook streams with extra bytes trailing the EOFRecord
| 45537 | HSLF | Include headers and footers (of slides and notes) in the extracted text from HSLF
| 45472 | HSSF | Fixed incorrect default row height in OpenOffice 2.3
| 44692 | HSSF | HSSFPicture.resize() stretched image when there was a text next to it
| 45543 | POI_Overall | Optionally extract comment text with PowerPointExtractor, and initial hslf model support for comments
| 45538 | POI_Overall | Include excel headers and footers in the output of ExcelExtractor
| 44894 | HSSF | refactor duplicate logic from EventRecordFactory to RecordFactory
|  | HSLF | Support for Headers / Footers in HSLF
| 44953 | HSSF | Extensive fixes for data validation
| 45519 | HSSF | Fixed to keep datavalidation records together
|  | HSSF | Support for creating new HSLF CurrentUserAtoms
| 45466 | HSSF | Partial support for removing excel comments (won't work for all excel versions yet)
| 45437 | HWPF | Detect encrypted word documents, and throw an EncryptedDocumentException instead of a OOM
| 45404 | HSSF | New class, hssf.usermodel.HSSFDataFormatter, for formatting numbers and dates in the same way that Excel does
| 45414 | HSSF | Don't add too many UncalcedRecords to sheets with charts in them
| 45398 | HSSF | Support detecting date formats containing "am/pm" as date times
| 45410 | HSSF | Removed dependency from contrib on commons beanutils,collections and lang
|  | HSSF | New helper, HSSFOptimiser, which handles removing duplicated font and style records, to avoid going over the limits in Excel
| 45322 | HSSF | Fixed NPE in HSSFSheet.autoSizeColumn() when cell number format was not found
| 45380 | HSSF | Missing return keyword in ArrayPtg.toFormulaString()
| 44958 | HSSF | Record level support for Data Tables. (No formula parser support though)
| 35583 | POI_Overall | Include a version class, org.apache.poi.Version, to allow easy introspection of the POI version
|  | HSSF | Allow the cloning of one HSSFCellStyle onto another, including cloning styles from one HSSFWorkbook onto another
| 45289 | HSSF | finished support for special comparison operators in COUNTIF
| 45126 | HSSF | Avoid generating multiple NamedRanges with the same name, which Excel dislikes
|  | HSSF | Fix cell.getRichStringCellValue() for formula cells with string results
| 45365 | HSSF | Handle more excel number formatting rules in FormatTrackingHSSFListener / XLS2CSVmra
| 45373 | HSSF | Improve the performance of HSSFSheet.shiftRows
| 45367 | HSSF | Fixed bug when last row removed from sheet is row zero
| 45348 | HSSF | Tweaks to RVA formula logic
| 45354 | HSSF | Fixed recognition of named ranges within formulas
| 45338 | HSSF | Fix HSSFWorkbook to give you the same HSSFFont every time, and then fix it to find newly added fonts
| 45336 | HSSF | Fix HSSFColor.getTripletHash()
| 45334 | HSSF | Fixed formula parser to handle dots in identifiers
| 45252 | HWPF | Improvement for HWPF Range.replaceText()
| 45001 | HWPF | Further fix for HWPF Range.delete() and unicode characters
| 45175 | HWPF | Support for variable length operands in org.apache.poi.hwpf.sprm.SprmOperation
|  | HSSF | Avoid spurious missing lines with the MissingRecordAware event code, and odd files that contain RowRecords in the middle of the cell Records
|  | HSSF | Support for parsing formulas during EventUserModel processing, via the new EventWorkbookBuilder

## Version 3.1-final (2008-06-29)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 30978 | HSSF | Fixed re-serialization of tRefErr3d and tAreaErr3d
| 45234 | HSSF | Removed incorrect shared formula conversion in CFRuleRecord
| 45001 | HWPF | Improved HWPF Range.replaceText()
| 44692 | HSSF | Fixed HSSFPicture.resize() to properly resize pictures if the underlying columns/rows have modified size
|  | HSLF | Support custom image renderers in HSLF
|  | HSLF | Correctly increment the reference count of a blip when a picture is inserted
| 45110 | HSLF | Fixed TextShape.resizeToFitText() to properly resize TextShape
| 45091 | HSSF | Fixed serialization of RefN~ tokens. Simplified Ptg class hierarchy
| 45133 | HSSF | Fixed OBJ Record (5Dh) to pad the sub-record data to a 4-byte boundary
| 45145 | HSSF | Fixed Sheet to always enforce RowRecordsAggregate before ValueRecordsAggregate
| 45123 | HSSF | Fixed SharedFormulaRecord.convertSharedFormulas() to propagate token operand classes
| 45087 | HSSF | Correctly detect date formats like [Black]YYYY as being date based
| 45060 | HSSF | Improved token class transformation during formula parsing
| 44840 | HSSF | Improved handling of HSSFObjectData, especially for entries with data held not in POIFS
| 45043 | HSSF | Support for getting excel cell comments when extracting text
|  | HSSF | Extend the support for specifying a policy to HSSF on missing / blank cells when fetching, to be able to specify the policy at the HSSFWorkbook level
| 45025 | HSSF | improved FormulaParser parse error messages
| 45046 | HSSF | allowed EXTERNALBOOK(0x01AE) to be optional in the LinkTable
| 45066 | HSSF | fixed sheet encoding size mismatch problems
| 45003 | POIFS | Support embedded HDGF visio documents
| 45001 | HWPF | Partial fix for HWPF Range.insertBefore() and Range.delete() with unicode characters
| 44977 | HSSF | Support for AM/PM in excel date formats
|  | HSSF | Support for specifying a policy to HSSF on missing / blank cells when fetching
| 44937 | HWPF | Partial support for extracting Escher images from HWPF files
| 44824 | HWPF | Avoid an infinite loop when reading some HWPF pictures
| 44898 | POIFS | Correctly handle short last blocks in POIFS

## Version 3.1-beta2 (2008-05-26)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 44306 | HSSF | fixed reading/writing of AttrPtg(type=choose) and method toFormulaString() for CHOOSE formulas
| 24207 | HSSF | added HSSFName.isDeleted() to check if the name points to cell that no longer exists
| 40414 | HSSF | fixed selected/active sheet after removing sheet from workbook
| 44523 | HSSF | fixed workbook sheet selection and focus
| 45000 | HWPF | Fixed NPE in ListLevel when numberText is null
| 44985 | HSLF | Properly update TextSpecInfoAtom when the parent text is changed
| 41187 | HSSF | fixed HSSFSheet to properly read xls files without ROW records
| 44950 | HSSF | fixed HSSFFormulaEvaluator.evaluateInCell() and Area3DEval.getValue() also added validation for number of elements in AreaEvals
| 42570 | HSSF | fixed LabelRecord to use empty string instead of null when the length is zero
| 42564 | HSSF | fixed ArrayPtg to use ConstantValueParser. Fixed a few other ArrayPtg encoding issues
| 28754 | HSSF | Follow-on from 28754 - StringPtg.toFormulaString() should escape double quotes
| 44929 | POI_Overall | Improved error handling in HSSFWorkbook when attempting to read a BIFF5 file
| 44675 | HSSF | Parameter operand classes (function metadata) required to encode SUM() etc properly. Added parse validation for number of parameters
| 44921 | HSSF | allow Ptg.writeBytes() to be called on relative ref Ptgs (RefN* and AreaN*)
| 44914 | HSSF | Fix/suppress warning message "WARN. Unread n bytes of record 0xNN"
| 44892 | HSSF | made HSSFWorkbook.getSheet(String) case insensitive
| 44886 | HSSF | Correctly process PICT metafile in EscherMetafileBlip
| 44893 | HSSF | Take into account indentation in HSSFSheet.autoSizeColumn

## Version 3.1-beta1 (2008-04-28)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 44857 | HSSF | Avoid OOM on unknown escher records when EscherMetafileBlip is incorrect
|  | HSLF | Support for getting embedded sounds from slide show
|  | HSLF | Initial support for rendering slides into images
|  | HSLF | Support for getting OLE object data from slide show
|  | HSLF | Implemented more methods in PPGraphics2D
|  | HSLF | Added Freeform shape which can contain both lines and Bezier curves
| 41071 | POI_Overall | Improved text extraction in HSLF
| 30311 | HSSF | Conditional Formatting - improved API, added HSSFSheetConditionalFormatting
|  | HSSF | Update the formula parser code to use a HSSFWorkbook, rather than the low level model.Workbook, to make things cleaner and make supporting XSSF formulas in future much easier
|  | POIFS | Fix the logger used by POIFSFileSystem, so that commons-logging isn't required when not used
|  | HSLF | Update HSLFSlideShow and HSSFWorkbook to take advantage of POIFS updates, and allow reading embeded documents
|  | POIFS | Improve how POIFS works with directory entries, and update HWPFDocument to support reading an embeded word document
|  | HSSF | Initial support for getting and changing chart and series titles
|  | HSSF | Implement a proxy HSSFListener which tracks the format records, and lets you lookup the format string for a given cell. Convert the xls to csv example to use it
| 44792 | HSSF | fixed encode/decode problems in ExternalNameRecord and CRNRecord
| 43670 44501 | POI_Overall HDGF | Fix how HDGF deals with trailing data in the list of chunk headers
| 30311 | HSSF | More work on Conditional Formatting
|  | HSSF | refactored all junits' usage of HSSF.testdata.path to one place
| 44739 | HSSF | Small fixes for conditional formatting (regions with max row/col index)
| 44694 | HPSF | HPSF: Support for property sets without sections
|  | HSLF | Implement Sheet.removeShape(Shape shape) in HSLF
| 44675 44695 44691 | HSSF | Various fixes: Recognising var-arg built-in functions #44675, ExternalNameRecord serialisation bug #44695, PMT() bug #44691
| 30311 | HSSF | More work on Conditional Formatting
|  | HSSF | Move the Formula Evaluator code out of scratchpad
|  | HSSF | Move the missing record aware eventusermodel code out of scratchpad
| 44652 44603 | HWPF | Improved handling of Pictures in Word Documents
| 44636 | HSSF | Fix formula parsing of RefVPtg, which was causing #VALUE to be shown on subsequent edits
| 44627 | POI_Overall | Improve the thread safety of POILogFactory
| 30311 | HSSF | Initial support for Conditional Formatting
| 44609 | HSSF | Handle leading spaces in formulas, such as '= 4'
| 44608 | HSSF | Support for PercentPtg in the formula evaluator
| 44606 | HSSF | Support calculated string values for evaluated formulas
|  | HSSF | Add accessors to horizontal and vertical alignment in HSSFTextbox
| 44593 | HSSF | Improved handling of short DVRecords
| 28627 44580 | HDF HWPF | Fix Range.delete() in HWPF
| 44539 | HSSF | Support for area references in formulas of rows >= 32768
| 44536 | HSSF | Improved support for detecting read-only recommended files
| 43901 | HSSF | Correctly update the internal last cell number when adding and removing cells (previously sometimes off-by-one)
| 44504 | HSSF | Added initial support for recognising external functions like YEARFRAC and ISEVEN (using NameXPtg), via LinkTable support
| 44504 | HSSF | Improvements to FormulaParser - operators, precedence, error literals, quotes in string literals, range checking on IntPtg, formulas with extra un-parsed stuff at the end, improved parse error handling
| 44504 | HSSF | Fixed number conversion inconsistencies in many functions, and improved RefEval
| 44504 | HSSF | Added initial support for recognising external functions like YEARFRAC and ISEVEN (using NameXPtg), via LinkTable support
| 44504 | HSSF | Improvements to FormulaParser - operators, precedence, error literals, quotes in string literals, range checking on IntPtg, formulas with extra un-parsed stuff at the end, improved parse error handling
| 44504 | HSSF | Fixed number conversion inconsistencies in many functions, and improved RefEval
| 44508 | HSSF | Fix formula evaluation with evaluateInCell on boolean formulas
| 44510 | HSSF | Fix how DVALRecord works with dropdowns
| 44495 | HSSF | Handle named cell ranges in formulas that have lower case parts
| 44491 | POI_Overall | Don't have the new-style "HPSF properties are always available" affect the old-style use of HPSF alongside HSSF
| 44471 | HSSF | Crystal Reports generates files with short StyleRecords, which isn't allowed in the spec. Work around this
| 44495 | HSSF | Handle named cell ranges in formulas that have lower case parts
| 44491 | POI_Overall | Don't have the new-style "HPSF properties are always available" affect the old-style use of HPSF alongside HSSF
| 44471 | HSSF | Crystal Reports generates files with short StyleRecords, which isn't allowed in the spec. Work around this
| 44450 | HSSF | Support for Lookup, HLookup and VLookup functions
| 44449 | HSSF | Avoid getting confused when two sheets have shared formulas for the same areas, and when the shared formula is set incorrectly
| 44366 | POIFS | InputStreams passed to POIFSFileSystem are now automatically closed. A warning is generated for people who might've relied on them not being closed before, and a wrapper to restore the old behaviour is supplied
| 44371 | HSSF | Support for the Offset function
| 38921 | HSSF | Have HSSFPalette.findSimilar() work properly
| 44456 | HSSF | Fix the contrib SViewer / SViewerPanel to not fail on sheets with missing rows
| 44403 | HSSF | Further support for unusual, but valid, arguments to the Mid function
| 44410 | HSSF | Support for whole-column ranges, such as C:C, in formula strings and the formula evaluator
| 44421 | HSSF | Update Match function to properly support Area references
| 44417 | HSSF | Improved handling of references for the need to quote the sheet name for some formulas, but not when fetching a sheet by name
| 44413 | HSSF | Fix for circular references in INDEX, OFFSET, VLOOKUP formulas, where a cell is actually allowed to reference itself
| 44403 | HSSF | Fix for Mid function handling its arguments wrong
| 44364 | HSSF | Support for Match, NA and SumProduct functions, as well as initial function error support
| 44375 | HPSF | Cope with a broken dictionary in Document Summary Information stream. RuntimeExceptions that occured when trying to read bogus data are now caught. Dictionary entries up to but not including the bogus one are preserved, the rest is ignored
| 38641 | HSSF | Handle timezones better with cell.setCellValue(Calendar), so now 20:00-03:00, 20:00+00:00 and 20:00+03:00 will all be recorded as 20:00, and not 17:00 / 20:00 / 23:00 (pass a Date not a Calendar for old behaviour)
| 44373 | HSSF | Have HSSFDateUtil.isADateFormat recognize more formats as being dates
| 37923 | HSSF | Support for Excel hyperlinks
|  | HSSF | Implement hashCode() and equals(obj) on HSSFFont and HSSFCellStyle
| 44345 | HSSF | Implement CountA, CountIf, Index, Rows and Columns functions
| 44336 | HSSF | Properly escape sheet names as required when figuring out the text of formulas
| 44326 | POI_Overall | Improvements to how SystemOutLogger and CommonsLogger log messages with exceptions, and avoid an infinite loop with certain log messages with exceptions
|  | HSSF | Support for a completed Record based "pull" stream, via org.apache.poi.hssf.eventusermodel.HSSFRecordStream, to complement the existing "push" Event User Model listener stuff

## Version 3.0.2-FINAL (2008-02-04)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 44297 | HSSF | IntPtg must operate with unsigned short. Reading signed short results in incorrect formula calculation
| 44296 | HSLF | Fix for reading slide background images
| 44293 | HSSF | Avoid swapping AreaPtgs from relative to absolute
| 44292 | HWPF | Correctly process the last paragraph in a word file
| 44254 | HSSF | Avoid some unread byte warnings, and properly understand DVALRecord
|  | HSSF | Add another formula evaluation method, evaluateFormulaCell(cell), which will re-calculate the value for a formula, without affecting the formula itself
| 41726 | HSSF | Fix how we handle signed cell offsets in relative areas and references
| 44233 | HSSF | Support for getting and setting a flag on the sheet, which tells excel to re-calculate all formulas on it at next reload
| 44201 | HSSF | Enable cloning of sheets with data validation rules
| 44200 | HSSF | Enable cloning of sheets with notes
| 43008 | HSSF | Add a moveCell method to HSSFRow, and deprecate setCellNum(), which didn't update things properly
| 43058 | HSSF | Support setting row grouping on files from CR IX, which lack GutsRecords
| 31795 | HSSF | Support cloning of sheets with certain drawing objects on them
| 43902 | HSSF | Don't consider merged regions when auto-sizing columns
| 42464 | HSSF | Avoid "Expected ExpPtg to be converted from Shared to Non-Shared Formula" on large, formula heavy worksheets
| 42033 | HSSF | Add support for named ranges with unicode names
| 34023 | HSSF | When shifting rows, update formulas on that sheet to point to the new location of those rows
|  | HSSF | Support getting all the cells referenced by an AreaReference, not just the corner ones
| 43510 | HSSF | Add support for named ranges in formulas, including non-contiguous named ranges
| 43937 | HSSF | Add support for hiding and un-hiding sheets, and checking their current hidden status
| 44167 | HSSF | Fix for non-contiguous named ranges
| 44070 | HSSF | Fix for shifting comments when shifting rows

## Version 3.0.2-BETA2 (2008-01-12)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
|  | HSLF | Support for tables in HSLF
| 43781 | HSLF | Fix for extracting text from TextBoxes HSLF in
|  | HSSF | Improve JavaDocs relating to hssf font and fill colourings
| 44095 44097 44099 | HSSF | Support for Mid, Replace and Substitute excel functions
| 44055 | POI_Overall | Support for getting the from field from HSMF messages
| 43551 | HSSF | Support for 1904 date windowing in HSSF (previously only supported 1900 date windowing)
| 41064 | POIFS | Support for String continue records
| 27511 | POI_Overall | Support for data validation, via DVRecord and DVALRecord

## Version 3.0.2-BETA1 (2007-12-04)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 43877 | HSSF | Fix for handling mixed OBJ and CONTINUE records
| 39512 | HSSF | Fix for handling mixed OBJ and CONTINUE records
| 43837 | HSSF | Support for unicode NameRecords
| 43807 | HSSF | Throw an IllegalArgumentException if asked to create a merged region with invalid columns or rows, rather than writing out a corrupt file
| 43837 | HSSF | Support for unicode NameRecords
| 43721 | HSSF | Support for Chart Title Format records
| 42794 | HSSF | Fix for BOF records from things like Access
| 43648 | HSSF | Fix for IntPtg and short vs int
| 43751 | HSSF | Fix for handling rotated text in HSSFSheet.autoSizeColumn
|  | SS_Common | Include an Excel text extractor, and put all existing text extractors under a common superclass
|  | HDGF | Improvements to the LZW compression engine used by HDGF
|  | HSSF | HSSFPicture.resize() - a handy method to reset a picture to its original width and height
|  | HSSF | Add a getSheetIndex(HSSFSheet) method to HSSFWorkbook, and allow a HSSFSheet to get at its parent HSSFWorkbook
|  | HSSF | Move POIDocument out of Scratchpad, and update HSSFWorkbook to use it
| 43399 | HSSF | Fix for Cell References for rows > 32678
| 43410 | HSSF | Improved Formula Parser support for numbers and ranges
|  | HSLF | When writing HSLF files out, optionally preserve all OLE2 nodes (default is just the HSLF related nodes)
| 43323 | HSLF | Support for adding Pictures to ShapeGroups in HSLF
| 43222 | HSSF | Support for getting OLE object data from HSSFWorkbook
| 43247 | HSLF | Support for getting OLE object data from slideshows
| 43125 | HSSF | Support for reading EMF, WMF and PICT images via HSSFWorkbook.getAllPictures()
| 43088 | HSSF | Fix for reading files with long cell comments and text boxes
| 42844 | HSSF | Fix for the EventUserModel and records that aren't immediately followed by their ContinueRecords
| 43055 | HSSF | Fix for saving Crystal Reports xls files when preserving nodes
| 43116 | HSSF | Fix for Escher layer handling of embedded OLE2 documents
| 43108 | HSSF | Where permissions deny fetching System Properties, use sensible defaults
| 43093 | HSSF | Fix formula evaluator support for Area3D references to other sheets
|  | HSSF | Improvements to HSSFDateUtils.isADateFormat, and have HSSFDateUtil.isCellDateFormatted use this
| 42999 | HSSF | Fix for HSSFPatriarch positioning problems
|  | HSSF | Support for write-protecting a HSSF workbook
|  | HSSF | Support for querying, setting and un-setting protection on sheets in a HSSF workbook
|  | HSMF | Initial HSMF (outlook) support
|  | POI_Overall | Tidy up the javadocs

## Version 3.0.1-FINAL (2007-07-05)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
|  | POI_Overall | Administrative updates to the Maven POMs, and the release artifact build process
| 23951 | HSSF | Fix for HSSF setSheetOrder and tab names
| 42524 | HSLF | Better HSLF support for problem shape groups
| 42520 | HSLF | Better HSLF support for corrupt picture records
|  | HSSF | Initial support for a "missing record aware" HSSF event model
|  | HSLF | Additional HSLF support for Title and Slide Master Sheets
| 42474 | HSLF | Improved HSLF note to slide matching, and a NPE
| 42481 | HSLF | Tweak some HSLF exceptions, to make it clearer what you're catching
| 42667 | HSLF | Fix for HSLF writing of files with tables
|  | HSSF | Improved way of detecting HSSF cells that contain dates, isADateFormat
|  | HDGF | Initial, read-only support for Visio documents, as HDGF

## Version 3.0-FINAL (2007-05-18)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
| 39977 | POI_Overall | Fix POM for Maven users
| 38976 | HSSF | Add createPicture to HSSFShapeGroup
|  | OOXML | Detect Office 2007 XML documents, and throw a meaningful exception
|  | HSLF | Additional HSLF support for PowerPoint
|  | HWPF | Initial support for HWPF image extraction

## Version 3.0-alpha3 (2006-12-12)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
|  | HSLF | Additional HSLF support for PowerPoint

## Version 3.0-alpha2 (2006-06-16)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
|  | HSSF | HSSF Formula support
|  | HSLF | Additional HSLF support for PowerPoint
| 39389 | HSSF | Extended Ascii support for WingDings

## Version 3.0-alpha1 (2005-06-04)

### Changes

Type | Bug | Module | Description
--- | --- | --- | ---
|  | HSSF | Bugzilla Bug 29976 HSSF hyperlink formula size problem
|  | HSSF | Image writing support
|  | HSLF | HSLF - Initial PowerPoint Support. Includes: Support for text extraction across the whole file; Support for getting individual slides, and their notes, and extracting text from those; Initial support for changing (but not adding) text