Export DataTable with images to Excel in C#, VB.NET
Syncfusion Excel (XlsIO) library is a .NET Excel library used to create, read, and edit Excel documents. Also, converts Excel documents to PDF files. Using this library, you can start importing DataTable with images into Excel using Template Marker feature.
You can generate reports more appealingly with image support in template markers. Following are the possible image formats.
- GIF
- JPEG
- PNG
- BMP
- TIFF
XlsIO detects the property as image, when its type is System.Drawing.Image or byte[].
Steps to export Collection Objects with image to Excel, programmatically:
Step 1: Create a new C# console application project.
Create a new C# console application project
Step 2: Install the Syncfusion.XlsIO.WinForms NuGet package as reference to your .NET Framework application from NuGet.org.
Install NuGet package to the project
Step 3: Include the following namespaces in Program.cs file.
C#
using Syncfusion.XlsIO; using System.Collections.Generic; using System.IO;
VB.NET
Imports Syncfusion.XlsIO Imports System.Collections.Generic Imports System.IO
Step 4: Include the following code snippet in main method of Program.cs file to export DataTable with images to Excel document.
C#
//Instantiate the spreadsheet creation engine using (ExcelEngine excelEngine = new ExcelEngine()) { //Instantiate the Excel application object IApplication application = excelEngine.Excel; //Create a new workbook and add a worksheet IWorkbook workbook = application.Workbooks.Create(1); IWorksheet worksheet = workbook.Worksheets[0]; //Add the header text and assign cell style worksheet["A3"].Text = "Image"; worksheet["B3"].Text = "Name"; worksheet["C3"].Text = "Id"; worksheet["D3"].Text = "Age"; worksheet["A3:D3"].CellStyle.Font.Bold = true; worksheet["B4"].Text = "%Employee.Name"; worksheet["C4"].Text = "%Employee.Id"; worksheet["D4"].Text = "%Employee.Age"; worksheet["A4"].Text = "%Employee.Image"; //Create template marker processor ITemplateMarkersProcessor marker = workbook.CreateTemplateMarkersProcessor(); //Add marker variable marker.AddVariable("Employee", GetEmployeeDetails()); //Apply markers marker.ApplyMarkers(); //Autofit the columns worksheet["B1:D10"].AutofitColumns(); //Save the workbook workbook.SaveAs("Output.xlsx"); }
VB.NET
'Instantiate the spreadsheet creation engine Using excelEngine As ExcelEngine = New ExcelEngine() 'Instantiate the Excel application object Dim application As IApplication = excelEngine.Excel 'Create a new workbook and add a worksheet Dim workbook As IWorkbook = application.Workbooks.Create(1) Dim worksheet As IWorksheet = workbook.Worksheets(0) 'Add the header text and assign cell style worksheet("A3").Text = "Image" worksheet("B3").Text = "Name" worksheet("C3").Text = "Id" worksheet("D3").Text = "Age" worksheet("A3:D3").CellStyle.Font.Bold = True worksheet("B4").Text = "%Employee.Name" worksheet("C4").Text = "%Employee.Id" worksheet("D4").Text = "%Employee.Age" worksheet("A4").Text = "%Employee.Image" 'Create template marker processor Dim marker As ITemplateMarkersProcessor = workbook.CreateTemplateMarkersProcessor() 'Add marker variable marker.AddVariable("Employee", GetEmployeeDetails()) 'Apply markers marker.ApplyMarkers() 'Autofit the columns worksheet("B1:D10").AutofitColumns() 'Save the workbook workbook.SaveAs("Output.xlsx") End Using
Step 5: Create a public class with name as Employee and have the required properties.
C#
public class Employee { private byte[] m_image; private string m_name; private int m_id; private int m_age; //Employee Image public byte[] Image { get { return m_image; } set { m_image = value; } } //Employee Name public string Name { get { return m_name; } set { m_name = value; } } //Employee ID public int Id { get { return m_id; } set { m_id = value; } } //Employee Age public int Age { get { return m_age; } set { m_age = value; } } }
VB.NET
Public Class Employee Dim m_image() As Byte Dim m_name As String Dim m_id As Integer Dim m_age As Integer 'Employee Image Public Property Image As Byte() Get Return m_image End Get Set m_image = Value End Set End Property 'Employee Name Public Property Name As String Get Return m_name End Get Set m_name = Value End Set End Property 'Employee ID Public Property Id As Integer Get Return m_id End Get Set m_id = Value End Set End Property 'Employee Age Public Property Age As Integer Get Return m_age End Get Set m_age = Value End Set End Property End Class
Step 6: Load the list object collection employeeList using the following simple static method.
C#
private static List<Employee> GetEmployeeDetails() { //Get the images from folder byte[] image1 = File.ReadAllBytes(@"../../Data/Man1.jpg"); byte[] image2 = File.ReadAllBytes(@"../../Data/Man2.png"); byte[] image3 = File.ReadAllBytes(@"../../Data/Woman1.jpg"); //Instantiate employee list List<Employee> employeeList = new List<Employee>(); //Set the details of employee and into employee list Employee emp = new Employee(); emp.Image = image1; emp.Name = "Andy Bernard"; emp.Id = 1011; emp.Age = 35; employeeList.Add(emp); //Set the details of employee and into employee list emp = new Employee(); emp.Image = image2; emp.Name = "Karen Fillippelli"; emp.Id = 1012; emp.Age = 26; employeeList.Add(emp); //Set the details of employee and into employee list emp = new Employee(); emp.Image = image3; emp.Name = "Patricia Mckenna"; emp.Id = 1013; emp.Age = 28; employeeList.Add(emp); //Return the employee list return employeeList; }
VB.NET
Private Function GetEmployeeDetails() As List(Of Employee) 'Get the images from folder Dim image1() As Byte = File.ReadAllBytes("../../Data/Man1.jpg") Dim image2() As Byte = File.ReadAllBytes("../../Data/Man2.png") Dim image3() As Byte = File.ReadAllBytes("../../Data/Woman1.jpg") 'Instantiate employee list Dim employeeList As List(Of Employee) = New List(Of Employee) 'Set the details of employee and into employee list Dim emp As Employee = New Employee() emp.Image = image1 emp.Name = "Andy Bernard" emp.Id = 1011 emp.Age = 35 employeeList.Add(emp) 'Set the details of employee and into employee list emp = New Employee() emp.Image = image2 emp.Name = "Karen Fillippelli" emp.Id = 1012 emp.Age = 26 employeeList.Add(emp) 'Set the details of employee and into employee list emp = New Employee() emp.Image = image3 emp.Name = "Patricia Mckenna" emp.Id = 1013 emp.Age = 28 employeeList.Add(emp) 'Return the employee list Return employeeList End Function
A complete working sample of how to export DataTable with Images to Excel document can be downloaded from ExportDataTableWithImagesToExcel.zip.
By executing the program, you will get the output Excel file as shown below.
Output Excel document
Take a moment to peruse the documentation where you will find other options importing and exporting in DataTable, exporting worksheet to Collection Objects, and more with respective code examples.
Click here to explore the rich set of Syncfusion Excel (XlsIO) library features.
An online sample link to export DataTable with images to Excel
Starting with v16.2.0.x, if you reference Syncfusion assemblies from trial setup or from the NuGet feed, include a license key in your projects. Refer the link to learn about generating and registering Syncfusion license key in your application to use the components without trail message.