- Fix: #377 AddRows() should not convert empty values to zeros when they are in a numeric typed query column
-
Enhancements
- #373 Allow datatype to be specified with addColumn()
- #374 Rename setCellValue() "type" argument to "datatype" for consistency
-
Maintenance -#375 Upgrade excel-streaming-reader to 5.0.2
- Maintenance -#372 Upgrade POI to 5.3.0, commons-csv to 1.11.0 and excel-streaming-reader to 4.4.0
-
Enhancements
- #369 Add moveSheet()
- #370 Add sheet position to sheetInfo() properties
-
Maintenance -#371 Upgrade excel-streaming-reader to 4.3.1
-
Breaking changes
- #325 Drop support for ACF2016
- #359 Library should default to returning cached cell formula values instead of always recalculating
-
Enhancements
- #358 Allow control of whether to return cached or freshly calculated formula values
- #354 Add getCellAddress() to return a cell's alphanumeric reference
- #364 Support integer range validation
- #356 Support date range validation
- #363 Add option to allow New() to default to creating an XLSX (XML) spreadsheet object
-
Enhancements -#346 Add writeCsv()
-
Fixes -#347/#348 Avoid Perl/Java regex engine incompatibilities
-
Maintenance -#349 Upgrade POI to 5.2.5 -#350 Upgrade excel-streaming-reader to 4.2.1
- #345 readCsv(): Commons CSV boolean options should default to true
-
Enhancements
- #343 Improve csvToQuery() performance
- #340 Add readCsv() for large file/advanced csv processing
- #336 Add parallelization option to queryToCsv()
-
Fixes
- #339 csvToQuery() ignores trim setting when reading from file
-
Maintenance
- #344 Upgrade excel-streaming-reader to 4.2.0
-
Maintenance
- #334 Upgrade POI to 5.2.4 and excel-streaming-reader to 4.1.2
- #324 Upgrade Commons CSV to 1.10.0
-
Enhancements
- #331 Allow custom date formats to be set on an instance post-init()
- #328 Improve exception message when setRowHeight() is used with a non-existent row
-
Enhancements
- #321 Add createJavaObject() to support creating POI and other objects from the bundled jars
- #323 Add basic support for conditional formatting
-
Fixes
- #322 Some values are not converted to hyperlinks when using URL datatype
- #320 Avoid cellStyle duplication when formatting cells from a struct over multiple calls
-
Enhancements
- #316 Support new override data types: url, email and file to auto-create hyperlinks when adding data
- #318 Allow the format argument of formatting methods to be a re-usable cellStyle object instead of a struct
-
Fixes
- #317 setCellHyperlink() should re-use a single cell style over multiple calls by default
-
Maintenance
- #319 Upgrade excel-streaming-reader to 4.0.5
- #313 queryToCsv() should not treat date strings in the data as date objects to be formatted
- #312 Move hosted files to forgebox, github is blocking download access preventing box install
- #311 Regression: csvToQuery() no longer works when file path is VFS
-
Enhancements
- #304 Improve csvToQuery() performance
- #308 Add option to return visible or raw value from getCellValue()
- #309 Add option to return visible values from read() and readLargeFile()
-
Fixes
- #306 Chainable read() method should return the data if format specified
- #307 getCellFormat() throws error if XLSX cellFont has no colour value
-
#310 Upgrade excel-streaming-reader to 4.0.4
- #301 DataValidation has incorrect values if pulled from a sheet name which includes a space
- Enhancements
- #300 Add support for creating DataValidation dropdowns
- #298 Upgrade POI to 5.2.3
- #299 Upgrade excel-streaming-reader to 4.0.2
- Enhancements
- #291 Speed improvement for getAllSheetFormulas()
- #293 Add includeHiddenRows option to read()
- #296 Add readLargeFile()
- #289 Prevent one-off OSGi bundle errors when the bundle version changes
- #290 Upgrade POI to 5.2.2
- #288 sheetInfo() should default to the currently active sheet, not the first
- #287 Upgrade POI to 5.2.1
-
Enhancements
- #286 Add sheetInfo() to return metadata for a specific sheet within a workbook
-
Fixes
- #283 Mismatched system/Lucee timezones causes read() to offset date values
- #285 read() should use the first visible sheet in the workbook if no sheet is specified, ignoring hidden sheets
- #282 Upgrade POI to 5.2.0
- Security Update
- #279 Upgrade log4j to 2.17.1
- #280 Fix: formatRows() errors if range specified is a single row
- Security Update
- #279 Upgrade log4j to 2.17.0
- Fixes
- #277 Date format initialization doesn't work in Lucee with full null support
- #278 Adding header/footer images throws error with null support enabled
- Security Update
- #276 Upgrade log4j to 2.16.0
-
Security Update
- #273 Upgrade log4j to 2.15.0
-
Enhancements
- #268 Allow row/column ranges specified for read(), deleteColumns(), deleteRows(), formatColumns() and formatRows() to be open-ended
- #274 Allow flushOsgiBundle() to flush a specified version
-
Fixes
- #272 Read() not importing trailing empty columns
-
Enhancements
- #266 Upgrade POI to 5.1.0
- #261 Update commons-csv to 1.9.0
-
Fixes
- #260 Chainable getCellComments() should return an array
- #262 Handle incorrect date value setting when Lucee timezone does not match system timezone
- #253 Fix autoSizeColumns not being applied to all columns when adding rows to streaming xlsx workbooks
- #263 Fix read() error if headerRow is specified and spreadsheet is empty
- #265 read( format="query" ) should auto-generate column names where too few column names are specified
-
Breaking changes
- Rename project "spreadsheet-cfml"
-
Enhancements
- #258 Add support for chainable operations on a workbook
- #257 Add getLastRowNumber()
- #254 Allow chaining of methods returning void
-
Fixes
- #259 Fix error with addSplitPane
- #256 Improve performance of autoSizeColumns on addRows() when data is an array
- Enhancements
- #251 Add makeColumnNamesSafe option to read() and csvToQuery()
- #252 Allow WriteToCSV to exclude the workbook's header row
-
Enhancements
- #248 Add autoSizeColumns option to
workbookFromQuery()
- #246 Add
isCsvOrTextFile
support for .tsv files
- #248 Add autoSizeColumns option to
-
Fixes
- #250 Multi-cell formatting methods throw invalid arguments exception if overwriteCurrentStyle is set to false
-
Enhancements
- #240 Add setActiveCell()
- #238 Add setRecalculateFormulasOnNextOpen()
-
Fixes
- #243 Handle null returned from getXSSFColor()
- #242 Ensure HeaderImageVML java is compiled for Java 1.8
- #237 AddColumn() with startColumn and insert=true replaces the existing column instead of inserting after it
- #236 Regression: getCellFormula should not error if cell is specified but doesn't exist
-
Enhancements
- #231 Add setCellHyperLink() and getCellHyperLink()
- #101 Add setHeaderImage() and setFooterImage()
-
Fixes
- #235 Fix missing semi-colon in setActiveSheetNameOrNumber()
- #233 Using "overwriteCurrentStyle=false" and a pre-built cellStyle with formatting functions causes the cellStyle to be ignored
- #232 Using "overwriteCurrentStyle=false" with formatting functions causes default cell style to be changed
- Enhancements
- #229 Allow read() and csvToQuery() to accept a default queryColumnType
- #228 Allow read() to accept columnNames as an array as well as a list
- #227 Allow column names to be specified when using csvToQuery()
- #226 Allow query column types to be specified or auto-detected when using csvToQuery()
- Enhancements
- #225 Allow query column types to be specified or auto-detected when reading a spreadsheet into a query
-
Enhancements
- #221 Add queryToCsv() and writeToCsv()
- #218 Add getPOIVersion()
-
Fixes
- #219 dumpPathToClass() doesn't include file path in OSGi
- #222 #223 Column/header names generated by csvToQuery() are in upper case in ACF
- #216 Upgrade POI to 5.0.0
- #217 In Lucee use OSGi to load java classes instead of JavaLoader
- Enhancements
- #212 Support CSV custom delimiters in read() and downloadCsvFromFile()
- Fixes
- #209 ACF2021: Class not found: org.apache.commons.io.output.ByteArrayOutputStream
- #208 ACF2021: Issue using includes in Testbox suites
- #206 Fix typo in downloadFileFromQuery()
-
Enhancements
- #204 Add public createCellStyle() method
-
Fixes
- #205 Fix and improve handling of tab delimited data handling in csvToQuery()
- #202 Bugfix for isHex regex
- Enhancements
- #201 Prevent ACF from treating "9a" or "9p" as a date/time value
- #200 When adding rows allow default data types to be overridden
- #199 Allow rows generated from queries to ignore the query column data types
- #198 Allow addColumn() to take data as an array
- #197 Add support for valid 6 character hexadecimal colors
-
Enhancements
- #190 Add getCellComments() as alias for getCellComment() with no row/column specified
- #188 Allow addAutoFilter to accept a row number instead of a cell range
- #187 Allow addAutoFilter to default to the first row
-
Fixes
- #194 setCellComment() with underline throws exception on ACF
- #193 Prevent setCellComment() throwing an exception on XLSX when unsupported styles are set
- #191 setCellComment() throws exception on XLSX
- #189 Row and column number values missing from getCellComment() structs when all returned from sheet
- #109 Write encryption doesn't work on ACF
-
Enhancements
- #186 Add option to formatting methods to preserve existing cell styles
- #184 Add support for DATETIME and DATETIME2 (MSSQL) database column types
-
Fixes
- #185 Time only values do not respect custom TIME format specifying fractions of a second
-
Enhancements
- #181 Add "INT" to query column formats cast as numeric
- #179 Provide a list of all predefined colours available to formatting methods
-
Fixes
- #182 addInfo() not working with Streaming XLSX
- #178 Color index lookup is using a deprecated enum class
- #175 Upgrade POI to 4.1.2
- #176 Upgrade Apache Commons CSV to 1.8
-
Enhancements
- #174 Add
getColumnWidth()
andgetColumnWidthInPixels()
- #174 Add
-
Fixes
- #173 Specifying a custom DATETIME date format mask seems to have no effect
- #172 In ACF query column case and order is not preserved
- #171 Using autoSizeColumns with a Streaming XLSX workbook causes an exception
- #170 Upgrade POI to 4.1.1
- #169 Improve handling of clearly non-date values which Lucee will parse as dates far in the future
- #168 Allow the active sheet's "fit to page" print options to be controlled
- #167 Add support for setting sheet print margins
- #164 Upgrade Apache Commons CSV to 1.6
- #166 Bug fix: autoSizeColumn - key [columnIndex] doesn't exist in argument scope
- #163 Upgrade POI to 4.1.0
- #162 Support decryption of encrypted binary (XLS) spreadsheets. Add support for decryption in ACF.
- DEPRECATED:
engineSupportsEncryption
environment key. UseengineSupportsWriteEncryption
- #160
includeQueryColumnNames
inaddRows()
produces invalid xlsx
- #159 Support array data argument for
addRow()
andaddRows()
- #157
addRows()
doesn't apply column offset to header row when usingincludeQueryColumnNames
- #156 Bug in
setActiveSheet()
.
-
Breaking changes
- #142 Upgrade POI to 4.0.1 which requires Java 8+
- By default, Lucee 5 now uses JavaLoader instead of
CreateObject
- #148 Remove the
engineSupportsDynamicClassLoading
variable completely, since it is meaningless - Remove Lucee 4.5 and ACF11 support: Lucee 5 and ACF2016 are the minimum supported versions
-
Enhancements
- #155 Add support for the SXSSF streaming XML format for writing large files
- #136 Upgrade Apache Commons CSV to version 1.5
- Improve
write()
outputstream locking. - Add
dumpPathToClass()
diagnostic tool - Separate encryption/decryption components no longer needed with POI 4
-
Fixes
- Various fixes to support POI 4.x
- #150 Rewrite xlsx encryption to ensure the encrypted stream is closed
- Use array
append()
BIF instead of javaadd()
- Fix failing
setCellValue()
test on ACF2016+ - #154 Using RGB triplet as a colour format with XLSX not working in ACF
- Fixes
- #153 Handling of hidden columns fails in ACF2016
- #152 Testbox should be specified as a CommandBox installation dev dependency
- Fixes
- #139 Cell type auto-detection throws error if boolean value is blank or null
- Fixes
- #138 Reading a spreadsheet with column header names containing commas into a query results in too many columns
- #134 Upgrade POI to 3.17
- Fixes
- #130 JavaLoader should not need
loadColdFusionClassPath
setting (add commons-codec jar to lib)
- #130 JavaLoader should not need
- Enhancements:
- #129 Add
getRowCount()
- #129 Add
- Fixes
- #128 Adding date query cells with blank values causes error
- Enhancements
- #125 Add
addAutofilter()
- #126 Add
addPageBreaks()
- #127 Add
addPrintGridlines()
andremovePrintGuidelines()
- #125 Add
- Fixes
- #124 Handle "indent" format values greater than 15 in xls
- #123 Underline value returned by
getCellFormat()
should be a descriptive string - Fix unreturned cellStyle when invalid underline format used.
- Enhancements
- #119 Add
getCellFormat()
and formatting tests - #104 Add
quoteprefixed
to cell formatting options - #121 Support "double", "single accounting" and "double accounting" underline formats
- #122 Add
hideRow()
,showRow()
andisRowHidden()
- Add
isColumnHidden()
and tests forhideColumn()
andshowColumn()
- #119 Add
- Fixes
- #120 Setting underline format on ACF fails
- #118 Upgrade POI to 3.16
- Enhancements:
- Rewrite cell data type handling
- #112 Allow data type to be specified when using
setCellValue()
- Add
getCellType()
- Fixes:
- #115: Don't auto-detect any incoming values as boolean: allow them to default to strings or numbers, unless a source query column type or data type parameter has set them as bit/boolean
- #116: Prevent certain definitely non-date values being detected as dates
- #117: Allow
csvToQuery()
to be called with positional arguments
- Enhancement: #110 Support populating a spreadsheet from CSV data:
- Add
workbookFromCsv()
- Add public method
csvToQuery()
for convenience
- Add
- Enhancement: #80 Provide option to use POI jars in the java class path instead of via JavaLoader
- Enhancement: #107 Remove the dependency on JavaLoader for Lucee 5 and load POI jars directly
- Enhancement: #108 Officially support ACF11+
- Enhancement: Add
getEnvironment()
method to return current environment details/settings
- Update bundled JavaLoader to 1.2
- Fix: #102 Fillpattern formatting not working.
- Fix: #103 Replace deprecated
cellstyle
setters. - Enhancement: #106 Allow a file path to be passed to the
info()
method instead of a workbook object
- Fix: #100 Replace deprecated 'boldweight' methods and constants with
getBold()
/setBold()
.
- Fix: Tweak argument handling of
setSheetPrintOrientation()
to catch errors.
- Enhancement: #99 Add
setSheetPrintOrientation()
.
- Enhancement: #98 Allow cell format color values to be specified in RBG triplets
- Fix: Refactor
buildCellStyle()
to improve performance and fix boolean issue with "bold".
- Enhancement: #97 Add
newXlsx()
andnewXls()
as aliases fornew( xmlFormat=true/false )
- Fix: #96 Fix error when adding image to xlsx (xml format) spreadsheet
- Fix #95 Change to
readBinary()
in 0.8.2 causes MS Excel to crash
- Enhancement: Improve performance of
readBinary()
by using java ByteBuffer. - Fix: Update JavaLoader to include post 1.1 release patches to fix #94
- Enhancement: #92 Catch formula errors when reading
- Enhancements:
- #90 Upgrade POI to 3.15
- #91 Allow an existing JavaLoader installation to be used instead of the bundled one.
- Fix #88 When reading a file, warn if the Excel format is too old for POI.
- Fix #87 Invalid color after moving from Lucee 4.5.3 to Lucee 5.0
- Fix #86 Zeros are being interpreted as boolean false by
addRow()
and other methods.
- Fix #85
AddRow()
causing "maximum number of cell styles was exceeded" error when inserting large number of rows including dates.
- Fix #84
formatColumn()
fails when workbook contains more than 4000 rows
- Fix
isSpreadsheetFile()
not working in ACF for non-spreadsheet files.
- Enhancements:
- #83 Add
isSpreadsheetFile()
andisSpreadsheetObject()
- #83 Add
- More ACF compatibility fixes
- Drop use of
this
scope for internal method calls - Drop unnecessary
ExpandPath()
when getting POI jar paths for JavaLoader - Another missing colon at EOL
- Drop use of
- Updates to test suite for case-sensitive filesystems
- More ACF compatibility fixes
- Move all private methods from includes to within the body of Spreadsheet.cfc
- Another missing colon at EOL
- Use compatible script syntax for downloads
- Variable name being used twice for different purposes
- Fixes (preventing use with ACF):
- Missing colons at EOL
- Throw attribute typo
- Enhancements:
- #76 Upgrade POI to 3.14
- #77 Add
getColumnCount()
- Better exception message when adding too many rows to a binary spreadsheet.
- Better exception message when
read()
src
file is not a spreadsheet. - Make final closing of java streams dependent on existence of stream variable to prevent embedded exceptions.
- Enhancements:
- #70 Support reading encrypted XML files (only) using supplied password
- Better file handling when encrypting files
- Enhancements:
- #73 Allow encryption algorithm to be specified when writing password protected workbooks
- Fixes:
- #71 and #72 Adjust tests to support TestBox 2.2
- Enhancements:
- #69 Add explicit
setReadOnly()
method for binary workbooks (only)
- #69 Add explicit
- Fixes:
- #68 Supplying a password to
write()
provides whole file encryption for XML spreadsheet files (only)
- #68 Supplying a password to
- Enhancements:
- #66 Add
setRepeatingColumns()
andsetRepeatingRows()
- #66 Add
- Enhancements:
- #65 Upgrade POI to 3.13.
- #64 Add
download()
function for an existing workbook object. - #63 Add
includeQueryColumnNames
option toAddRows()
.
- Improve performance of
read()
by using native Java concatenation instead of arrays which are slow in Lucee.
- REMOVED:
- #61 Support for font family and size with
read()
andincludeRichTextFormatting
when different from the cell's base font. Better to be consistent and not support these attributes anywhere so the expectation is clear.
- Enhancements:
- #61 Support font family and size with
read()
andincludeRichTextFormatting
when different from the cell's base font - Bug fixes:
- #60
includeRichTextFormatting
option inread()
results in empty span style if format not supported
- Enhancements:
- #57 Add
includeRichTextFormatting
option toread()
- Enhancements:
- #56 Add extra argument to
read()
to allow excluding hidden columns - #58 Add
hideColumn()
andshowColumn()
- Enhancements:
- #52 Add csv format support to
read()
- #55 Allow csv file to be downloaded from a spreadsheet file
- Enhancements:
- #43 Add html format support to
read()
. - #54 Allow default date formats to be overridden
- Bug fixes:
- #53 Fix incorrect formatter reference when evaluating formula cells.
- Enhancements:
- #44 Support reading specified row or column ranges
- #45 Support being able to specify the column names when reading a spreadsheet from file
- Bug fix:
- #51 Empty cells are skipped when reading a spreadsheet into a query.
- Upgrade POI to 3.12
- Enhancements:
- #47 Add
fillMergedCellsWithVisibleValue
option toread()
- #48 Add
setCellRangeValue()
- #49 Add
emptyInvisibleCells
option tomergeCells()
- #47 Add
- Bug fixes:
- Fix read() includeBlankRows=false option only suppressing null rows and not empty ones
- Missing var declarations
- Bug fix:
- POI Loader server variable name should be unique to the current library path
- Breaking changes
- Use "freeze" instead of "split" for argument names of addFreezePane
- Breaking changes
- #27 Drop
deleteSheet[Number]()
in favour ofremoveSheet[Number]()
- #27 Drop
- Bug fixes:
- #25 Font values not being applied
- #40 Ensure non-string data types (numeric, date, boolean) are respected when processing cells
- Enhancements:
- #17 Add
setActiveSheetNumber()
- #18 Add
formatRows()
- #19 Support reading sheets by name
- #20 Add
deleteRows()
- #21 Add
deleteColumn()
anddeleteColumns()
- #22 Add
shiftColumns()
- #23 Add
getCellValue()
andsetCellValue()
- #24 Add
formatColumn()
,formatColumns()
andformatCellRange()
- #23 Add
isBinaryFormat()
andisXmlFormat()
- #28 Add
mergeCells()
- #29 Add
addFreezePane()
andaddSplitPane()
- #30 Add
addInfo()
andinfo()
- #31 Add
setCellFormula()
andgetCellFormula()
- #34 Add
setColumnWidth()
- #35 Add
setRowHeight()
- #36 Add
setHeader()
andsetFooter()
- #33 Add
setCellComment()
andgetCellComment()
- #32 Add
addImage()
- #37 Add
autoSizeColumn()
- #41 Add option to auto size columns when using addColumn, addRow and addRow
- #39 Add
renameSheet()
- #38 Add
clearCell()
andclearCellRange()
- #17 Add
- Breaking changes
read()
methodsheet
argument should now besheetNumber
(for consistency)- When specifying 1-based sheet numbers as arguments, always use
sheetNumber
(notsheet
orsheetIndex
). - When specifying sheet names as arguments, use
sheetName
, notsheet
. - Enhancements
- #13 Add support for
createSheet()
- #14 Add support for
removeSheet()
- #15 Add
deleteSheet()
which can delete a sheet by name or number
- Bug fixes:
- Treat null rows/cells as blank not null
- #5
new()
method ignores xmlFormat argument - #6
ShiftRows
offset argument misspel - #7
ShiftRows
calls require workbook as argumen - #8
AddRow
insert argument not working - #10 Cannot read XLSX files
- #11
Read
method errors if no format specified. Should return workbook object - Enhancements:
- #2 Testbox BDD style test suite
- #3 Upgrade POI to 3.11
- #3 Option to include blank rows when reading into a query
- #4 Simplify dependencies by including tools and formatting as mixins
- #9
writeFileFromQuery()
: detect if xml from file extension - #12 Change ACF
excludeHeaderRow
default=false toincludeHeaderRow
, default=false
read
method- changed radically to work under Lucee. Some attributes/functionality disabled for now, but can return a query or workbook object.
- changed
excludeHeaderRow
default from false to true
- Added
flushPoiLoader
utility method
- Added
write
method matchingSpreadSheetWrite()
writeFileFromQuery
custom method
- Workbook creation separated from instantiation. Create a workbook using
new()
and then pass it to other functions. Same as ACF functions. - Use JavaLoader to load newer POI jars to allow support for
read()
- Added methods
new
read
(matchescfspreadsheet action="read"
)setActiveSheet
- Added custom method:
downloadFileFromQuery
- Initial release with support for the following standard CFML functions only:
addColumn
addRow
addRows
deleteRow
formatCell
formatRow
shiftRows
readBinary
- Custom method:
binaryFromQuery