JExcelApi Change History

Version 2.6.6 (Oct 2007)

Fixed a bug when removing a named range so that it deletes it from all places where it is stored
Added in Peter's patch for supporting the CHOOSE function
Defaulted Colour.UNKNOWN to BLACK when setting a cell border. This fixes the bug where it was not possible to apply formatting from Excel when JXL had generated a cell with borders
Included the active sheet in the WindowRecord. This allows you to open directly to the active sheet
If the print setup record has not been initialised, then don't copy fields such as orientation or print copies from the soruce setup - just use the SheetSettings defaults instead. This fixes the problem where the number of copies was some wildly erratic number
Added a jxl.temporaryfileduringwritedirectory setting so that the location of the tempoary files can be specified. Explicitly deleted the temporary file upon completion of the process since if the process was running continuously loads of these temporary files could be hanging around on the file system

Version 2.6.5 (Sept 2007)

Fixed a bug to allow more than one conditional format per cell
Adjusted the cells referenced by named blocks when inserting and deleting rows
Added a synchronised block when initialising the workbook to prevent race conditions in multi-threaded environments
Migrated formula parsing to the JFlex (rather than JLex) for performance reasons. This is a GPL product - see notice on main page of the website
When writing out a file, it is now possible to write out a temporary file, rather than generate the whole thing in memory. This feature is accessible via the WorkboodSettings bean (useTemporaryFileDuringWrite) or the system property jxl.usetemporaryfileduringwrite
Set the atan function to have two arguments
Supported the copying of WritableSheets within a Workbook, as well as read only ones (this was throwing a ClassCastException)
Lists in drop downs can only be a maximum of 256 characters. If this length is exceeded truncated the string and presented a warning
Added a non-documented workaround in order to resolve a bug in some version of the JVM not recognising the character encoding "UnicodeLittle"

Version 2.6.4 (May 2007)

Fixed a problem when setting the default row height
Added support for Print Titles functionality
When setting a Hyperlink on an existing label, overlay the HyperlinkFont onto the existing cell format, thus preserving the original formatting
Fixed a small bug with ATAN2 formula function
Handled non-recognizable names in the Print_Area built in name
Excel starts writing CONTINUE records instead of DRAWING records after 60-odd comments, so had to detect the CONTINUE record and forcibly convert it into a DRAWING record
Attempted to include support for autofiltering, but was unable to get it to work. Included the code, but disabled the feature by default (use -Djxl.autofilter property or the WorkbookSettings bean to enable it if you want to investigate the problem)

Version 2.6.3 (February 2007)

Preserved conditional formatting when copying files.
Overrode the setRowView to take a CellView object, so the cell format could be specified as well as the height. Deprecated the existing methods
Attempted to preserve autofiltering when copying, but couldn't get it to work. The code is present, but disabled by default - if anyone wants a go at enabling the code can be enabled using the WorkbookSettings bean or by setting the System property jxl.autofilter to true.
Handled the double unary operator (such as -- or ++) within formulas
Presented a warning when importing sheets if the cell contains a formula that references another sheet in the source workbook
When no column width is specified, the default value from getColumnView is returned in 256ths of character (rather than whole characters)
Altered the feature so that you can modify a URL for a hyperlink on any type of cell, not just a label. If the text of the cell matches the hyperlink destination, then the text is updated along with the URL
Used a java.text.DecimalFormat instead of a Double.toString when parsing data validations
Added support for the MemArea token 0x26 in formulas
Added the facility to set the image anchor properties, which controls an image's behaviour when the cells around it are moved or resized
Included support for setting a print area on a sheet
Tweaked the lexical rules to allow names to have underscores in them

Version 2.6.2 (October 2006)

In data validations, formulas are treated as shared formulas, so had to handle this
Fixed a bug when resizing sheets due to incorrectly set Dimension records
Handled biff7 Window2 records
In the event of something going wrong with the drawing data and the drawingNum exceeding the number of SpContainers, write out a warning, disable the drawings and continu
Allowed named ranges to be specified for data validation
Fixed a couple of bugs in the addNameArea() method
Added support for error constants in formulas
When importing a sheet, handled the case where there are no drawings in the workbook we are importing to
When importing a sheet, handled the default row format
When importing a sheet, imported the relevant name ranges along with it

Version 2.6.1 (September 2006)

When reading in headers/footers, handled the case where the format string doesn't contain any alignment tags
If a cell is read in which exceeds the boundaries defined in the Dimension record, then the sheet is resized and the cells added (prior to this fix a warning would be displayed and the cell discarded)
Fixed the copyTo method when copying cells with data validation
Added the method Workbook.importSheet to import a sheet from another readable workbook (so you can merge spreadsheets together). Unfortunately, charts are not yet supported with this mechanism
Enabled the SEARCH function when parsing formulas
Used Date.SHORT and Date.MEDIUM within the built in formats, which should pick up the Locale specific date formats
Added the ability to remove a named range
Did a deep copy of the column formats on the copySheet method (instead of just passing across the reference)
Added the Used Attributes to the XF Record
Included the struckout flag in the Font copy constructor
Added support for column autosizing (although this will be very processor intensive)
Added support for page break preview mode via the SheetSettings bean
Handled shared string formulas which evaluated to an empty string
More tinkering with sheet name rendering in formulas. Moved all the sheet name functionality for escaping apostrophes and adding quotes around the sheet name into WorkbookParser
Fixed a bug in the data validation where it was ignoring the DVAL record in certain circumstances
Fixed a bug in findCellByName so that it retrieves based on the external sheet index
Provided access to some of the image details, such native dimensions, resolution and an approximate calculation within Excel
Supplied a SharedBooleanFormulaRecord

Version 2.6 (April 2006)

Added support for data validation lists
Incorporated Martin's changes to improve display of sheet names in formulas
Fixed a bug in CellReferenceHelper which appended the sheet name twice
Added support for vertical page breaks
Changed the javadoc flags in build.xml to generate documentation for the deprecated functions
Retained addin functions during the copy process

Version 2.5.9 (December 2005)

Fixed a bug when processing row page breaks. Added an accessor so that this could be retrieved.
When reading Excel 95 sheets, handle the formatting of the value correctly when adding the dummy value to the copied sheet
Added the facility to retrieve a cell by its string reference eg. "Sheet 1!A5"
Fixed the start page number (for printing) feature
Added Adam's patch exposing struckout fonts
Added a null pointer check into WritableCellValue to check for null comments when inserting/removing rows and columms
Displayed a warning for the case where the small block depot was specified with a start block of -1
Fixed a bug in the property set reader, which when the desired property set had been found, kept on iterating and overwrote it
Modified CellReferenceHelper to handle apostrophes in sheet names so that the sheet name "d'artagnan" will become "'d''artagnan'" when JXL reads it in a formula
Included a check in EscherContainer.getData to initialise the object if it wasn't already
Incorporated Ulf's performance improvements
Added RefErr and Union tokens to the formula parser
Incorporated stylistic improvements contributed by Kevin (ordering of import statements, unnecessary casts, unused local variables etc)

Version 2.5.8 (October 2005)

Added the facility to specify unchecked number formats. This helps when it comes to specify complex formats and currency accounting formats
Handled the case where there are less than the minimum expected number of XF records
When copying writable sheets, added an overload which used the cell's deep copy (so that the comments and other cell features would be added to the duplicate sheet correctly)
Added support for fraction number formats
Modified the getContents methods for shared formulas to display the string version of the error code, rather than just the number. Also returned empty strings for NaN values
Added the ability for cell ranges in formulas
If the small block depot is empty (but non-null) in a compound, then don't write out any small block chains. This causes a corrupt file and typically an ArrayIndexOutOfBoundsException
Jiggled around with property sets so that it only took the top level RootEntry. This was failing if the spreadsheet contained attachments. Only take the standard sets from the top level root entry
Modified the retrieve for sp container based upon the drawing number to handle nested spgr Escher records
Altered the rounding priority when calculating the number of milliseconds in a day due to a feature of Excel (contributed by Jurgen)
Included Adam's fix for when an SST continue record starts with an empty string
Images were being added incorrectly if a chart was already present. Recalculated the numBlips values from the BStoreContainer rather using drawings saved field in the Dgg record
Handled the case where the property set names were too long. This no longer crashes on read, but the file won't copy properly
Handled in memory access to getContents() by initializing the format info within copied instances of NumberRecord
Introduced a new workbook system property, jxl.nomergedcellchecks, which doesn't performe any intersection or range checking when writing out the sheet
Exposed the manual formula calculation and the recalculate formulas on save options in the SheetSettings bean

Version 2.5.7 (July 2005)

Handled variable arg functions which have zero parameters, such as row() and column()
Fixed WritableHyperlink so that it would handle file links (in particular file links located on a different drive letter)
Made XFRecord handle uninitialized records, and enhanced the equals() method for Font and Format to allow better copying between sheets
Detected a corrupt biff file format to throw an exception, rather than hanging in an endless loop
When writing a sheet, added to check to stop the addition of a null WorkspaceOptions object
Ignored the type object type MSOFFICDRAWING (as distinct from PICTURE) when reading/copying spreadsheets with pictures in them
Ignored, and warned, when processing charts on non biff8 workbooks
Display a warning when standard property sets aren't present in the original sheet
Display a warning about spurious block chains the small block stream
Fixed a bug when copying dates which consist of just a time - one day was subtracted from the value
Applied contributed fix for copying cell borders with colours
Added the ability to remove a comment from a cell
Applied Adam's patch to add support for horizontal/vertical centring when printing

Version 2.5.6 (June 2005)

Handled pattern types more accurately inside the cell formatting record
Made the built in number format symbols locale dependent. This is used in the various getContents() methods
Set the number format correctly on SharedNumberFormula records
Rejigged the various tests in jxl.read.biff.DateRecord so that the isTime() method behaved correctly (spotted by Jurgen)
Fixed a null pointer exception on the isFirst() call when writing out spreadsheets from scratch which contain drawings
Extended the try block in common.Logger to handle security exceptions if the user isn't allowed to access system properties
Removed a statically initialized cell format from setColumnView
Altered the lexical rules to allow the full unicode character set
Copied functions.properties to functions_en.properties
Added various catch blocks so that it was able to copy complex excel 95 workbooks at least without crashing
Included a fix (from Jacky) for some MACOS sheets, which didn't have a Root Entry in the compound file
Included the complete range of paper sizes (contributed by Adam)
Added support for the REPT function. Added token 0x63 and 0x6c to the formula token list

Version 2.5.5 (May 2005)

Added more generic handling for continuation records, and applied this to Supbook
Added a check to prevent an empty cell being added to a writable sheet (can occur in cases of deep copy)
Displayed some warnings in the case of malformed comment records
Handled the case where the format index of the read sheet is a bizarre number
Fixed jxl.write.biff.WritableFormattingRecords so that it initializes the common styles from the Workbook instance clones rather than the statically declared formats. These statically declared formats should now never be initialized
Preserved the country code (language and regional settings) and enabled to copy it between worksheets
Allowed the manipulating of the size of the comment text box via the API
Reintroduced the methods to add named ranges to the sheet (which got lost in the 2.5.4 release)
When copying a sheet, add an empty cell if it has formatting
Added support for external cell references within formulas
Ignored PLS records for Excel 95 records sheets
Raised a warning if the column number exceeds 256
Handled the situation whereby drawing records appear in a different order in the biff file compared to the actual sheet
Updated the DrawingGroup record after the workbook copy so it could pick up any modified fields in the read DrawingGroup
Checked for the drawings disabled setting before copying charts
Handled spurious client text box records on other types of form object (not just Comments)
Handled the case where the only modified drawings are charts

Version 2.5.4 (April 2005)

Checked for the nodrawings property being set when reading in a note biff record
Ignored the "frozenNotSplit" option when detecting split panes in the Window2 record
Included token codes 0x69 and 0x6d in formula parsing
Handled the insertion/deletion of rows/columns for the "Attribute" record in formulas (specifically the IF function)
Modified the write demo to force the writing of dates using a GMT timezone (no change to the actual date handling itself)
Added comment support for additional cell types (NumberValue and DateRecord)
Included support for adding named cells and ranges
Made sure the default fonts and cell formats were initialized from the Workbook's internal clones rather than the statically declared convenience accessors. This should alleviate some multithreading problems which people are seeing
Handled the condition where unsupported drawing types appear before the supported drawing types - the drawing data wasn't being added to the main stream, so the drawing number was out of sync with the data
Simplified some of the code where it transforms from an ArrayList of Objects into a typed array

Version 2.5.3 (February 2005)

Added a comment to a blank cell (with a warning)

Modified the detection of the default row height changing (which allows cell wrapping to work)
Added "lookup" function to Functions.java
Incorporated the ability to add a distinct description for file hyperlinks
Handled text descriptions within hyperlinks
Fixed a bug when transferring the x/y co-ordinates within the ClientAnchor record to columns and rows
Fixed a bug when writing unmodified comments to a spreadsheet copy - the ClientTextBox record was being written twice

Version 2.5.2 (December 2004)

Fixed (again) the case where a sheet consists of just a chart. This bug was re-introduced during the re-working of the image handling routine
Added support for cell comments
Added an accessor to retrieve the RGB values for a particular colour where it has been changed in the palette
Incorporated Adam's fix for handling hidden column views
Added accessors so that image information can be accessed from readable, as well as writable, sheets
Handled non-null but zero length Header/Footer strings
Fixed a bug when calculating the big block chains when the sheet contains macros
Warned when trying to read an extern sheet in Excel 95 (biff 7) format
Incorporated claudiu's contributed fixes for workbook defined names
Handled the Excel 95 version of the horizantal page breaks record
Initialized the type field in Drawing when creating from a byte[]
No longer selects the first sheet by default. Added the facility within the api to set and deselect various sheets
Corrected the behaviour within DefaultRowHeightRecord (contributed by Ulf)
Deprecated the SheetSettings.setSelected() in favour of SheetSettings.setSelected(boolean) to enable deselection of sheets. Allowed client programs to select sheets other than the first one
Modified the formula lexical analyzer to allow "." in function names
Added support for cell format indentation (contributed by Simon David)
Added a command line option to ignore blank cells
Changed the sheet writer to write out hyperlinks towards the end of the sheet BOF, rather than at the beginning. This allows OpenOffice to read JXL generated hyperlinks
Added +/- 45 degrees options for the cell orientation
Added an equals and a hashCode method to jxl.write.biff.ColumnInfoRecord
Displayed a warning when the observed dimensions on the sheet exceed those declared in the dimension record

Version 2.5.1 (November 2004)

Merged in changed from version 2.4.5, which had somehow got lost

Version 2.5 (November 2004)

Preserved macros when copying
Incorporated modifications from jxl.patch contributed by Mubashir Kazia
Added a setting for no drawings on the WorkbookSettings bean
Fixed a bug when reading in multiple images from a worksheet
Checked that the row number is less than the available number of rows when retrieving the row formatting data (because some office programs add additional rows - contributed by MG)
Validated the sheet name when it is added to the spreadsheet (thanks to Carsten for spotting this)
Fixed a bug in the calculation for the length of the CONTINUE records

Version 2.4.5 (September 2004)

Removed Boolean.toString optimization as this is only 1.4 compatible
Did some more manipulation with function parameter ordering.
Changed the parameter setting for the ROWS and COUNTBLANK functions to 1
Supported Microsoft UNC formats when generating hyperlinks
Fixed a bug in the writable CompoundFile to do with the calculation of the number of blocks required to write the Big Block Depot. This caused the OLE format to be written incorrectly for very large spreadsheets (>50Mb)
Added an overload to WritableHyperlink to take a string description alongside the URL. Also verified that the mailto: form of URL functioned OK
Handled the rationalization of the ALRUNS biff record when copying charts
Handled drawing types of type "Microsoft Office Drawing"
Filtered some spurious characters out of the date format
Handled the cell border colours as a special case. Excel wasn't letting you format cells with borders on copied sheets
Added a setDrawingsDisabled accessor to WorkbookSettings
Added an option bit when writing out the default row height record which indicates whether or not the default row height has been changed
Implemented a proper hashCode() method on XFRecord
Handled empty strings in string formulas
Handled built in names

Version 2.4.4 (July 2004)

Made writable workbooks more threadsafe by cloning common formats and binding them to the workbook instance instead of referencing them statically
Handled the case in shared formulas where the template formula was not present
Handled null number/date formats when cloning formats between workbooks
Fixed a small bug in the equals() method of XFRecord
Fixed some minor performance issues
Revisited the operand ordering in formulas, in particular the IF function when it forms part of shared formula
Exposed the workbook's character set encoding on the WorkbookSettings bean
Fixed a bug in DateFormulaRecord so that getType() returned DATE_FORMULA instead of NUMBER_FORMULA
Renamed src/jxl/write/biff/ReadErrorFormulaCell.java so that the file name matched the class name inside
Added a couple of overloads to CellReferenceHelper so that absolute cell references were returned with a '$' symbol

Version 2.4.3 (June 2004)

Added a method getSheetNames to the workbook object
Added the "mod" function into the list
Incorporated Eric Jung's HeaderFooter bean to allow more sophisticated formatting for header and footers. Relocated this functionalit to the SheetSettings beans
Took account of the drawings disabled property when reading, as well as writing sheets
Treated SUMPRODUCT as a special case when handling writing out the Area token values
Allowed internal hyperlinks to successfully link to sheets with spaces or apostrophes in their name
Handled the case where no file name is specified for an image (normally occurs when the image was pasted into the page)
Handled the case where a drawing has an OBJ record but no associated MSODRAWING record
Handled the drawing case where the drawing is linked rather than embedded into the excel file
Fixed a bug when parsing SharedFormula functions - the operands were being copied in the wrong order. Also handled the 1-based index in NameRange
Checked for non-relative cell references in formula ranges
Updated the supbook record when a sheet is added/removed (contributed by Carlos)
Handled invalid parent formats inside the XFRecord
Changed the default border colour to PALETTE_BLACK instead of BLACK (thanks to Jon for this)
Added the ability to parse the boolean literals TRUE and FALSE to the lexical analyser

Version 2.4.2 (April 2004)

Added a method to get the images byte data from a spreadsheet
Overloaded the constructor of WritableImage to take a byte[]
Fixed a bug in the drawing package to handle the case where there are no MsoDrawingRecord or ObjRecords. This can occur if the the workbook contains sheets which have nothing but a chart on them
Added support for coloured borders (contributed by Jon Priddey)
Added a method to the API to get the names of all named items in the workbook
Fixed the number of arguments expected for the ROUNDUP/ROUNDDOWN functions
Added a couple of methods on the CellReferenceHelper to include the sheet name on the cell reference
Made some fixes to handle named ranges that span multiple sheets
Fixed a bug in the hyperlink record which occurred when the option byte was 0

Version 2.4.1 (March 2004)

Added a method to CellReferenceHelper to get a column letter from the 0-based row index
Fixed the null pointer exception when calling CellValue.isHidden method on worksheets where nothing was hidden
Added a hidden cell style to WritableWorkbook
Preserved the formula type (eg. number, string) when copying formulas and presented accessors to these from the writable api
Made a change to the handling of row/column removal so that removing the first row/column of an Area record does not alter the beginning of the area, only the end of it
Added an isLocked() method to CellFormat to determine whether the cell is locked
Deprecated the dimension attribute on CellView in favour of a size attribute, which uses the Excel native units of 256 points per character
Allowed cell ranges which take a function as one of the ranges, such as INDIRECT, ADDRESS etc
Altered the cell range token to use 0x25 instead of 0x65 so that COUNTIFs and SUMIFs work
Added function names in Danish (contributed by Stine)
Added a not equals operator (<>) into the formula lexical analyser

Version 2.4 (February 2004)

Added support for images. All images are preserved when copying, but currently only images in PNG format may be added to a spreadsheet
Eric Jung contributed some code to use jakarta commons logging. As this requires extra libraries this facility is not included by default (stderr and stdout still remain default behaviour) but by changing a couple of switches in a configuration file, JExcelApi can be recompiled to use the logging utility of choice. See technotes for details
Made localeFunctionNames an instance variable

Version 2.3.14 (December 2003)

Added a warning when reading the standard compound file format if the property storage size is exceeded before the end of the block chain is reached
Fixed yet another bug with the hyperlink record
Added findByName support to the writable side of things (currently these methods only work on the workbook that was read in)
Ignored the case of the format string when testing for a date string
Fixed a bug in the CellValue.isHidden() method (contributed by William Adjei)
Preserved the environment specific print data when copying sheets (but was not able to copy across print areas for some reason)

Version 2.3.13 (November 2003)

Added a top level DateFormula type to complement the existing NumberFormula, StringFormula, ErrorFormula and BooleanFormula types
Replaced IF with WENN in the de function name resource bundle
Handled modifying formula cell references when a row or column is inserted or removed using the API
Fixed a bug in the HyperlinkRecord, allowing the client application proper access to the underlying url
Fixed an ArrayIndexOutOfBounds exception which occurred when removing columns
Tweaked the lexical analyzer to allow parentheses in sheet names when specifying cross reference formulas
Fixed an assertion failure to allow reading sheets where the number of merged cells spans two MERGED records
Fixed an ArrayIndexOutBoundsException which occurred when retrieving a cell from a named Range which exceeded the sheets boundary

Version 2.3.12 (October 2003)

Altered the RowRecord class so that values are get/set by the excel value all the time ie. in 1/20th of a point
Allowed multiple name records with the same name within the Workbook as Excel sometimes stores print settings as internal name records (thanks to Jim Cervantes for contributing this fix)
Incorporated Adam Caldwell's fix to stop excel skipping to the end of the file if it encounters something other than a worksheet or a chart
Incorporated an enhancement from Al Mantei which made the print headers and print grid lines features of excel a property in the SheetSettings bean
Incorporated Adam's fix to a long standing intermittent bug which resulted in Excel crashing on save. Great work from Adam!

Version 2.3.11 (September 2003)

Fixed a bug in the way file positions are handled when reverting shared string formulas
More tweaks to freeze frames to allow the cursor to move the worksheet
Added a deep copy function for writable cells

Version 2.3.10 (August 2003)

Changed the biff formula code when writing out to 0x6 (instead of 0x406) as this is what Excel writes
Fixed a bug in DateFormulaRecord when getting the actual formula (the NumberFormulaRecord had already lopped off the common information)
Fixed a bug in the way background colours were copied between sheets
When setting a cell format to be locked or hidden, updated the bit to specify that the cell format differs from its parent
Read the sheet selected flag
Added support for freezing panes
Added support for shrink to fit cell formats
Fixed a bug when copying sheets in the same WritableWorkbook containg formulas
Modified the way column widths are stored internally in order to enable more accurate worksheet copying

Version 2.3.9 (July 2003)

Fixed a bug in mapping of rationalized DisplayFormat objects
Added named cell support to formulas
Added support for fixed (non-relative) cell references in formulas
Added an accesor to NumberCell to get the java NumberFormat used to format the cell
Handled empty (null) strings when parsing formulas
Coded around some anomalous spreadsheet features to display warnings instead of discontinuing processing
Fixed a bug when preserving the horizontal page breaks

Version 2.3.8 (July 2003)

Restructured the MergedCells mechanism so that it can handle multiple MergedCellRecords if necssary
Added a text format to NumberFormats, which forces number to be interpreted as text
When adding borders, alignment etc to a cell format, also modify the options flag to indicate that this cell format differs from the parent format
Added support for 3d ranges in formulas
Fixed the case in EXTSST record where there are zero strings
Added a deep copy to WritableCellFormat to enable copying of cells between multiple sheets. This feature should be used with care, as it creates a new cell format for every cell, rather than re-using duplicate ones
In some Excel 95 the dimension record appears to have a biff code of zero. Put in a workaround that should handle this, albeit with a warning

Version 2.3.7 (July 2003)

Fixed a bug which caused a crash when interpreting the =NOW() function
Incorporated Adam's fix for specifying the zoom factor on a sheet
Added support for showing/hiding grid lines and zero values
Incorporated Lyle's improved IEEE double processor
Incorporated a proper implementation of the EXTSST record, which allows MS Access to correctly import files generated by JExcelapi. This functionality was contributed by Guenther Grau (email jexcelapi@grau.net)
Removed the call to close from jxl.write.CompoundFile, as it closed the stream unconditionally. Flushing and closure is now handled from jxl.write.biff.File (thanks again to Guenther for spotting this)
Fixed a bug inside the shared string table when writing extremely long strings (which was causing a problem with Excel 2000
This release also incorporates a few other bug fixes (some of which were contributed). Unfortunately I lost a record of what the updates were (although not the updates themselves) when my computer blew up. Apologies to those contributors whom I cannot acknowledge.

Version 2.3.6 (May 2003)

Use the file.encoding system property to get the default encoding
Added a public factory method to enable the creation of new font names
Preserved the hidden status of columns during copying
Added the facility to alter the RGB value of a colour on the palette
Added support for struckout and outline fonts

Version 2.3.5 (April 2003)

Fixed the initialization of column info records when reading sheets
Fixed the Excel 2000 crash-on-save error. This was due to incomplete copying of XF records
Added support to get the column widths and row heights

Version 2.3.4 (March 2003)

Modified one of the built in date formats (index 0x0e)
Removed the old StringHelper method. All calls to get String now require the WorkbookSettings bean so it can access the character endcoding
Fixed a rationalization bug when copying cell formulas between sheets
Added support for encoded filenames to the SupbookRecord
Fixed a bug when handling zero argument functions. Also added support for Boolean TRUE and FALSE literals
Added a password protection facility to individual sheets
Do not write out the column info records with index >= 0x100 - they cause excel to crash

Version 2.3.3 (February 2003)

Added support for the = unary operator
Did some performance tuning in jxl.read.biff, resulting in read performance improvements of 30%. Thanks to Harald for suggesting this.
Enforced the en_EN locale when writing out the sample spreadsheet, as other locales were not able to parse the formulas (which are written in English)
Changed the way column formats are copied between sheets in order to enable the preservation of column formats on empty (template) sheets
Exposed some methods of CellReferenceHelper via the public interface
Added Courier to the collection of available fonts
Fixed a bug when reading string formulas (handled the case where the length of the result is given as one byte instead of two)
Fixed a bug when reading biff7 Boundsheet records
Introduced an option to the WorkbookSettings bean to suppress warnings
Added the ability to specify a specific character encoding to the WorkbookSettings bean. This is useful if parsing workbooks from international sources

Version 2.3.2 (February 2003)

Removed redundant class jxl.biff.Format
Removed country identifier from ResourceBundles
Handled unary operators when parsing a string formula
Removed duplicate formats/XF record immediately prior to writing out the workbook
Added support for three dimensional cell references
Fixed a bug in CellReferenceHelper when trying to get the column letter for a cell > 26

Version 2.3.1 (January 2003)

Added more Colours to the jxl.format.Colour class (thanks javac_za)
Removed the static Config class and moved all functionality into the WorkbookSettings bean. (Also handled the java.lang.SecurityException which is occasionally thrown when trying to access system properties)
Fixed a bug in StringFormulaRecord which occurred when trying to read raw strings in a formula
Fixed a bug in the shared string table which occurred when a string spanned more than one continue records
Prefixed system properties with jxl eg. jxl.nogc etc
Added a configurable locale to the WorkbookSettings and system properties
Added multi-language support for excel function names

Version 2.3 (January 2003)

Added support for missing arg token record when reading formulas
Sometimes cell records can exceed the sheet boundaries eg. for MULBLANK records. Ignored any cells which exceed those boundaries
Added a biff dump utility to the demo suite. Invoke by using the -bd option on the command line and passing in the name of the excel file
Added a write access utility to the demo suite, which displays the name of the application which generated the excel file. Can be useful to see which version of JExcelApi wrote out the file. Invoke using -wa on the command line and passing in the name of the excel file
Enabled the copying across of any named records
Created a workbook settings bean which can be used to set configuration on a per-workbook basis as opposed to statically within a JVM, which has implications when JExcelApi is used from within a webserver
Created a sheet settings bean which stores the worksheet specific settings, such as protection and hidden flags, as well as page printer setup margins etc. This bean can be used to both retrieve detailed information from a spreadsheet read in, and to set said information on a generated spreadsheet
Added support for copying/specifying margins

Version 2.2.19 (December 2002)

Added a configurable system property "nogc" to disable garbage collection for use eg. when running JExcelApi from within a webserver
Made the public method WritableWorkbook.copySheet preserve chart information on the page
Preserved the print settings when copying sheets
Added some more colours to the Colour class
Fixed a bug when reading the horizontal page breaks, which was causing an IndexOutOfBoundsException
Reset the default date format when creating a new workbook. This prevents the date being presented as a raw number in second and subsequent workbook generation runs

Version 2.2.18 (November 2002)

Fixed a bug which occurred in the WritableSheet.removeRow method
Added preliminary support for charts - when copying a sheet with a chart in the chart information is preserved. This won't yet work if the sheet contains just the chart information

Version 2.2.17 (November 2002)

Skipped boundsheet records and BOFs which are not worksheet
Added support for specifying the paper size for printing purposes
Added a method Cell.isHidden()
Fixed a bug in the handling of shared IF formulas

Version 2.2.16 (November 2002)

Fixed a bug when parsing shared formulas - a shared formula can have a null template formula record
Fixed a bug when checking the borders for merged cells: if the cell is blank, then the format will be null, so can exit this method

Version 2.2.15 (November 2002)

Re-incorporated the full list of formula functions, which seem to have got lost somewhere
If a setColumnView is called for a column which already has column view information present, then the old view information is replaced with the new view information
Corrected the parameter list of the COUNTIF function

Version 2.2.14 (October 2002)

More fixes to handle the formatting of merged cells

Version 2.2.13 (October 2002)

Preserved page setup information, such as orientation, when copying spreadsheets

Version 2.2.12 (October 2002)

Handled merging of cells with borders
Fixed a small bug which occurred when removing rows/columns
Increased the number of function codes interpreted when reading formulas (thanks Mark)

Version 2.2.11 (October 2002)

Fixed a bug when adding custom formulas. Negative amounts can now include closing brackets.
Added support to add page headers and footers
Included the ability to preserve horizontal page breaks, and also to add them (but not remove them yet)

Version 2.2.10 (September 2002)

Made some changes to the way the IF function and external sheet references are handled when reading formulas.
Fixed a bug introduced in v2.2.9 when writing spreadsheets. Withdrew v2.2.9
Removed a spurious angle bracket that was produced when using the format XML demo

Version 2.2.9 (September 2002)

Handled the copying of Excel 95 cell formats

Version 2.2.8 (September 2002)

Handled external sheet references when reading formulas
Added methods to set the row height, and to preserve the row height when copying spreadsheets

Version 2.2.7 (August 2002)

Added support for merging many cells
Fixed a bug in CellReferenceHelper when converting columns that require multiple characters to represent them
The ROUND method was specified with the incorrect number of parameters.
When reading in parameter lists for functions, these are stored in the correct order
When adding formulas to a shared formula, fixed a bug when converting the row number (a byte value) to an integer value
Ignored all BOF sheet records which do not have a corresponding BOUNDSHEET record

Version 2.2.6 (August 2002)

Fixed another bug when adding a hyperlink across a range to an empty sheet

Version 2.2.5 (August 2002)

Made sheet names support Unicode characters
Made number formats records read/write in Unicode
Fixed a bug when adding Hyperlinks to an empty sheet

Version 2.2.4 (August 2002)

Fixed a bug with shared formulas (it was adding the base formula twice, resulting in an assertion failed)
The WritableWorkbook.close() method no longer closes the OutputStream - this is now the responsibility of the controlling application. The reason for this change is because some webservers will not correctly return a generated spreadsheet from a servlet if the response stream has been closed. (JExcelApi will still close the OutputStream if it is writing to a flat file.)
Added a thread interrupted facility when uploading a file, in case the user keeps hitting the keyboard whilst they are watching the little hourglass (thanks to Mike Smith)
Closed down the input stream in the event of an exception when reading a spreadsheet from a flat file (thanks to Steve Hahn)

Version 2.2.3 (July 2002)

Added support for Hyperlinks (URLs and local files only)
Fixed another minor bug in the insertColumn/insertRow methods
Fixed a bug when handling date shared formula records
Applied the cell's numberical format to number formulas
When clearing down a sheet, clear out all the sheet wide arrays, such as shared formulas, hyperlinks. This causes problems if the same sheet is read more than once
Fixed a bug which occurred when copying spreadsheets, to do with the way it handled the row and column count

Version 2.2.2 (July 2002)

Fixed a bug in the shared string table Continue Records when writing out large numbers of strings
Overloaded the DateTime class with "GMT" constructors to explicitly tell JExcelApi to ignore timezones when converting to Excel dates. See technical note
Fixed a bug in setColumnView to apply the column format to Dates in that column
Fixed a bug when deducing the maxColumn in jxl.write.biff.RowRecord

Version 2.2.1 (June 2002)

Fixed a bug when copying dates records between sheets - no need to take the time zone into account
Fixed a bug when inserting columns. Also moved the column view record to accommodate insertion/deletion of columns
Allowed for upper and lower case h/H when interpreting date formats
Fixed a bug allowing the API to handle hidden sheets properly
Fixed a silly little bug in CellReferenceHelper

Version 2.2 (June 2002)

Write out a shared string table instead of individual label records. This eliminates the 512 character restriction on strings for spreadsheets generated using the API.
Fixed a bug in the handling of column info records, so that the cell style is applied to the cells in the column, as well as the width specifications
Added the facility to specify text orientations as part of a cell's format
Fixed a bug in the handling of MULRK records, which resulted in incorrectly written large integer values

Version 2.1.5 (June 2002)

Added a public method to WritableSheet to copy individual sheets within a workbook.
Added the ability to read RSTRING records for backwards compatibility.

Version 2.1.4 (June 2002)

Fixed the cell display utility so that it display the column letters in the correct order for large columns (eg. display AK70 instead of KA70)
Large amounts of Format records cause Excel to crash, so put an internal check in place. When Excel's limit is reached, it displays a warning, and sets the cell format to be the default format

Version 2.1.3 (June 2002)

Added support for shared string formulas.
Truncated label cells in the API for string longer than 512 characters, since this can cause Excel to blow up
Added colour attributes to cells which specify borders. This allows users of generated spreadsheets to right click and apply formats to cells with borders

Version 2.1.2 (May 2002)

Fixed a bug for reading Excel 95 LABEL records (the workbook BOF has a different version identifier to sheet BOF)
Fixed a bug in the copying of shared formulas, where it needed to regenerate the actual formula tokens

Version 2.1.1 (May 2002)

Fixed a bug whereby shared formulas were not reading the calculated value of the formula

Version 2.1 (May 2002)

Added support for reading formula strings. Currently only the arithmetic formulas are supported in biff8 only
Made formatting information available by the read API. Added an additional option to the XML demo program to present this information
NOTE: As a result of making the formatting information public, it was necessary to repackage it in jxl.format. The old format classes and methods in jxl.write have been deprecated - please use the new ones
Fixed the RefreshAll record so that generated files load correctly in Excel 2000 (thanks Michael)
Added methods to insert and remove columns
Repackaged all demo related programs into a subpackage called demo
Provided support for copying blank cells, if they have an associated cell format. This often occurs is spreadsheets which act as a template.
Provided method bodies for getRow() and getColumn() in WritableWorksheet
Deprecated the method copy() on Worksheet. Copying a worksheet now occurs implicitly as part of the overloaded factory method createWorksheet, which takes in the Workbook parameter
Added set accessors onto Font to simplify the object creation process

Version 2.0.5 (April 2002)

Fixed a bug in getSheet() which never initialized the last sheet index (thanks Bret)
When reading named cells, made the sheet index reference the ExternSheet record before going directly to the sheet index

Version 2.0.4 (April 2002)

Fixed a bug in the way error and boolean formulas were copied
Modified the build mechanism to use ant instead of jmk

Version 2.0.3 (April 2002)

Fixed a bug in the addCell() method which occurred if you tried to add a cell at a position which exceeded the grow size of the array
Reset the initialize flag in the statically declared font and style records to allow multiple spreadsheets to be written from within the same Java process

Version 2.0.2 (April 2002)

Fixed a bug in the getColumn() method (the rows/column parameters were transposed)

Version 2.0.1 (March 2002)

Changed the Assert.assert method to be Assert.verify, to avoid name clashes for users of JDK 1.4
Modified the read method to account for the fact that some worksheets may contain a chart and nothing else.

Version 2.0 (March 2002)

Initial version, based on ExcelRead 1.6.13


Back to JExcelApi Home