-
Notifications
You must be signed in to change notification settings - Fork 297
Breaking Changes in EPPlus 6
The EPPlus 6 Nuget package will no longer target .NET 4.0 and 4.5, as these versions are no longer supported.
EPPlus 6 will instead target .NET 4.5.2. A target for .NET 6 has also been added.
In EPPlus 6 all public interfaces referencing to System.Drawing.Common has been removed. The reason for this is that Microsoft has deprecated System.Drawing.Common on all non-Windows platforms. To replace System.Drawing.Common we have implemented native code to handle the different image formats and text measurings. To handle Colors EPPlus adds a reference to System.Drawing.Primitives. This means that all references to Color will work as before.
The following methods and properties have been removed or changed:
-
ExcelDrawings.AddPicture(string, Image)- Has been removed. Use other overloads. -
ExcelDrawings.AddPicture(string, Image, Uri)- Has been removed. Use other overloads. -
ExcelDrawings.AddPictureAsync(string, Image)- Has been removed. Use other overloads. -
ExcelDrawings.AddPictureAsync(string, Image, Uri)- Has been removed. -
ExcelPicture.ImageFormat- Has been removed. Use other overloads. -
ExcelBackgroundImage.Image- Property has changed data type toExcelImage. See description onExcelImagebelow.
ExcelBackgroundImage.Imagecan no longer be set to null. UseExcelBackgroundImage.Removeinstead. -
ExcelDrawingBlipFill.Image- Property has changed data type toExcelImage. See description onExcelImagebelow. -
ExcelDrawingBlipFill.ImageFormat- Has been removed. Use ExcelImage.Type instead. -
ExcelVmlDrawingPicture.Image- Property has changed data type toExcelImage. See description onExcelImagebelow. -
ExcelVmlDrawingPicture.InsertPicture- Has been removed. -
ExcelVmlDrawingPictureFill.Image- Property has changed data type toExcelImage. See description onExcelImagebelow. -
ExcelFont.SetFromFont(Font)- Has been replaced with new signature. -
ExcelTextFont.SetFromFont(Font)- Has been replaced with new signature. -
ExcelFontXml.SetFromFont(Font)- Has been replaced with new signature.
The ExcelImage class replaces all System.Drawing.Common.Image properties (see list above).
| Properties | Description |
|---|---|
| ImageBytes | The image as a byte-array |
| Type | The type of image, for example jpg, gif or svg |
| Bounds | The bounds and resolution of the image |
| Methods | Description |
|---|---|
| SetImage(string) | Sets the image from a file path |
| SetImage(FileInfo) | Sets the image from a FileInfo object |
| SetImage(byte[], ePictureType) | Sets the image from a byte array |
| SetImage(Stream, ePictureType) | Sets the image from a stream |
| SetImage(ExcelImage) | Sets the image from another image object |
| SetImageAsync(string) | Sets the image from a file path |
| SetImageAsync(FileInfo) | Sets the image from a FileInfo object |
| SetImageAsync(Stream, ePictureType) | Sets the image from a stream |
All SetImage and SetImageAsync methods returns the ExcelImage object. This object can be used with SetImage(ExcelImage) overload.
The internal image handler supports the following image formats:
- Bmp
- Jpeg/Exif
- Gif
- Png
- Tif
- Ico
- Svg
- WebP
- Wmf/Wmz
- Emf/Wmz
Switching to overloads supported natively by EPPlus 6 is recommended, but if you have a lot of references to System.Drawing.Common, adding extension methods for images and fonts might simplify...
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using OfficeOpenXml.Drawing;
using OfficeOpenXml.Style;
namespace OfficeOpenXml.Drawing.Extensions
{
public static class EPPlusDrawingExtensions
{
/// <summary>
/// Adds a picture to the drawings
/// </summary>
/// <param name="drawings">The collection </param>
/// <param name="name">The name of the drawing</param>
/// <param name="image">The image object to add</param>
/// <returns>A picture added to the drawings collection.</returns>
public static ExcelPicture AddPicture(this ExcelDrawings drawings, string name, Image image)
{
var ms = new MemoryStream();
image.Save(ms, image.RawFormat);
return drawings.AddPicture(name, ms, GetPictuteType(image));
}
/// <summary>
/// Adds a picture to the drawings
/// </summary>
/// <param name="drawings">The collection </param>
/// <param name="name">The name of the drawing</param>
/// <param name="image">The image object to add</param>
/// <param name="uri">An hyperlink reference used when clicking the drawing object.</param>
/// <returns>A picture added to the drawings collection.</returns>
public static ExcelPicture AddPicture(this ExcelDrawings drawings, string name, Image image, Uri uri)
{
var ms = new MemoryStream();
image.Save(ms, image.RawFormat);
return drawings.AddPicture(name, ms, GetPictuteType(image), uri);
}
/// <summary>
/// Sets the image
/// </summary>
/// <param name="xlImage">The image object </param>
/// <param name="image">The image to set</param>
public static void SetImage(this ExcelImage xlImage, Image image)
{
var ms = new MemoryStream();
image.Save(ms, image.RawFormat);
xlImage.SetImage(ms, GetPictuteType(image));
}
/// <summary>
/// Sets the font from a font object
/// </summary>
/// <param name="xlFont">The EPPlus Text Font object</param>
/// <param name="font">The font object.</param>
public static void SetFromFont(this ExcelTextFont xlFont, Font font)
{
xlFont.SetFromFont(font.Name, font.SizeInPoints, font.Bold, font.Italic, font.Underline, font.Strikeout);
}
/// <summary>
/// Sets the font from a font object
/// </summary>
/// <param name="xlFont">The EPPlus Text Font object</param>
/// <param name="font">The font object.</param>
public static void SetFromFont(this OfficeOpenXml.Style.ExcelFont xlFont, Font font)
{
xlFont.SetFromFont(font.Name, font.SizeInPoints, font.Bold, font.Italic, font.Underline, font.Strikeout);
}
private static ePictureType GetPictuteType(Image image)
{
if (image.RawFormat.Equals(ImageFormat.Jpeg) || image.RawFormat.Equals(ImageFormat.Exif))
{
return ePictureType.Jpg;
}
else if (image.RawFormat.Equals(ImageFormat.Gif))
{
return ePictureType.Gif;
}
else if(image.RawFormat.Equals(ImageFormat.Png))
{
return ePictureType.Png;
}
else if (image.RawFormat.Equals(ImageFormat.Emf))
{
return ePictureType.Emf;
}
else if (image.RawFormat.Equals(ImageFormat.Wmf))
{
return ePictureType.Wmf;
}
else if (image.RawFormat.Equals(ImageFormat.Tiff))
{
return ePictureType.Tif;
}
else if (image.RawFormat.Equals(ImageFormat.Icon))
{
return ePictureType.Ico;
}
else
{
return ePictureType.Bmp;
}
}
}
}Remember to add the name space where you want to use the methods, so they are accessible.
using OfficeOpenXml.Drawing.Extensions;
One of our major focus areas for the continued development of EPPlus 6 is improving performance and functionality of the formula calculation. For this reason we have changed a number of classes and interfaces that in previous versions were public to internal. This means that these classes/interfaces will no longer be accessible when using EPPlus.
OfficeOpenXml.FormulaParsing.ExcelDataProviderOfficeOpenXml.FormulaParsing.EpplusExcelDataProviderOfficeOpenXml.FormulaParsing.EpplusNameValueProviderOfficeOpenXml.FormulaParsing.EpplusNameValueProviderOfficeOpenXml.FormulaParsing.Excel.Functions.Database.DatabaseFunctionOfficeOpenXml.FormulaParsing.Excel.Functions.Database.DsumOfficeOpenXml.FormulaParsing.Excel.Functions.Database.DcountOfficeOpenXml.FormulaParsing.Excel.Functions.Database.DgetOfficeOpenXml.FormulaParsing.Excel.Functions.Database.DminOfficeOpenXml.FormulaParsing.Excel.Functions.Database.DvarpOfficeOpenXml.FormulaParsing.Excel.Functions.Database.ExcelDatabaseOfficeOpenXml.FormulaParsing.Excel.Functions.Database.RowMatcherOfficeOpenXml.FormulaParsing.Excel.Functions.Database.ExcelDatabaseCriteriaOfficeOpenXml.FormulaParsing.Excel.Functions.Math.MultipleRangeCriteriasFunctionOfficeOpenXml.FormulaParsing.ExcelUtilities.AddressTranslatorOfficeOpenXml.FormulaParsing.ExcelUtilities.AddressTranslator.RangeCalculationBehaviourOfficeOpenXml.FormulaParsing.ExcelUtilities.AddressTranslator.IndexToAddressTranslatorOfficeOpenXml.FormulaParsing.ExcelUtilities.AddressTranslator.RangeAddressFactoryOfficeOpenXml.FormulaParsing.ExcelUtilities.AddressTranslator.RangeAddressFactoryOfficeOpenXml.FormulaParsing.ExcelUtilities.ExpressionEvaluatorOfficeOpenXml.FormulaParsing.ExpressionGraph.ExcelAddressExpressionOfficeOpenXml.FormulaParsing.ExpressionGraph.ExpressionFactoryOfficeOpenXml.FormulaParsing.ExpressionGraph.ExpressionGraphBuilderOfficeOpenXml.FormulaParsing.ExpressionGraph.IExpressionGraphBuilderOfficeOpenXml.FormulaParsing.ExpressionGraph.GroupExpressionOfficeOpenXml.FormulaParsing.ExpressionGraph.FunctionExpressionOfficeOpenXml.FormulaParsing.ExpressionGraph.FunctionArgumentExpressionOfficeOpenXml.FormulaParsing.LexicalAnalysis.TokenHandlerOfficeOpenXml.FormulaParsing.LexicalAnalysis.TokenizerContextOfficeOpenXml.FormulaParsing.LexicalAnalysis.PostProcessing.TokenizerPostProcessorOfficeOpenXml.FormulaParsing.LexicalAnalysis.TokenSeparatorHandlers.TokenSeparatorHandlerOfficeOpenXml.FormulaParsing.LexicalAnalysis.TokenSeparatorHandlers.MultipleCharSeparatorHandlerOfficeOpenXml.FormulaParsing.LexicalAnalysis.TokenSeparatorHandlers.SeparatorHandlerOfficeOpenXml.FormulaParsing.LexicalAnalysis.TokenSeparatorHandlers.SheetnameHandlerOfficeOpenXml.FormulaParsing.LexicalAnalysis.TokenSeparatorHandlers.StringHandler
-
OfficeOpenXml.FormulaParsing.ExcelDataProvider.IRangeInfomoved toOfficeOpenXml.FormulaParsing.IRangeInfo -
OfficeOpenXml.FormulaParsing.ExcelDataProvider.ICellInfomoved toOfficeOpenXml.FormulaParsing.ICellInfo -
OfficeOpenXml.FormulaParsing.ExcelDataProvider.INameInfomoved toOfficeOpenXml.FormulaParsing.INameInfo -
OfficeOpenXml.FormulaParsing.FormulaParserconstructors from previous versions made internal. New public constructorFormulaParser(ExcelPackage package) - Method
OfficeOpenXml.FormulaParsing.FormulaParser.Configure()removed/made internal. - Property
OfficeOpenXml.FormulaParsing.ParsingConfiguration.GraphBuilderremoved/made internal. - Method
OfficeOpenXml.FormulaParsing.ParsingConfiguration.SetGraphBuilder()removed/made internal. - Property
OfficeOpenXml.FormulaParsing.ParsingContext.ExcelDataProviderremoved/made internal. - Property
OfficeOpenXml.FormulaParsing.ParsingContext.RangeAddressFactoryremoved/made internal.
Static class 'FontSize' has splitted width and heights into two dictionaries. FontSizes are lazy-loaded when needed.
Misspelled method ExcelNamedRangeCollection.AddFormla has been removed. Please use ExcelNamedRangeCollection.AddFormula
EPPlus Software AB - https://epplussoftware.com
- What is new in EPPlus 5+
- Breaking Changes in EPPlus 5
- Breaking Changes in EPPlus 6
- Breaking Changes in EPPlus 7
- Breaking Changes in EPPlus 8
- Addressing a worksheet
- Dimension/Used range
- Copying ranges/sheets
- Insert/Delete
- Filling ranges
- Sorting ranges
- Taking and skipping columns/rows
- Data validation
- Comments
- Freeze and Split Panes
- Header and Footer
- Hyperlinks
- Autofit columns
- Grouping and Ungrouping Rows and Columns
- Formatting and styling
- The ExcelRange.Text property
- Conditional formatting
- Using Themes
- Working with custom named table- or slicer- styles