-
Notifications
You must be signed in to change notification settings - Fork 295
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 onExcelImage
below.
ExcelBackgroundImage.Image
can no longer be set to null. UseExcelBackgroundImage.Remove
instead. -
ExcelDrawingBlipFill.Image
- Property has changed data type toExcelImage
. See description onExcelImage
below. -
ExcelDrawingBlipFill.ImageFormat
- Has been removed. Use ExcelImage.Type instead. -
ExcelVmlDrawingPicture.Image
- Property has changed data type toExcelImage
. See description onExcelImage
below. -
ExcelVmlDrawingPicture.InsertPicture
- Has been removed. -
ExcelVmlDrawingPictureFill.Image
- Property has changed data type toExcelImage
. See description onExcelImage
below. -
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;
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