## 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 &amp; 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.

### Breaking changes from EPPlus 7.2

- Changed class ExcelTextFormatBase to abstract
- OfficeOpenXml.FormulaParsing.ExcelUtilities.ExcelReferenceType RelativeRowAbsolutColumn corrected to RelativeRowAbsoluteColumn

### Breaking changes from EPPlus 7.4

- Removed unused class ParsingScope and ParsingScopes.
- Removed unused interface IParsingLifetimeEventHandler and implemetation.
- Removed implementation of IParsingLifetimeEventHandler.ParsingCompleted in the ParsingContext class.

Also see [Breaking Changes in EPPlus 6](<https://epplussoftware.com/docs/versions/breaking-changes-in-epplus-6/index.md>) and [Breaking Changes in EPPlus 5](<https://epplussoftware.com/docs/versions/breaking-changes-in-epplus-5/index.md>)
