History of Changes 45410 - Removed dependency from contrib on commons beanutils,collections and lang New helper, HSSFOptimiser, which handles removing duplicated font and style records, to avoid going over the limits in Excel 45322 - Fixed NPE in HSSFSheet.autoSizeColumn() when cell number format was not found 45380 - Missing return keyword in ArrayPtg.toFormulaString() 44958 - Record level support for Data Tables. (No formula parser support though) 35583 - Include a version class, org.apache.poi.Version, to allow easy introspection of the POI version Allow the cloning of one HSSFCellStyle onto another, including cloning styles from one HSSFWorkbook onto another 45289 - finished support for special comparison operators in COUNTIF 45126 - Avoid generating multiple NamedRanges with the same name, which Excel dislikes Fix cell.getRichStringCellValue() for formula cells with string results 45365 - Handle more excel number formatting rules in FormatTrackingHSSFListener / XLS2CSVmra 45373 - Improve the performance of HSSFSheet.shiftRows 45367 - Fixed bug when last row removed from sheet is row zero 45348 - Tweaks to RVA formula logic 45354 - Fixed recognition of named ranges within formulas 45338 - Fix HSSFWorkbook to give you the same HSSFFont every time, and then fix it to find newly added fonts 45336 - Fix HSSFColor.getTripletHash() 45334 - Fixed formula parser to handle dots in identifiers 45252 - Improvement for HWPF Range.replaceText() 45001 - Further fix for HWPF Range.delete() and unicode characters 45175 - Support for variable length operands in org.apache.poi.hwpf.sprm.SprmOperation Avoid spurious missing lines with the MissingRecordAware event code, and odd files that contain RowRecords in the middle of the cell Records. Support for parsing formulas during EventUserModel processing, via the new EventWorkbookBuilder 30978 - Fixed re-serialization of tRefErr3d and tAreaErr3d 45234 - Removed incorrect shared formula conversion in CFRuleRecord 45001 - Improved HWPF Range.replaceText() 44692 - Fixed HSSFPicture.resize() to properly resize pictures if the underlying columns/rows have modified size Support custom image renderers in HSLF Correctly increment the reference count of a blip when a picture is inserted 45110 - Fixed TextShape.resizeToFitText() to properly resize TextShape 45091 - Fixed serialization of RefN~ tokens. Simplified Ptg class hierarchy 45133 - Fixed OBJ Record (5Dh) to pad the sub-record data to a 4-byte boundary 45145 - Fixed Sheet to always enforce RowRecordsAggregate before ValueRecordsAggregate 45123 - Fixed SharedFormulaRecord.convertSharedFormulas() to propagate token operand classes 45087 - Correctly detect date formats like [Black]YYYY as being date based 45060 - Improved token class transformation during formula parsing 44840 - Improved handling of HSSFObjectData, especially for entries with data held not in POIFS 45043 - Support for getting excel cell comments when extracting text 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 - improved FormulaParser parse error messages 45046 - allowed EXTERNALBOOK(0x01AE) to be optional in the LinkTable 45066 - fixed sheet encoding size mismatch problems 45003 - Support embeded HDGF visio documents 45001 - Partial fix for HWPF Range.insertBefore() and Range.delete() with unicode characters 44977 - Support for AM/PM in excel date formats Support for specifying a policy to HSSF on missing / blank cells when fetching 44937 - Partial support for extracting Escher images from HWPF files 44824 - Avoid an infinite loop when reading some HWPF pictures 44898 - Correctly handle short last blocks in POIFS 44306 - fixed reading/writing of AttrPtg(type=choose) and method toFormulaString() for CHOOSE formulas 24207 - added HSSFName.isDeleted() to check if the name points to cell that no longer exists 40414 - fixed selected/active sheet after removing sheet from workbook 44523 - fixed workbook sheet selection and focus 45000 - Fixed NPE in ListLevel when numberText is null 44985 - Properly update TextSpecInfoAtom when the parent text is changed 41187 - fixed HSSFSheet to properly read xls files without ROW records 44950 - fixed HSSFFormulaEvaluator.evaluateInCell() and Area3DEval.getValue() also added validation for number of elements in AreaEvals 42570 - fixed LabelRecord to use empty string instead of null when the length is zero. 42564 - fixed ArrayPtg to use ConstantValueParser. Fixed a few other ArrayPtg encoding issues. Follow-on from 28754 - StringPtg.toFormulaString() should escape double quotes 44929 - Improved error handling in HSSFWorkbook when attempting to read a BIFF5 file 44675 - Parameter operand classes (function metadata) required to encode SUM() etc properly. Added parse validation for number of parameters 44921 - allow Ptg.writeBytes() to be called on relative ref Ptgs (RefN* and AreaN*) 44914 - Fix/suppress warning message "WARN. Unread n bytes of record 0xNN" 44892 - made HSSFWorkbook.getSheet(String) case insensitive 44886] - Correctly process PICT metafile in EscherMetafileBlip 44893 - Take into account indentation in HSSFSheet.autoSizeColumn 44857 - 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 - Improved text extraction in HSLF 30311 - Conditional Formatting - improved API, added HSSFSheetConditionalFormatting 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 Fix the logger used by POIFSFileSystem, so that commons-logging isn't required when not used Update HSLFSlideShow and HSSFWorkbook to take advantage of POIFS updates, and allow reading embeded documents Improve how POIFS works with directory entries, and update HWPFDocument to support reading an embeded word document Initial support for getting and changing chart and series titles 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 - fixed encode/decode problems in ExternalNameRecord and CRNRecord. 43670, 44501 - Fix how HDGF deals with trailing data in the list of chunk headers 30311 - More work on Conditional Formatting refactored all junits' usage of HSSF.testdata.path to one place 44739 - Small fixes for conditional formatting (regions with max row/col index) Implement Sheet.removeShape(Shape shape) in HSLF 44694 - HPSF: Support for property sets without sections Various fixes: Recognising var-arg built-in functions #44675, ExternalNameRecord serialisation bug #44695, PMT() bug #44691 30311 - More work on Conditional Formatting Move the Formula Evaluator code out of scratchpad Move the missing record aware eventusermodel code out of scratchpad 44652 / 44603 - Improved handling of Pictures in Word Documents 44636 - Fix formula parsing of RefVPtg, which was causing #VALUE to be shown on subsequent edits 44627 - Improve the thread safety of POILogFactory 30311 - Initial support for Conditional Formatting 44609 - Handle leading spaces in formulas, such as '= 4' 44608 - Support for PercentPtg in the formula evaluator 44606 - Support calculated string values for evaluated formulas Add accessors to horizontal and vertical alignment in HSSFTextbox 44593 - Improved handling of short DVRecords 28627 / 44580 - Fix Range.delete() in HWPF 44539 - Support for area references in formulas of rows >= 32768 44536 - Improved support for detecting read-only recommended files 43901 - Correctly update the internal last cell number when adding and removing cells (previously sometimes off-by-one) 28231 - For apparently truncated files, which are somehow still valid, now issue a truncation warning but carry on, rather than giving an exception as before 44504 - Added initial support for recognising external functions like YEARFRAC and ISEVEN (using NameXPtg), via LinkTable support 44504 - 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 - Fixed number conversion inconsistencies in many functions, and improved RefEval 44508 - Fix formula evaluation with evaluateInCell on boolean formulas 44510 - Fix how DVALRecord works with dropdowns 44495 - Handle named cell ranges in formulas that have lower case parts 44491 - Don't have the new-style "HPSF properties are always available" affect the old-style use of HPSF alongside HSSF 44471 - Crystal Reports generates files with short StyleRecords, which isn't allowed in the spec. Work around this 44450 - Support for Lookup, HLookup and VLookup functions 44449 - Avoid getting confused when two sheets have shared formulas for the same areas, and when the shared formula is set incorrectly 44366 - 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 - Support for the Offset function 38921 - Have HSSFPalette.findSimilar() work properly 44456 - Fix the contrib SViewer / SViewerPanel to not fail on sheets with missing rows 44403 - Further support for unusual, but valid, arguments to the Mid function 44410 - Support for whole-column ranges, such as C:C, in formula strings and the formula evaluator 44421 - Update Match function to properly support Area references 44417 - Improved handling of references for the need to quote the sheet name for some formulas, but not when fetching a sheet by name 44413 - Fix for circular references in INDEX, OFFSET, VLOOKUP formulas, where a cell is actually allowed to reference itself 44403 - Fix for Mid function handling its arguments wrong 44364 - Support for Match, NA and SumProduct functions, as well as initial function error support 44375 - 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 - 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 - Have HSSFDateUtil.isADateFormat recognize more formats as being dates 37923 - Support for Excel hyperlinks Implement hashCode() and equals(obj) on HSSFFont and HSSFCellStyle 44345 - Implement CountA, CountIf, Index, Rows and Columns functions 44336 - Properly escape sheet names as required when figuring out the text of formulas 44326 - Improvements to how SystemOutLogger and CommonsLogger log messages with exceptions, and avoid an infinite loop with certain log messages with exceptions 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 44297 - IntPtg must operate with unsigned short. Reading signed short results in incorrect formula calculation 44296 - Fix for reading slide background images 44293 - Avoid swapping AreaPtgs from relative to absolute 44292 - Correctly process the last paragraph in a word file 44254 - Avoid some unread byte warnings, and properly understand DVALRecord Add another formula evaluation method, evaluateFormulaCell(cell), which will re-calculate the value for a formula, without affecting the formula itself. 41726 - Fix how we handle signed cell offsets in relative areas and references 44233 - Support for getting and setting a flag on the sheet, which tells excel to re-calculate all formulas on it at next reload 44201 - Enable cloning of sheets with data validation rules 44200 - Enable cloning of sheets with notes 43008 - Add a moveCell method to HSSFRow, and deprecate setCellNum(), which didn't update things properly 43058 - Support setting row grouping on files from CR IX, which lack GutsRecords 31795 - Support cloning of sheets with certain drawing objects on them 43902 - Don't consider merged regions when auto-sizing columns 42464 - Avoid "Expected ExpPtg to be converted from Shared to Non-Shared Formula" on large, formula heavy worksheets 42033 - Add support for named ranges with unicode names 34023 - When shifting rows, update formulas on that sheet to point to the new location of those rows Support getting all the cells referenced by an AreaReference, not just the corner ones 43510 - Add support for named ranges in formulas, including non-contiguous named ranges 43937 - Add support for hiding and un-hiding sheets, and checking their current hidden status 44167 - Fix for non-contiguous named ranges 44070 - Fix for shifting comments when shifting rows Support for tables in HSLF 43781 - Fix for extracting text from TextBoxes HSLF in Improve JavaDocs relating to hssf font and fill colourings 44095, 44097, 44099 - [PATCH] Support for Mid, Replace and Substitute excel functions 44055 - [PATCH] Support for getting the from field from HSMF messages 43551 - [PATCH] Support for 1904 date windowing in HSSF (previously only supported 1900 date windowing) 41064 - [PATCH] Support for String continue records 27511 - [PATCH] Support for data validation, via DVRecord and DVALRecord 43877 and 39512 - Fix for handling mixed OBJ and CONTINUE records. 43807 - Throw an IllegalArgumentException if asked to create a merged region with invalid columns or rows, rather than writing out a corrupt file 43837 - [PATCH] Support for unicode NameRecords 43721 - [PATCH] Support for Chart Title Format records 42794 - [PATCH] Fix for BOF records from things like Access 43648 - Fix for IntPtg and short vs int 43751 - [PATCH] - Fix for handling rotated text in HSSFSheet.autoSizeColumn Include an Excel text extractor, and put all existing text extractors under a common superclass Improvements to the LZW compression engine used by HDGF HSSFPicture.resize() - a handy method to reset a picture to its original width and height Add a getSheetIndex(HSSFSheet) method to HSSFWorkbook, and allow a HSSFSheet to get at its parent HSSFWorkbook Move POIDocument out of Scratchpad, and update HSSFWorkbook to use it 43399 - [PATCH] - Fix for Cell References for rows > 32678 43410 - [PATCH] - Improved Formula Parser support for numbers and ranges When writing HSLF files out, optionally preserve all OLE2 nodes (default is just the HSLF related nodes) 43323 - [PATCH] - Support for adding Pictures to ShapeGroups in HSLF. 43222 - [PATCH] - Support for getting OLE object data from HSSFWorkbook. 43247 - [PATCH] - Support for getting OLE object data from slideshows. 43125 - [PATCH] - Support for reading EMF, WMF and PICT images via HSSFWorkbook.getAllPictures() 43088 - [PATCH] - Fix for reading files with long cell comments and text boxes 42844 - [PATCH] - Fix for the EventUserModel and records that aren't immediately followed by their ContinueRecords 43055 - [PATCH] - Fix for saving Crystal Reports xls files when preserving nodes 43116 - [PATCH] - Fix for Escher layer handling of embeded OLE2 documents 43108 - [PATCH] - Where permissions deny fetching System Properties, use sensible defaults 43093 - [PATCH] - Fix formula evaluator support for Area3D references to other sheets Improvements to HSSFDateUtils.isADateFormat, and have HSSFDateUtil.isCellDateFormatted use this 42999 - [PATCH] - Fix for HSSFPatriarch positioning problems Support for write-protecting a HSSF workbook Support for querying, setting and un-setting protection on sheets in a HSSF workbook Initial HSMF (outlook) support Tidy up the javadocs Administrative updates to the Maven POMs, and the release artificat build process 23951 - [PATCH] Fix for HSSF setSheetOrder and tab names 42524 - [PATCH] Better HSLF support for problem shape groups 42520 - [PATCH] Better HSLF support for corrupt picture records Initial support for a "missing record aware" HSSF event model Additional HSLF support for Title and Slide Master Sheets 42474 - [PATCH] Improved HSLF note to slide matching, and a NPE 42481 - [PATCH] Tweak some HSLF exceptions, to make it clearer what you're catching 42667 - [PATCH] Fix for HSLF writing of files with tables Improved way of detecting HSSF cells that contain dates, isADateFormat Initial, read-only support for Visio documents, as HDGF 39977 - [PATCH] Fix POM for Maven users 38976 - [PATCH] Add createPicture to HSSFShapeGroup Detect Office 2007 XML documents, and throw a meaningful exception Additional HSLF support for PowerPoint Initial support for HWPF image extraction Additional HSLF support for PowerPoint HSSF Formula support Additional HSLF support for PowerPoint 39389 - [PATCH] Extended Ascii support for WingDings Bugzilla Bug 29976 [PATCH] HSSF hyperlink formula size problem Image writing support HSLF - Initial PowerPoint support Outlining support 27574 - [PATCH] HSSFDateUtil.getExcelDate() is one hour off when DST changes 26465 - [PATCH] wrong lastrow entry 28203 - [PATCH] Unable to open read-write excel file including forms Add support for the Escher file format 27005 java.lang.IndexOutOfBoundsException during Workbook.cloneSheet() No changes Bug 25695 - HSSFCell.getStringCellValue() on cell which has string formula will return swap bye unicode characters. Updated website for upcoming release Formula Parser fixes with tests, by Peter M Murray Bug 25457 Fixed cloning merge regions The cloned reference for merged cells did not create a new collection, so deletes cascaded to the original. Fix to 24519 call to getCustomPalette() from a newly created workbook now works Fix supplied for bug 24397 where some compilation got ambiguous classes. Explicitly imports the classes. Patch supplied by Jean-Pierre Paris. 12561 (Min) HSSFWorkbook throws Exceptions 12730 (Nor) values dont get copied to another sheet. 13224 (Maj) Exception thrown when cell has =Names call 13796 (Nor) Error Reading Formula Record (optimized if, external link) 13921 (Nor) Sheet name cannot exceed 31 characters and cannot contain : 14330 (Nor) Error reading FormulaRecord 14460 (Nor) Name in Formula - ArrayOutOfBoundsException 15228 (Cri) [Urgent] ArrayIndexoutofbounds Exception. POI - Version 1.8 16488 (Maj) Unable to open written spreadsheet in Excel, but can in Open 16559 (Nor) testCustomPalette.xls crashes Excel 97 16560 (Nor) testBoolErr.xls crashes Excel '97 17374 (Min) HSSFFont - BOLDWEIGHT_NORMAL 18800 (Maj) The sheet made by HSSFWorkbook#cloneSheet() doesn't work cor 18846 (Min) [PATCH][RFE]Refactor the transformation between byte array a 19599 (Min) java.lang.IllegalArgumentException 19961 (Nor) [PATCH] Sheet.getColumnWidth() returns wrong value 21066 (Blo) Can not modify a blank spreadsheet 21444 (Enh) [PATCH] Macro functions 21447 (Nor) [RFE]String Formula Cells 21674 (Enh) [PATCH] Documentation changes for @(Greater|Less|Not)EqualPt 21863 (Enh) [PATCH] build.xml fixes 22195 (Nor) [RFE] [PATCH] Support for Storage Class ID 22742 (Cri) Failed to create HSSFWorkbook! 22922 (Cri) HSSFSheet.shiftRows() throws java.lang.IndexOutOfBoundsExcep 22963 (Nor) org.apache.poi.hpsf.SummaryInformation.getEditTime() should 24149 (Maj) Error passing inputstream to POIFSFileSystem 21722 (Nor) [PATCH] Add a ProtectRecord to Sheets and give control over 9576 (Nor) [PATCH] DBCELL, INDEX EXTSST (was Acess 97 import) 13478 (Blo) [PATCH] [RFE] POIFS, RawDataBlock: Missing workaround for lo 14824 (Nor) Unable to modify empty sheets 12843 (Cri) [PATCH] Make POI handle chinese better 15353 (Nor) [RFE] creating a cell with a hyperlink 15375 (Blo) Post 1.5.1 POI causes spreadsheet to become unopenable. HPSF is now able to read properties which are given in the property set stream but which don't have a value ("variant" type VT_EMPTY). The getXXX() methods of the PropertySet class return null if their return type is a reference (like a string) or 0 if the return type is numeric. Details about the return types and about how to distinguish between a property value of zero and a property value that is not present can be found in the API documentation. Gridlines can now be turned on and off NamePTG refactoring/fixes minor fixes to ExternSheet and formula strings Sheet comparisons now ignore case A nasty concurrency problem has been fixed. Any users working in a multithreaded environment should seriously consider upgrading to this release. The EXTSST record has been implemented. This record is used by excel for optimized reading of strings. When rows are shifted, the merged regions now move with them. If a row contains 2 merged cells, the resulting shifted row should have those cells merged as well. There were some issues when removing merged regions (specifically, removing all of them and then adding some more) and have been resolved. When a sheet contained shared formulas (when a formula is dragged across greater than 6 cells), the clone would fail. We now support cloning of sheets that contain this Excel optimization. Support added for reading formulas with UnaryPlus and UnaryMinus operators. Patch applied for deep cloning of worksheets was provided Patch applied to allow sheet reordering Added additional print area setting methods using row/column numbers HDF: Negative Array size fix Added argument pointers to support the IF formula Formulas: Added special character support for string literals, specifically for SUMIF formula support and addresses a bug as well BlockingInputStream committed to help ensure reads Fixed problem with NaN values differing from the investigated value from file reads in FormulaRecords Patch for getColumnWidth in HSSF Patch for dealing with mult-level numbered lists in HDF Due to named reference work, several named-ranged bugs were closed Patch applied to prevent sheet corruption after a template modification Shared Formulas now Supported Added GreaterEqual, LessEqual and NotEqual to Formula Parser Added GreaterThan and LessThan functionality to formulas Patches for i10n POI Build System Updated font names can now be null Support for zoom level Freeze and split pane support Row and column headers on printouts Custom Data Format Support Enhanced Unicode Support for Russian and Japanese Enhanced formula support including read-only for "optimized if" statements. Support for cloning objects Fixes for header/footer Spanish Documentation translations Support for preserving VBA macros Removed runtime dependency on commons logging. Formula support Removed depedency on commons logging. Now define poi.logging system property to enable logging to standard out. Fixed SST string handling so that spreadsheets with rich text or extended text will be read correctly. New project build. New project documentation system based on Cocoon. Package rename Various bug fixes Early stages of HSF development (not ready for development) Initial low level record support for charting (not complete) Created new event model Optimizations made to HSSF including aggregate records for values, rows, etc. predictive sizing, offset based writing (instead of lots of array copies) minor re-factoring and bug fixes. Minor documentation updates. Added DataFormat helper class and exposed set and get format on HSSFCellStyle Fixed column width apis (unit wise) and various javadoc on the subject Fix for Dimensions record (again)... (one of these days I'll write a unit test for this ;-p). Some optimization on sheet creation. Changes not recorded. Added MulBlank, Blank, ColInfo Added log4j facility and removed all sys.out type logging Added support for adding font's, styles and corresponding high level api for styling cells added support for changing row height, cell width and default row height/cell width. Added fixes for internationalization (UTF-16 should work now from HSSFCell.setStringValue, etc when the encoding is set) added support for adding/removing and naming sheets. Bugfix release. We were throwing an exception when reading RKRecord objects. Got continuation records to work (read/write) Added various pre-support for formulas Massive API reorganization, repackaging. BiffViewer class added for validating HSSF & POI and/or HSSF Output. Better API support for modification. Added encoding flag to high and low level api to use utf-16 when needed (HSSFCell.setEncoding()) added read only support for Label records (which are reinterpreted as LabelSST when written) Broken continuation record implementation (oops) BiffViewer class added for validating HSSF & POI and/or HSSF Output. Support for read/write and modify. Read only support for MulRK records (converted to Number when writing)