Skip to content

Breaking Changes in EPPlus 7

JanKallman edited this page Oct 26, 2023 · 13 revisions

Breaking Change From EPPlus 7.0

ExcelFunction class

The formula parser has changed significantly in EPPlus 7, requiring all custom functions that are inherited from the ExcelFunction class to be reviewed. The ExcelFunction class has changed, now exposes new properties used to handle array results and condition behaviour.

  • The Execute method has changed signature changing the IEnumarable in the first parameter to IList. New signature is: Execute(IList, ParsingContext).
  • ArgumentMinLength - Required. Minimum number of parameters supplied to the function. Suppling less parameters to the function will result in a #VALUE! error.
  • NamespacePrefix - If the function requires a prefix when saved, for example "_xlfn." or "_xlfn._xlws."
  • HasNormalArguments A Boolean indicating if the formula only has normal arguments. If false, the GetParameterInfo method must be implemented. The default is true.
  • ReturnsReference - If true the function can return a reference to a range. Use the CreateAddressResult to return the result with a reference. Returning a reference will cause the dependency chain to check the address and will allow the colon operator to be used with the function.
  • IsVolatile - If the function returns a different result when called with the same parameters. The default is false.
  • ArrayBehaviour - If the function allows arrays as input in a parameter, resulting in an array output. Also see the GetArrayBehaviourConfig method.
  • IFunctionModules.CustomCompilers has been removed and compilers can no longer be added. This has been replaced by ExcelFunction.ParameterInfo and ExcelFunction.ArrayBehaviour which configures the new behaviour of the formula calculation engine.
  • CalculateCollection - has been removed. EPPlus no long uses collections of FunctionArgument in this way. Use the InMemoryRange class instead.
  • Converting double's from strings in the formula parser will now use try to parse the string using the the CurrentCulture before trying the InvariantCulture.
  • The default value of ExcelCalculationOption.PrecisionAndRoundingStrategy in the formula calculation has been changed from DotNet to Excel
  • The ErrorHandlingFunction class has been removed. Use the ParametersInfo property with FunctionParameterInformation.IgnoreErrorInPreExecute instead.

Methods

  • CreateAddressResult - Returns the result with a reference to a range.
  • CreateDynamicArrayResult - The result should be treated as a dynamic array.
  • GetArrayBehaviourConfig - Sets the index if the parameters that can be arrays. Also see the ArrayBehaviour property. The ExcelFunctionArgument class
  • The GetAsRangeInfo(ParsingContext) has been removed. Use the ValueAsRangeInfo property instead.
  • The IsEnumerableOfFuncArgs and ValueAsEnumerableOfFuncArgs properties and has been removed.
  • The SetExcelStateFlag and ExcelStateFlagIsSet methods has been removed. Misspelled property ExcelIgnoreError.CalculatedColumm has been renamed CalculatedColumn

Tokenizer, Expressions and Compile result

  • The source code tokenizer now tokenizes in more detail, tokenizing addresses.
  • The expression handling is totally rewritten and now uses reversed polish notation instead of an expression tree. This change affects internal classes only.
  • The CompileResult class has moved to a new namespace: OfficeOpenXml.FormulaParsing.FormulaExpressions
  • Adding defined names referencing addresses will now be added as fixed addresses (i.e $A$1), unless the allowRelativeAddress parameter of the ExcelNamedRangeCollection.Add method is set to true.
  • ParsingConfiguration.Lexer and ParsingConfiguration.SetLexer(ILexer lexer) has been removed.
  • ParsingConfiguration.SetExpresionCompiler has been removed.

Autofilter & Table filter

  • Added ExcelPackageSettings.ApplyFiltersOnSave to decide if Filters will be applied on Saving the workbook. Default is True. If set to false, you will call the ApplyFilter method manually to show/hide rows the matches the filters criterias.
  • ExcelWorksheet.AutofilterAddress is now obsolete. Use ExcelWorksheet.Autofilter.Address instead. ExcelWorksheet.Autofilter will now always be set instead of being null if no autofilter was present.

ConditionalFormatting

  • Updating ConditionalFormatting via the XML DOM will not work as read and write is performed on load/save.
  • The base class ConditionalFormattingRule and all derived classes no longer contain the Node property.
  • Misspelled enum member eTrendLine.MovingAvgerage has been removed and replaced with eTrendLine.MovingAverage
  • ConditionalFormatting classes are now Internal. Interfaces for each class exist and have all relevant properties instead.

ExcelHyperlink

  • Renamed misspelled properties ColSpann and RowSpann to ColSpan and RowSpan on the ExcelHyperLink class.

Also see Breaking Changes in EPPlus 6 and Breaking Changes in EPPlus 5

EPPlus wiki

Versions

Worksheet & Ranges

Styling

Import/Export data

Formulas and filters

Charts & Drawing objects

Tables & Pivot Tables

VBA & Protection

Clone this wiki locally