Skip to content

Commit 11323e1

Browse files
List Of Object To Excel File
1 parent 760e4bc commit 11323e1

File tree

1 file changed

+139
-0
lines changed

1 file changed

+139
-0
lines changed

content/blog/general/listToExcel.md

+139
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
---
2+
title: "2024"
3+
author: "PrashantUnity"
4+
weight: 115
5+
date: 2025-03-14
6+
lastmod: 2025-03-14
7+
dateString: March 2025
8+
description: "Generate multi-sheet Excel files in C sharp using OpenXML"
9+
#canonicalURL: "https://canonical.url/to/page"
10+
cover:
11+
image: "cover.jpg" # image path/url
12+
alt: "Download Logo" # alt text
13+
#caption: "Optical Character Recognition" display caption under cover
14+
15+
tags: [ "NET", "codefrydev", "C sharp", "CFD", "Excel","List"]
16+
keywords: [ "NET", "codefrydev", "C sharp", "CFD"]
17+
hideMeta: true
18+
---
19+
20+
# Creating Excel File from List<T> With Different Sheet With Naming
21+
22+
> nuget package used [OpenXML](https://github.com/dotnet/Open-XML-SDK?tab=readme-ov-file#documentation)
23+
```cs
24+
public static MemoryStream WriteMultipleListsToExcel_OpenXml(params (string sheetName, IEnumerable<object> list)[] sections)
25+
{
26+
27+
var memoryStream = new MemoryStream();
28+
29+
using (var spreadsheetDocument = SpreadsheetDocument.Create(memoryStream, SpreadsheetDocumentType.Workbook))
30+
{
31+
var workbookPart = spreadsheetDocument.AddWorkbookPart();
32+
workbookPart.Workbook = new Workbook();
33+
34+
var workbookProps = new WorkbookProperties() { DefaultThemeVersion = 124226 }; // Ensure workbook properties
35+
workbookPart.Workbook.AppendChild(workbookProps);
36+
37+
var sheets = workbookPart.Workbook.AppendChild(new Sheets());
38+
39+
uint sheetId = 1;
40+
41+
foreach (var (sheetName, list) in sections)
42+
{
43+
var worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
44+
worksheetPart.Worksheet = new Worksheet(new SheetData());
45+
46+
var sheet = new Sheet() { Id = workbookPart.GetIdOfPart(worksheetPart), SheetId = sheetId++, Name = sheetName };
47+
sheets.Append(sheet);
48+
49+
var sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>();
50+
var type = list.GetType().GetGenericArguments()[0];
51+
var properties = type.GetProperties();
52+
53+
// Add header row
54+
var headerRow = new Row();
55+
foreach (var prop in properties)
56+
{
57+
headerRow.Append(CreateTextCell(prop.Name));
58+
}
59+
sheetData.Append(headerRow);
60+
61+
// Add data rows
62+
foreach (var item in list)
63+
{
64+
var dataRow = new Row();
65+
foreach (var prop in properties)
66+
{
67+
var value = prop.GetValue(item)?.ToString() ?? string.Empty;
68+
dataRow.Append(CreateTextCell(value));
69+
}
70+
sheetData.Append(dataRow);
71+
}
72+
73+
worksheetPart.Worksheet.Save();
74+
}
75+
76+
workbookPart.Workbook.Save();
77+
}
78+
79+
memoryStream.Position = 0;
80+
return memoryStream;
81+
}
82+
private static Cell CreateTextCell(string value)
83+
{
84+
return new Cell
85+
{
86+
CellValue = new CellValue(value),
87+
DataType = CellValues.String
88+
};
89+
}
90+
```
91+
92+
## Use of Above Function
93+
94+
> lets Suppose we have Below Class
95+
96+
```cs
97+
public class Person
98+
{
99+
public string Name { get; set; }
100+
public int Age { get; set; }
101+
}
102+
103+
public class Product
104+
{
105+
public string Name { get; set; }
106+
public decimal Price { get; set; }
107+
}
108+
109+
public class Order
110+
{
111+
public int OrderId { get; set; }
112+
public decimal Amount { get; set; }
113+
}
114+
```
115+
116+
> Calling the function
117+
118+
```cs
119+
var people = new List<Person>
120+
{
121+
new Person { Name = "John", Age = 30 },
122+
new Person { Name = "Jane", Age = 25 }
123+
};
124+
125+
var products = new List<Product>
126+
{
127+
new Product { Name = "Laptop", Price = 1200 },
128+
new Product { Name = "Phone", Price = 800 }
129+
};
130+
131+
var orders = new List<Order>
132+
{
133+
};
134+
135+
var memoryStream = WriteMultipleListsToExcel_OpenXml(("People", people), ("Products", products), ("Orders", orders));
136+
137+
File.WriteAllBytes("combined_data_openxml.xlsx", memoryStream.ToArray());
138+
Console.WriteLine("Excel file created successfully using OpenXML!");
139+
```

0 commit comments

Comments
 (0)