Version History / Release Notes

I work on features based on:

  • Demand. If enough people badger me about it, I might do something. Or pay me. In chocolate/tea or money, I’m ok with either 🙂
  • Whatever’s interesting and/or hard and/or not easily done with other libraries.

I also work better when there’s food and tea and chocolate in my system. Donate! Or visit the shop!

Version 3.4 (27 July 2013)

  • You can now import text! See ImportText() and its relevant SLTextImportOptions class for details.
  • You can now make stock charts.
  • 8 MOAR THEMES! Berlin, Circuit, Damask, Depth, Droplet, Main Event, Slate, Vapor Trail.
  • Exposed the HasAutoFilter property for SLTable. Don’t want a filter for your table? Set it to false.
  • Removed “using System;” for SLTuple.cs and SLTuplesType.cs. Because .NET Framework 4 has a System.Tuple, which clashes with DocumentFormat.OpenXml.Spreadsheet.Tuple.
  • Built-in number format code index 14 now gets the format from computer’s regional short date settings (instead of just mm-dd-yyyy from Open XML specs).
  • Charts now correctly set the auto-label when changing from category axis to date axis (or vice versa).
  • Added NoMultiLevelLabels and ShowDataLabelsOverMaximum to charts.
  • SLPicture now also uses EMF image files (basically with the Image class instead of the Bitmap class) to set the internal horizontal/vertical resolutions.
  • Bug fix: Loading a spreadsheet with an existing chart sheet now work properly.
  • Bug fix: Autofitting row/column now works when a large positive value is in a cell with default numeric format (it was mistaken as a date format).
  • Bug fix: The totals row value now follow the corresponding row/column style (specifically the number format).
  • Bug fix: The SLShapeProperties class will no longer render a default (ie. empty) SLReflection class.

Special thanks to these marvelous people for suggestions and informing me of bugs:
Thomas Z, David H, Chris K, Stefano L

Version 3.3 (19 May 2013)

  • You can now get comment text (but no comment box style properties. Sorry). See GetCommentText() of SLDocument class.
  • You can now resize a picture using percentages of the original size (see SLPicture).
  • Bug fix: Autofitting a column with forced new lines in the cell content now fits correctly.
  • Bug fix: Autofitting without specifying font names now work correctly.
  • Bug fix: Explicitly setting boolean font properties (SLFont) such as bold and italic to false now work correctly.
  • Bug fix: Freezing only rows or only columns now work correctly.
  • Bug fix: Inserting/deleting rows on a completely new worksheet after setting some cell values now work correctly.
  • Bug fix: Appending text that starts with a number to the page header/footer now works correctly.
  • Bug fix: PlotVisibleOnly is now always rendered.
  • Bug fix: Setting a styled text in the header/footer where the text starts with a number is an error. The start of the text (which is a number) combines with the font size of the font setting and results in an unusually large font sized text (that’s not even correct). For example, Arial 12pt with “2/25/2013” becomes Arial 122 pt with “/25/2013”.
  • Bug fix: Selecting a worksheet now returns true if the worksheet to be selected is already selected. (Ha! Unravel that convoluted statement!)
  • Bug fix: Existing spreadsheets with a calculation chain (shared formulas) and subsequently have no more calculation formulas (maybe a cell formula got deleted) will now have the corresponding calculation chain part removed.

Special thanks to these wonderful people for giving suggestions or pointing out bugs:
György S, Brian M, Ed L, Nick W, Anele M, Philipp H, Joel S, Chris K, Larry.

Extra special thanks to drakex for hosting a version on NuGet because I was too daft to do it. Yes the NuGet versions are now updated by me. Bug fixed versions will now be more promptly delivered.

Version 3.2 (6 Feb 2013)

  • You can now have the collection of existing cells, styles and shared strings. In case you want to view data via LINQ.
  • Added 21 new themes from Office 2013. We’re now up to 74 built-in themes. Woohoo!
  • Inserting/deleting rows/columns now also correctly moves/resizes existing images.
  • Will now use the actively selected worksheet already selected on an existing spreadsheet.
  • Removing hyperlinks now remove cleanly (a cell range with a hyperlink is now completely cleanly removed).
  • Bug fix: Calculation cells now loaded correctly (Clone the thing while loading dangit!)

Version 3.1 (18 Jan 2013)

  • Copying cells now also copy hyperlinks.
  • Style setting behaviour now more in line with Excel style setting behaviour.
  • Speed optimisations in style setting.

Version 3.0 (13 Jan 2013)

  • Excel 2010 specific conditional formatting! Specifically data bars and icon sets.
  • Support for data validations.
  • Show/hide worksheets. Did you know you can have worksheets “very hidden”?
  • You can now set the active cell in the currently selected worksheet.
  • You can now set the selected worksheet. No special functions, just use the SelectWorksheet() as normal. Last selected worksheet will be the uh, selected worksheet. Just like using Excel!
  • Set the print area. See SetPrintArea() of SLDocument class.
  • You can now show formulas. Nothing to do with the formula bar. This just means showing formulas instead of calculated results.
  • You can now copy cells with just the value, formulas, style formatting.
  • You can also now copy cells from another worksheet to your current worksheet. Make use of the paste options!
  • You can now do fancy rich text manipulation. See the SLRstType class for more.
  • You can now set the header/footer text in a very easy manner. See the SLPageSettings class for more, such as SetLeftHeaderText(“I’m left handed”).
  • You can now group/ungroup rows/columns.
  • You can now collapse/expand groups of rows/columns.
  • You can now make hyperlinks on cells.
  • You can now set the scope of defined names too.
  • You can now get a list of existing defined names. Be warned: there are a lot of properties that might boggle your mind…
  • SLTool/SLConvert .ToCellRange() and .ToCellReference() now correctly wraps worksheet names with spaces in single quotes.
  • Added ShapeProperties to SLPicture. Now you can do more stuff with your images!
  • Speed optimisations for autofitting.
  • Splitting panes now even less tedious. There’s an overload that just asks if how many rows/columns and if you want the row/column headings to exist.
  • Breaking change! The list of SLMergeCell classes returned is now of List instead of an array.
  • Bug fix: SLEffectList now actually render the soft edges…
  • Bug fix: VML drawings with embedded images now start with relationship IDs of “rId1” (mainly for cell comments). Excel chokes otherwise… *sigh*
  • Bug fix: Copying worksheets now also has hyperlinks copied correctly.
  • Bug fix: Switch rapidly between existing worksheets of existing spreadsheet and setting cell values in between, will now have the cell values saved. Forgot to use WorksheetPart.Worksheet.Save()… *sigh*
  • Bug fix: Renaming worksheets now has chart data references updated too.
  • Bug fix: Freeze panes now work correctly in Excel 2007 (without spewing errors).

Version 2.5 (28 Nov 2012)

  • There’s autofitting support for row heights and column widths. This is possibly the most sought after feature.
  • You can now filter data.
  • Removed static column name and reverse column name List and Dictionary lookup tables. This made the library infinitesimally slower but freed the library from being plagued by multi-thread or multi-processor or multi-opened-document or multi-whatever problems.
  • Modified the hashing algorithm of SLCellPoint. Who knew this would affect the speed?

Version 2.4.1 (13 Nov 2012)

  • Bug fix: Data label positions now correctly displayed when assigned.

Version 2.4 (13 Nov 2012)

  • Sparklines! This is an Excel 2010 (and later?) specific feature.
  • More themes! Now with a total of 53 built-in themes! These are from Microsoft Excel by the way…
  • SLConvert class now has more converting functions! Try out the ToCellReference() and ToCellRange() functions.
  • We have SetPatternFill()! Comments can also have a pattern fill!
  • Charts can now glow and have soft edges!
  • Added GetCurrentWorksheetName() function.
  • Added GetSheetNames() function.
  • We have a GetWorksheetStatistics() function with the corresponding SLWorksheetStatistics. Get the number of rows/columns/cells used in your worksheet! Don’t know what other stats are useful though…
  • Various changes to make SLChart render as close to that of Excel 2010 as possible. This also fixes many conformance issues because apparently Excel 2007 is fairly tolerant but Excel 2010 has a big stick to whack any inconsistencies on the head. The specs say it’s optional; yeah optional my foot…
  • Clone() function added to various classes. Notables are those of charting, conditional formatting, picture and styling.
  • Breaking change: SpreadsheetLight.SLFill has the method signature of SetPattern() changed to more like that of SpreadsheetLight.Drawing.SLFill. Basically, the pattern type is in front of the foreground and background colours.
  • Bug fix: Data labels don’t render correctly if category/series/value names are set to false.

Version 2.3 (4 Nov 2012)

  • Support for data point customisation in charts.
  • Support for data labels in charts.
  • Support for data tables in charts.
  • Optimised writing of theme XML file. Shaved maybe 3 seconds off of total time. Is it worth it? You tell me…
  • Overlay property of SLLegend class now works better.
  • Code cleanup: “using” statements pared to … much fewer of them…
  • URI relationship targets are now more in line with what Microsoft Excel creates. This probably has close to zero impact on you. Unless you use LibreOffice or iPhone/iPad.
  • Bug fix: Error when loading in existing spreadsheet with calculation cells.

Version 2.2 (23 Oct 2012)

  • We have cell comments!
  • Added overloads for SetCellValue() for SLRstType
  • Chart axis labels can now be rotated and such.
  • Any cell value set that starts with an equal sign “=” or a single quote “‘” is now better handled.
  • You can now open an existing spreadsheet that came in a Stream object.
  • It’s now easier to set a theme for the spreadsheet on initialisation.
  • Add and delete background pictures.
  • New class SLConvert for convenient miscellaneous convertions.
  • Bug fix: When loading byte data for pictures, the byte data is now loaded by value. Previously, if you change the original byte data, the loaded picture data also change.

Version 2.1.1 (9 Oct 2012)

  • Fixed URI thingie in relationship file so LibreOffice Calc can load in metadata. Ermahgerd fixing the URI thingie in a package is annoying… On the upside, we can still use .NET Framework 3.5 (instead of 4.0). For now…

Version 2.1 (8 Oct 2012)

  • Work with multiple spreadsheets at one go! (see sample source code page for examples)
  • Full support for core document properties.
  • Better styling support compatible with LibreOffice Calc.
  • LibreOffice Calc can load spreadsheet files from SpreadsheetLight when document properties are set.
  • Line data series now can be smoothed (line charts and scatter charts) independently of the selected chart type.
  • ImportDataTable() now more properly implemented when DBNull data occurs. Much thanks to Troye Stonich.
  • Added CloseWithoutSaving() function.
  • Breaking change! Minimum .NET Framework version required is .NET Framework 4.0.
  • Breaking change! Several classes now has to be created from SLDocument instead of using the “new” coding construct. The important ones are SLStyle, SLFont, SLTable and SLChart.

Version 2.0 (29 Sep 2012)

  • Speed and memory optimisation! Now with the speed and power of hurricanes yet with the memory footprint of a breeze. Achievement unlocked: Quad-Core Zephyr.
  • Create your own combination charts! Plot data series on the primary axis! Or on the secondary axis! Warning: only very weak checks are done on whether your resulting combination chart is valid. But if Excel displays your combination chart just fine, then you’re fine too.
  • Chart data series customisations. Colour individual columns differently if you’re so inclined…
  • Axis title customisations. Rotate it, set bright purple font, italicise it, underline it. Go crazy! (actually don’t…)
  • Bubble charts enabled! But I still don’t know how to use it correctly… Use with caution.
  • Styling properties (fill, border, shadow, 3D format) for the chart area. But you know, be tasteful…
  • Support for customising the floor, side wall and back wall of 3D charts (satisfy your inner home making instincts)
  • Worksheet protection (but no password protection)
  • Insert and remove page breaks
  • Change the page layout (Normal, Page Layout, Page Break Preview)
  • Added ClearCellContent() overload with no parameters, clearing all cell content in the currently selected worksheet.
  • Added the handling of System.DBNull for importing data tables.
  • Breaking change: You can’t (or shouldn’t) set ShowHiddenData property of SLChart as and when you like. It’s now done together when creating a new instance of SLChart. Because we need to know if hidden data is included at the start of creating the chart. This has a 0.001% chance of affecting you…
  • Bug fix: to always remove existing relevant child elements for existing worksheet (in case there were existing say merged cells, but we unmerged all cells, then there’d be a lingering XML child element, but we don’t have any custom library classes for merged cells. Too long to explain…)
  • Bug fix: CellStylesFormat forced save failed when there are duplicates (when opening existing file written with such duplicates)
  • Bug fix: SLColorTransform class is now properly cloned. This would’ve caused themed colours to not work properly outside of stylesheets. Also, the tint wasn’t properly implemented.
  • Bug fix: DateTime’s now properly calculated for GetCellValueAsDateTime() functions.
  • Bug fix: SetRowHeight() failed when your regional settings use the comma instead of the decimal point. CultureInfo.InvariantCulture! I have dug through all ToString()’s of integral and floating point variables and added cultural insensitivity…
  • Bug fix: Border styles persisted between SLStyle class variables, due to incorrect SLBorder initialisation.

Version 1.2 (25 Aug 2012)

  • SLPicture can now load image data in byte array form (thanks to Rob Hutchinson for his code submission and suggestion!)
  • Bulk upload of data using DataTable
  • Automagic XML escaping for string data (I’m looking at your Mr Ampersand…)
  • Cultural indifference for numeric data. But the style format code still has to be in invariant culture mode.
  • Fixed assignment to SLLine3DChart of SLPlotArea when SLLineChartType.Line3D used (used SLLineChart before). This didn’t create a bug but the wrong assignment bugs the heck out of me…
  • Modified HideChartTitle() of SLChart to use AutoTitleDeleted. This will handle the auto-title for pie charts.

Version 1.1.7.1 (17 Jul 2012)

  • Fixed bug. Will crash when gradient fill of SLShapeProperties is used (SLGradientStop not properly initialised when given a hexadecimal colour value)
  • Added functions to group several settings together for: top bevels, bottom bevels, extrusion and contour on the SLFormat3D class
  • Added a function to allow hiding of the chart legend

Version 1.1.7 (16 Jul 2012)

Breaking Change! New namespaces introduced: Charts and Drawing.

  • SLChart class is now in Charts namespace (as with all the charting related classes)
  • SLPicture class is now in Drawing namespace
  • SLPictureJoinType enumeration is renamed SLLineJoinValues enumeration
  • Insert charts as a chartsheet
  • Styling for chart title, chart legend, and chart plot area
  • Printing and page settings (page margins, header/footer, sheet tab colour and so on)

Version 1.1.6 (2 Jun 2012)

  • Basic chart support (no bubble nor stock charts. Bubble charts are weird…)
  • Conditional formatting with formulas
  • Relative position for pictures without forcing worksheet row/column dimensions

Version 1.1.5.1 (24 May 2012)

  • Fixed bug when renaming worksheets with an existing sheet name

Version 1.1.5 (23 May 2012)

  • Added column name function overloads (in addition to column index functions)
  • Added IDisposable interface to SLDocument (so you can use “using” [or “Using” if VB.NET])
  • Added conditional formatting for cells
  • Added sorting capabilities (for tables and worksheet)
  • Added table support (complete with subtotal functions)

Version 1.1.4 (14 May 2012)

  • Fixed bug on SLColor not having colours appearing (SetAllNull())
  • Added copying, deleting and moving worksheets
  • Added copying of styles from rows, columns and cells
  • Added copying of rows, columns and cells
  • More overloads of shortcut functions from font, fill, alignment onto SLStyle

Version 1.1.3 (11 May 2012)

  • Fixed bug on setting cells and overwriting any existing cell
  • Set it such that only when image insertion with relative position or splitting forces custom row/column dimensions (this makes the worksheet look more “natural”)
  • SetCellValueByRef() overloaded into SetCellValue() (34 overloaded functions!)
  • Minor formula change on setting string cell values (check if equal sign at start, then set as numeric formula)

Version 1.1.2 (1 May 2012)

  • Used a 2-int structure instead of string for cell reference (sped up performance and reduced memory use. And made it easier internally to write code…)
  • OpenXmlReader and OpenXmlWriter everywhere where appropriate (run faster!!)

Version 1.1.1 (27 Apr 2012)

  • Switched from ArrayList to List<>, Hashtable to Dictionary<>
  • Removed custom list classes and used List<> instead
  • Added strong name signing

Version 1.1 (19 Feb 2012)

  • Split panes!
  • Insert/delete rows/columns (correctly accounting for cells, formulas, merged cells, tables, defined names, but not pictures/worksheet drawings. Drawings operate on a different “dimension”…)
  • Simple defined named functionality
  • Clear cell/row/column data
  • Used a buffer workbook/worksheet for writing data, so the sheet?.xml files don’t always jump a number every time a new worksheet is added.
  • Bug fix on unfreezing panes (different workbook views caused problems)
  • Bug fix on target resolutions of SLPicture

Version 1.0 (10 Jan 2012)

  • Basic cell manipulation
  • Basic worksheet manipulation
  • Basic styling
  • Shared string support
  • Rich text support
  • Basic theme support
  • Merge cell support
  • Picture support (we have 3D!)

Version 0 (4 Nov 2011)

  • Ground zero