New to Telerik Document ProcessingStart a free 30-day trial

Generating Excel Documents from IEnumerable Collections

Updated on Jun 5, 2026

Environment

VersionProductAuthor
2024.2.426RadSpreadProcessingDesislava Yordanova

Description

This article demonstrates how to generate Excel documents from IEnumerable collections.

Solution

RadSpreadProcessing is the ideal fit for this requirement. You can iterate a collection of custom objects and fill the worksheet cells with the values from the respective fields. The following code snippet shows how to fill data in a worksheet from a collection of Employee objects. You can adapt this approach to any custom collection that you receive as input.

csharp
        static void Main(string[] args)
        {
            Workbook workbook = new Workbook();
            Worksheet worksheet = workbook.Worksheets.Add();
            worksheet.Name = "Salary Report Q2 2024";
            worksheet.Cells[5, 1].SetValue("Employee's name");
            worksheet.Cells[5, 2].SetValue("Job Position");
            worksheet.Cells[5, 3].SetValue("Hire Date");
            worksheet.Cells[5, 4].SetValue("Salary");
            List<Employee> employees = PopulateWithData();

            //Let's fill the document with the employee data:

            int startRowIndex = 6;
            for (int i = 0; i < employees.Count; i++)
            {
                worksheet.Cells[startRowIndex + i, 1].SetValue(employees[i].Name);
                worksheet.Cells[startRowIndex + i, 2].SetValue(employees[i].JobPosition.ToString());
                worksheet.Cells[startRowIndex + i, 3].SetValue(employees[i].HireDate);
                worksheet.Cells[startRowIndex + i, 4].SetValue(employees[i].Salary);
            }

            //Add a total salary row for each job position and one total row for all salaries. 
            worksheet.Cells[16, 1].SetValue("Developers' salaries");
            worksheet.Cells[17, 1].SetValue("QAs' salaries");
            worksheet.Cells[18, 1].SetValue("Managers' salaries");
            worksheet.Cells[19, 1].SetValue("Total salaries");

            worksheet.Cells[16, 4].SetValue("=SumIf(C7:C15,\"" + JobPosition.Developer.ToString() + "\",E7:E15)");
            worksheet.Cells[17, 4].SetValue("=SumIf(C7:C15,\"" + JobPosition.QA.ToString() + "\",E7:E15)");
            worksheet.Cells[18, 4].SetValue("=SumIf(C7:C15,\"" + JobPosition.Manager.ToString() + "\",E7:E15)");
            worksheet.Cells[19, 4].SetValue("=Sum(E7:E15)");

            //Add a document title. 
            CellSelection departmentNameCells = worksheet.Cells[1, 1, 1, 4];
            departmentNameCells.Merge();
            departmentNameCells.SetValue("Telerik Document Processing");
            departmentNameCells.SetHorizontalAlignment(RadHorizontalAlignment.Left);

            CellSelection salaryReportCells = worksheet.Cells[2, 1, 2, 4];
            salaryReportCells.Merge();
            salaryReportCells.SetValue("Salaries Report");
            salaryReportCells.SetHorizontalAlignment(RadHorizontalAlignment.Right);

            CellSelection periodCells = worksheet.Cells[3, 1, 3, 4];
            periodCells.Merge();
            periodCells.SetValue("for the Q2 2024 period");
            periodCells.SetHorizontalAlignment(RadHorizontalAlignment.Right);

            worksheet.Columns[worksheet.UsedCellRange].AutoFitWidth();

            IWorkbookFormatProvider formatProvider = new XlsxFormatProvider();
            string filePath = @"FinalSpreadsheet.xlsx";
            using (FileStream output = new FileStream(filePath, FileMode.Create))
            {
                formatProvider.Export(workbook, output);
            }
            Process.Start(new ProcessStartInfo() { FileName = filePath, UseShellExecute = true });
        } 
        private static List<Employee> PopulateWithData()
        {
            List<Employee> employees = new List<Employee>();
            employees.Add(new Employee("Michael Brown", JobPosition.Developer, new DateTime(2005, 1, 20), 3400));
            employees.Add(new Employee("James Hammer", JobPosition.Manager, new DateTime(2001, 2, 14), 4800));
            employees.Add(new Employee("Amanda Johns", JobPosition.QA, new DateTime(2008, 7, 30), 2600));
            employees.Add(new Employee("Daniel Bolton", JobPosition.Developer, new DateTime(2012, 4, 24), 2900));
            employees.Add(new Employee("Lucas Smith", JobPosition.Manager, new DateTime(2007, 2, 12), 4100));
            employees.Add(new Employee("George Stones", JobPosition.QA, new DateTime(2009, 5, 6), 2850));
            employees.Add(new Employee("Victoria Sloane", JobPosition.Manager, new DateTime(2004, 8, 31), 3150));
            employees.Add(new Employee("Patrick Holmes", JobPosition.Developer, new DateTime(2001, 9, 18), 4200));
            employees.Add(new Employee("Thomas Porter", JobPosition.Developer, new DateTime(2006, 4, 12), 3450));
            return employees;
        }

        public class Employee
        {
            public string Name { get; set; }

            public JobPosition JobPosition { get; set; }

            public DateTime HireDate { get; set; }

            public double Salary { get; set; }

            public Employee(string name, JobPosition jobPosition, DateTime hireDate, double salary)
            {
                this.Name = name;
                this.JobPosition = jobPosition;
                this.HireDate = hireDate;
                this.Salary = salary;
            }
        }

        public enum JobPosition
        {
            Developer,
            QA,
            Manager
        }

See Also