-
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 depricated 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. 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 to ExcelImage. See description on ExcelImage below.
- ExcelDrawingBlipFill.Image - Property has changed data type to ExcelImage. See description on ExcelImage below.
- ExcelDrawingBlipFill.ImageFormat - Has been removed. Use ExcelImage.Type instead.
- ExcelVmlDrawingPicture.Image - Property has changed data type to ExcelImage. See description on ExcelImage below.
- ExcelVmlDrawingPicture.InsertPicture - Has been removed.
- ExcelVmlDrawingPictureFill.Image - Property has changed data type to ExcelImage. See description on ExcelImage 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 |
| 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 |
Supported Image Formats.
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;
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