Creating Excel File from List With Different Sheet With Naming#
nuget package used OpenXML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
| public static MemoryStream WriteMultipleListsToExcel_OpenXml(params (string sheetName, IEnumerable<object> list)[] sections)
{
var memoryStream = new MemoryStream();
using (var spreadsheetDocument = SpreadsheetDocument.Create(memoryStream, SpreadsheetDocumentType.Workbook))
{
var workbookPart = spreadsheetDocument.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
var workbookProps = new WorkbookProperties() { DefaultThemeVersion = 124226 }; // Ensure workbook properties
workbookPart.Workbook.AppendChild(workbookProps);
var sheets = workbookPart.Workbook.AppendChild(new Sheets());
uint sheetId = 1;
foreach (var (sheetName, list) in sections)
{
var worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
var sheet = new Sheet() { Id = workbookPart.GetIdOfPart(worksheetPart), SheetId = sheetId++, Name = sheetName };
sheets.Append(sheet);
var sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>();
var type = list.GetType().GetGenericArguments()[0];
var properties = type.GetProperties();
// Add header row
var headerRow = new Row();
foreach (var prop in properties)
{
headerRow.Append(CreateTextCell(prop.Name));
}
sheetData.Append(headerRow);
// Add data rows
foreach (var item in list)
{
var dataRow = new Row();
foreach (var prop in properties)
{
var value = prop.GetValue(item)?.ToString() ?? string.Empty;
dataRow.Append(CreateTextCell(value));
}
sheetData.Append(dataRow);
}
worksheetPart.Worksheet.Save();
}
workbookPart.Workbook.Save();
}
memoryStream.Position = 0;
return memoryStream;
}
private static Cell CreateTextCell(string value)
{
return new Cell
{
CellValue = new CellValue(value),
DataType = CellValues.String
};
}
|
Use of Above Function#
lets Suppose we have Below Class
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
}
public class Order
{
public int OrderId { get; set; }
public decimal Amount { get; set; }
}
|
Calling the function
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| var people = new List<Person>
{
new Person { Name = "John", Age = 30 },
new Person { Name = "Jane", Age = 25 }
};
var products = new List<Product>
{
new Product { Name = "Laptop", Price = 1200 },
new Product { Name = "Phone", Price = 800 }
};
var orders = new List<Order>
{
};
var memoryStream = WriteMultipleListsToExcel_OpenXml(("People", people), ("Products", products), ("Orders", orders));
File.WriteAllBytes("combined_data_openxml.xlsx", memoryStream.ToArray());
Console.WriteLine("Excel file created successfully using OpenXML!");
|