Release Date: 26.04.2025
- Fixed a bug that prevented adding new worksheets when a pane split was defined
Release Date: 24.01.2025
- Fixed a regression bug in the Cell function ConvertArray
Release Date: 19.01.2025
- Fixed a bug on writing default column styles (not persisted in some cases)
- Code maintenance
Release Date: 12.01.2025
- Added Cell constructor, accepting Address objects as address
- Added GetRow and GetColum functions in Worksheet class
- Added InsertRow and InsertColumn functions. Functionality provided by Alexander Schlecht in NanoXLSX
- Added FirstCewllByValue, FirstOrDefaultCell, CellsByValue functions. Functionality provided by Alexander Schlecht in NanoXLSX
- Added ReplaceCellValue function. Functionality provided by Alexander Schlecht in NanoXLSX
- Code maintenance
Release Date: 24.11.2024
- Fixed a bug of the column address (letter) resolution. Column letters above 'Z' were resolved incorrectly
- Simplified project structure
Release Date: 26.10.2024
- Fixed a bug regarding the determination of the first data cell in an empty worksheet. Bug fix provided by Martin Stránský in NanoXLSX
Release Date: 23.07.2024
- Adapted handling of the font scheme in styles. The scheme is now determined automatically
- Added column option to define a default column style
Release Date: 25.02.2024
- Fixed a bug when reading min and max values in the GetLastDataColumnNumber function. Bug fix provided by pokorny in NanoXLSX
- Fixed a bug in the GetFirstDataCellAddress function
- Code maintenance
Release Date: 07.09.2023
- Added worksheet option for zoom factors
- Added worksheet option for view types (e.g. page break preview)
- Added worksheet option to show or hide grid lines
- Added worksheet option to show or hide columns and row headers
- Added worksheet option to show or hide rulers in page layout view type
Release Date: 10.08.2023
- Adapted hex color validation (clarified number of necessary characters)
- Code maintenance
Release Date: 11.11.2022
- Added a several methods in the Worksheet class to add multiple ranges of selected cells
- Removed internal escaping of custom number format codes for now
- Updated example in demo
Note: The incomplete internal escaping of custom number format codes was removed due to the potential high complexity. Escaping must be performed currently by hand, according to OOXML specs: Part 1 - Fundamentals And Markup Language Reference, Chapter 18.8.31
Release Date: 05.10.2022
- Minor adaptions
- Code formatting and maintenance
Release Date: 01.10.2022
- Fixed a bug in the functions to write custom number formats
- Fixed behavior of empty cells and added re-evaluation if values are set by the Value property
- Fixed a bug in the functions to write font values (styles)
- Updated documentation
Note:
- When defining a custom number format, now the CustomFormatCode property must always be defined as well, since an empty value leads to an invalid Workbook
- When a cell is now created (by constructor) with the type EMPTY, any passed value will be discarded in this cell
Release Date: 03.09.2022 - Major Release
Note: some of the mentioned changes may be already implemented in v2.x as preview functionality
- Added a list of MRU colors that can be defined in the Workbook class (methods AddMruColor, ClearMruColors)
- Added an exposed property for the workbook protection password hash (will be filled when loading a workbook)
- Added the method SetSelectedWorksheet by name in the Workbook class
- Added two methods GetWorksheet by name or index in the Workbook class
- Added the methods CopyWorksheetIntoThis and CopyWorksheetTo with several overloads in the Workbook class
- Added the function RemoveWorksheet by index with the option of resetting the current worksheet, in the Workbook class
- Added the function SetCurrentWorksheet by index in the Workbook class
- Added the function SetSelectedWorksheet by name in the Workbook class
- Added a Shortener-Class constructor with a workbook reference
- The shortener functions Down and Right have now an option to keep row and column positions
- Added two shortener functions Up and Left
- Made several style assigning methods deprecated in the Workbook class (will be removed in future versions)
- Added an exposed property for the worksheet protection password hash (will be filled when loading a workbook)
- Added the methods GetFirstDataColumnNumber, GetFirstDataColumnNumber, GetFirstDataRowNumber, GetFirstRowNumber, GetLastDataColumnNumber, GetFirstCellAddress, GetFirstDataCellAddress, GetLastDataColumnNumber, GetLastDataRowNumber, GetLastRowNumber, GetLastCellAddress, GetLastCellAddress and GetLastDataCellAddress
- Added the methods GetRow and GetColumns by address string or index
- Added the method Copy to copy a worksheet (deep copy)
- Added a constructor with only the worksheet name as parameter
- Added and option in GoToNextColumn and GoToNextRow to either keep the current row or column
- Added the methods RemoveRowHeight and RemoveAllowedActionOnSheetProtection
- Renamed columnAddress and rowAddress to columnNumber and rowNumber in the AddNextCell, AddCellFormula and RemoveCell methods
- Added several validations for worksheet data
- In Cell, the address can now have reference modifiers ($)
- The worksheet reference in the Cell constructor was removed. Assigning to a worksheet is now managed automatically by the worksheet when adding a cell
- Added a property CellAddressType in Cell
- Cells can now have null as value, interpreted as empty
- Added a new overloaded function ResolveCellCoordinate to resolve the address type as well
- Added ValidateColumnNumber and ValidateRowNumber in Cell
- In Address, the constructor with string and address type now only needs a string, since reference modifiers ($) are resolved automatically
- Address objects are now comparable
- Implemented better address validation
- Range start and end addresses are swapped automatically, if reversed
- Font has now an enum of possible underline values (e.g. instead of a bool)
- CellXf supports now indentation
- A new, internal style repository was introduced to streamline the style management
- Color (RGB) values are now validated (Fill class has a function ValidateColor)
- Style components have now more appropriate default values
- MRU colors are now not collected from defined style colors but from the MRU list in the workbook object
- The ToString function of Styles and all sub parts will now give a complete outline of all elements
- Fixed several issues with style comparison
- Several style default values were introduced as constants
- Added uint as possible formula value. Valid types are int, uint, long, ulong, float, double, byte, sbyte, decimal, short and ushort
- Added several validity checks
- Added several constants for boundary dates in the LowLevel class
- Added several functions for pane splitting in the LowLevel class
- Exposed the (legacy) password generation method in the LowLevel class
- Updated documentation among the whole project
- Exceptions have no sub titles anymore
- Overhauled the whole writer
- Removed lot of dead code for better maintenance
Release Date: 06.08.2022
- Fixed a bug when setting a workbook protection password
Release Date: 27.03.2022
- Fixed a follow-up issue on finding first/last cell addresses on explicitly defined, empty cells
Release Date: 20.03.2022
- Fixed a regression bug, caused by changes of v2.11.2
Release Date: 10.03.2022
- Added functions to determine the first cell address, column number or row number of a worksheet
- Adapted internal style handling
- Adapted the internal building of XML documents
- Fixed a bug in the handling of border colors
Release Date: 12.09.2021
- Added methods to remove styles from cell ranges
- Added missing methods to remove row height definitions, to reset column definitions and to remove actions for the worksheet protection
- Introduced general methods to validate row and column numbers (Cell class)
- Added checks for worksheet IDs and column widths
- Introduced (internal) style handling by a repository, in favor of the old style manager
- Fixed a bug in the handling of white spaces and newlines in string values
- Fixed a bug when hiding worksheets (Note: It is not possible anymore to remove all worksheets from a workbook, or to set a hidden one as active. This would lead to an invalid Excel file)
- Fixed a bug in the hash code generation in the Style class
- Fixed date and time handling in OADates
- Fixed implementation of GetLastRowNumber and GetLastColumnNumber (Worksheet)
- Fixed handling of cell coordinate resolution (accepts now addresses with fixed rows and columns)
- Removed worksheet reference from the Cell object
- Adapted Exceptions
- Improved the handling of worksheet removal
- Improved shortener and added option to keep the row number when jumping to the next column (same for next row)
- Documentation update
- Many optimizations and minor bug fixes
Note: This patch release contains many fixes, optimizations and features as preview of the next planned minor release v2.12 or mayor release v3.0. These features are already available due to a recently reported bug and its fix, where pending changes were already published upstream (dev channel).
Release Date: 10.07.2020
- Added functions to split (and freeze) a worksheet horizontally and vertically into panes
- Added a property to set the visibility of a workbook
- Added a property to set the visibility of worksheets
- Added two examples in the demo for the introduced split, freeze and visibility functionalities
- Added the possibility to define column widths and row height even if there are no cells defined
- Fixed the internal representation of column widths and row heights
- Minor code maintenance
Note: The column widths and row heights may change slightly with this release, since the actual (internal) width and height is now applied when setting a non-standard column width or row height
Release Date: 06.06.2020
- Added functions to determine the last row, column or cell with data
- Fixed documentation formatting issues
- Updated readme and documentation
Release Date: 18.04.2021
- Introduced library version for .NET Standard 2.0 (and assigned demos)
- Updated project structure (two projects for .NET >=4.5 and two for .NET Standard 2.0)
- Added function SetStyle in the Worksheet class
- Added demo for the new SetStyle function
- Changed behavior of empty cells. They are now not string but implicit numeric cells
- Added new function ResolveEnclosedAddresses in Cell.Range class
- Added new function GetAddressScope in Cell class
- Fixed the validation of cell addresses (single cell)
- Introduced several generalizations of Lists
Thanks to the following people for their contributions in NanoXLSX, that are based on the above changes:
- Shobb for the introduction of IReadOnlyList (generalizations)
- John Lenz for the port to .NET Standard
- Ned Marinov for the proposal of the new SetStyle function
Release Date: 10.12.2020
- Formal update for NuGet. Fixed wrong readme
Note: No release will be published for this version, only a Nuget package
Release Date: 10.12.2020
- Added indentation property of horizontal text alignment (CellXF) as style
- Added example in demo for text indentation
- Code Cleanup
Release Date: 30.08.2020
- Added new data type TIME, represented by TimeSpan objects
- Added time (TimeSpan) examples to the demos
- Added a check to ensure dates are not set beyond 9999-12-31 (limitation of OAdate)
- Updated documentation
- Fixed some code formatting issues
Release Date: 19.07.2020
- Fixed a bug in the method AddNextCellFormula (Fix provided by Thiago Souza)
Release Date: 11.01.2020
- Fixed a potential bug when parsing numbers (using certain locales)
- Formal changes
Release Date: 20.05.2019
- Fixed a bug in the handling of streams (streams can be left open now)
- Updated stream demo
- Code Cleanup
- Removed executable folder, since executables are available through releases, compilation or NuGet
Release Date: 08.12.2018
- Improved the performance of adding stylized cells by factor 10 to 100
Release Date: 04.11.2018
- Fixed a bug in the style handling of merged cells. Bug fix provided by David Courtel
Release Date: 06.10.2018
- Fixed a bug in the demo for the async handling
- Removed redundant code
Release Date: 04.10.2018
- Added asynchronous methods SaveAsync, SaveAsAsync and SaveAsStreamAsync
- Added a new constructor in the Cell class with the address as string
- Added a new example for the introduced async methods
- Minor bug fixes and optimizations
- Fixed typos
Release Date: 19.08.2018
- Fixed a bug in the Font style class
- Fixed typos
Release Date: 02.07.2018
- Added address types (no fixed rows and columns, fixed rows, fixed columns, fixed rows and columns; Useful in formulas)
- Added new option CellDirection Disabled, if the addresses of the cells are defined manually (AddNextCell will override the current cell in this case)
- Altered Demo 3 to demonstrate disabling of automatic cell addressing
- Extended Demo 1 to demonstrate the new address types
- Minor, internal changes
Release Date: 07.06.2018
- Added style appending (builder / method chaining)
- Added new basic styles ColorizedText, ColorizedBackground and Font as functions
- Added a new constructor for Workbooks without file name to handle stream-only workbooks more logical
- Added the functions HasCell, GetLastColumnNumber and GetLastRowNumber in the Worksheet class
- Fixed a bug when overriding a worksheet name with sanitizing
- Added new demo for the introduced style features
- Internal optimizations and fixes
Release Date: 30.05.2018
- Fixed a bug in the processing of column widths. Bug fix provided by Johan Lindvall
- Added numeric data types byte, sbyte, decimal, uint, ulong and short and ushort (proposal by Johan Lindvall)
- Changed the behavior of cell type casting. User defined cell types will now only be overwritten if the type is DEFAULT (proposal by Johan Lindvall)
Release Date: 12.03.2018
Note: Due to some refactoring (see below) in this version, changes of existing code may be necessary. However, most introduced changes are on a rather low level and probably only used internally although publicly accessible
- Renamed the method addStyleComponent in the class Workbook to AddStyleComponent, to follow conventions
- Renamed the Properties RowAddress and ColumnAddress to RowNumber and ColumnNumber in the class Cell for clarity
- Renamed the methods GetCurrentColumnAddress, GetCurrentRowAddress, SetCurrentColumnAddress and SetCurrentRowAddress in the class Worksheet to GetCurrentColumnNumber, GetCurrentRowNumber, SetCurrentColumnNumber and SetCurrentRowNumber for clarity
- Renamed the constants MIN_ROW_ADDRESS, MAX_ROW_ADDRESS, MIN_COLUMN_ADDRESS, MAX_COLUMN_ADDRESS in the class Worksheet to MIN_ROW_NUMBER, MAX_ROW_NUMBER, MIN_COLUMN_NUMBER, MAX_COLUMN_NUMBER for clarity
- Many optimizations
- Fixed typos
- Extensive documentation update
Release Date: 09.02.2018
- Added most important formulas as static method calls in the sub-class Cell.BasicFormulas (round, floor, ceil, min, max, average, median, sum, vlookup)
- Removed overloaded methods to add cells as type Cell. This can be done now with the overloading of the type object (no code changes necessary)
- Added new constructors for Address and Range
- Added demo for the new static formula methods
- Fixed a bug that kept the stream of the saved file open as long as the program was running
- Minor bug fixes
- Documentation update
Release Date: 10.12.2017
- Added Shortener class (WS) in workbook for quicker writing of data / formulas
- Updated descriptions
- Added full NuGet support
Release Date: 07.12.2017
- Documentation Update
- Fixed version number of the assembly
- Preparation for NuGet release
Release Date: 03.12.2017
- Pushed back to .NET 4.5 due to platform compatibility reasons (multi platform architecture is planned)
- Added SaveToStream method in Workbook class
- Added demo for the new stream save method
- Changed log to MD format
Release Date: 01.11.2017
Note: This major version is not compatible with code of v1.x. However, porting is feasible with moderate effort
- Complete replacement of style handling
- Added an option to add styles with the cell values in one step
- Added a sanitizing function for worksheet names (with auto-sanitizing when adding a worksheet as option)
- Changed specific exception to general exceptions (e.g. StyleException, FormatException or WorksheetException)
- Added function to retrieve cell values easier
- Added functions to get the current column or row number
- Many internal optimizations
- Added more documentation
- Added new functionality to the demos
Release Date: 24.08.2017
- Added further null checks
- Minor optimizations
- Fixed typos
Release Date: 12.08.2017
- fixed a bug in the function to remove merged cells (Worksheet class)
- Fixed typos
Release Date: 08.08.2017
Note: Due to a (now fixed) typo in a public parameter name, it is possible that some function calls on existing code must be fixed too (just renaming).
- Fixed typos (parameters and text)
- Minor optimization
- Complete reformatting of code (alphabetical order & regions)
- HTML documentation moved to folder 'docs' to provide an automatic API documentation on the hosting platform
Release Date: 07.04.2017
Note: Using this version of the library with old code can cause compatibility issues due to the simplification of some methods (see below).
- Simplified all style assignment methods. Referencing of the workbook is not necessary anymore (can cause compatibility issues with existing code; just remove the workbook references)
- Removed SetCellAddress Method. Replaced by Getters and Setters
- Due to the impossibility of overloading getters and setters, two getters and setters "CellAddress"(string-based) and "CellAddress2" (number based) are introduced
- Fixed a bug in the handling of style assignment
- Additional checks in the assignment methods for columns and rows
- Minor changes (code and documentation)
Release Date: 01.04.2017
- Fixed a bug induced by non-Gregorian calendars (e.g Minguo, Heisei period, Hebrew) on the host system
- Code cleanup
- Minor bug fixes
- Fixed typos
Release Date: 24.03.2017
- Fixed a Out-of-Memory bug when saving very big files
- Improved the performance of the save() method (reduction of processing time from minutes to second when handling big amount of data)
- Added a debug and release version of the executable
- Added some testing utils in the demo project (tests are currently commented out)
Release Date: 20.03.2017
- Extended the sanitizing of allowed XML characters according the XML specifications to avoid errors with illegal characters in passed strings
- Updated project settings of the documentation solution
- Fixed typos
Release Date: 17.11.2016
- Fixed general bug in the handling of the sharedStrings table. Please update
- Passed null values to cells are now interpreted as empty values. Caused an exception until now
Release Date: 15.11.2016
- Fixed a bug in the sharedStrings table
Release Date: 16.08.2016
- Fixed a bug in the cell type resolution / formatting assignment
Release Date: 12.08.2016
Note: Using this version of the library with old code can cause compatibility issues due to the removal of some methods (see below).
- Removed all overloaded methods with various input values for adding cells. Object is sufficient
- Added sharedStrings table to manage strings more efficient (Excel standard)
- Pushed solution to .NET 4.6.1 (no changes necessary)
- Changed demos according to removed overloaded methods (List<string> is now List<object>)
- Added support for long (64bit) data type
- Fixed a bug in the type recognition of cells
Release Date: 11.08.2016
- Added support for Cell selection
- Added support for worksheet selection
- Removed XML namespace 'x' as prefix in OOXML output. No use for this at the moment
- Removed newlines from OOXML output. No relevance for parser
- Added further demo for the new features
Release Date: 18.01.2016
- Fixed a bug in the auto filter section
- Code cleanup
- Fixed some documentation issues
Release Date: 17.01.2016
- Added support for auto filter (columns)
- Added support for hiding columns and rows
- Added new Column class (sub-class of Worksheet) to manage column based properties more efficiently
- Removed unused Exception UnsupportedDataTypeException
- Added more documentation (exceptions are now better defined)
- Minor bug fixes + typos
- Added further demo for the new features
Release Date: 08.11.2015
- Fixed a bug in the meta data section
Release Date: 02.11.2015
- Added support for protecting workbooks
- Minor bug fixes
Release Date: 01.11.2015
- Added support to protect worksheets with a password
- Minor bug fixes
- Fixed some code formatting issues
- Fixed issue in documentation project to include the private LowLevel class (and sub classes)
Release Date: 31.10.2015
- Fixed typos (in parameter names)
Release Date: 29.10.2015
- Added support for merging cells
- Added support for Protecting worksheets (no support for passwords yet)
- Minor bug fixes
- Fixed typos
- Added more documentation
- Added further demo for the new features
Release Date: 12.10.2015
- Added a method to generate random style names using a Crypto Service Provider. Fixed a problem of identical style names due to too fast processing when using a standard RNG
- Minor bug fixes
- Fixed typos
Release Date: 06.10.2015
- Minor bug fixes
Release Date: 29.09.2015
- Added extensive support for styling
- Added support for meta data (title, subject etc.)
- Added support for cell width and cell height
- Fixed many spelling errors
- Added new methods to add cells as objects with automatic casting
- Added more documentation
- Added post build macros to VS project for easier deployment
- Many bug fixes and optimizations
Note: Styling is not complete and fully tested yet. Several additions and changes are possible with the next version
Release Date: 22.08.2015
- Fixed uncritical / silent casting exception
Release Date: 21.08.2015
- Initial release