跳至页脚内容
使用 IRONXL

如何在 C# 中将对象列表导出到 Excel

IronXL允许开发人员在C#中直接将List对象导出为Excel文件,无需依赖MS Office,自动处理类型转换和属性映射,通过简单的ImportData方法将集合转换为专业的XLSX电子表格。

将对象集合导出到 Excel 文件是商业应用的基本需求。 无论您是要生成报告、分享见解,还是创建备份,您都需要一种可靠的方法将List<t>对象转换为专业的电子表格。 IronXL提供了一种简化的解决方案,消除了在.NET、.NET Core或.NET Framework中创建Excel文件的传统复杂性。

为什么将列表导出到 Excel 文件会遇到挑战?

传统的数据导出到Excel的方法通常涉及Microsoft Office Interop,这需要在服务器上安装Excel,并且带来部署难题。 手动逐个细胞进行反射计数既费时又容易出错。 IronXL强大的数据导入功能解决了这些问题,通过数据源和Excel列标题之间的智能属性映射,无需MS Office或复杂的反射代码。

该库可自动处理类型转换,支持嵌套对象,并能跨不同格式(如 CSV 文件和 XLSX 文件)保持数据完整性。 对于使用无需Interop的C# Excel操作的开发人员来说,IronXL是现代.NET项目中需要强大Excel生成和数据导入/导出功能的理想选择。 该库无缝集成.NET MAUI应用程序,并支持部署到AzureAWS云平台。

处理大型数据集时,传统方法常常在内存管理和性能上表现不佳。 IronXL通过优化的内部数据结构解决了这些问题,在保持出色性能特性的同时有效地处理不同电子表格格式之间的转换

如何将简单列表数据导出到 Excel?

IronXL 的入门设置非常简单。首先,通过 NuGet 包管理器控制台安装库:

Install-Package IronXL.Excel

安装后,您可以立即开始从您的C#数据结构创建Excel电子表格。 让我们探讨如何使用员工模型导出数据:

using IronXL;
using System.Collections.Generic;
using System.Data;
public class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Department { get; set; }
    public decimal Salary { get; set; }
    public DateTime HireDate { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
        // Create sample data for Excel export
        var employees = new List<Employee>
        {
            new Employee { Id = 1, Name = "Alice Johnson", Department = "Engineering",
                           Salary = 95000, HireDate = new DateTime(2020, 3, 15) },
            new Employee { Id = 2, Name = "Bob Smith", Department = "Marketing",
                           Salary = 75000, HireDate = new DateTime(2021, 7, 1) },
            new Employee { Id = 3, Name = "Carol Williams", Department = "Engineering",
                           Salary = 105000, HireDate = new DateTime(2019, 11, 20) }
        };
        // Convert the list of employees to a DataTable
        DataTable dataTable = new DataTable();
        dataTable.Columns.Add("Id", typeof(int));
        dataTable.Columns.Add("Name", typeof(string));
        dataTable.Columns.Add("Department", typeof(string));
        dataTable.Columns.Add("Salary", typeof(decimal));
        dataTable.Columns.Add("HireDate", typeof(DateTime));
        foreach (var employee in employees)
        {
            dataTable.Rows.Add(employee.Id, employee.Name, employee.Department, employee.Salary, employee.HireDate);
        }
        // Export DataTable to Excel spreadsheet
        var workbook = new WorkBook();
        var worksheet = workbook.CreateWorkSheet("Employees");
        // Populate the worksheet
        for (int i = 0; i < dataTable.Columns.Count; i++)
        {
            worksheet.SetCellValue(0, i, dataTable.Columns[i].ColumnName); // Add column headers
        }
        for (int i = 0; i < dataTable.Rows.Count; i++)
        {
            for (int j = 0; j < dataTable.Columns.Count; j++)
            {
                worksheet.SetCellValue(i + 1, j, dataTable.Rows[i][j]); // Add data rows
            }
        }
        // Save as XLSX file
        workbook.SaveAs("EmployeeReport.xlsx");
    }
}
using IronXL;
using System.Collections.Generic;
using System.Data;
public class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Department { get; set; }
    public decimal Salary { get; set; }
    public DateTime HireDate { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
        // Create sample data for Excel export
        var employees = new List<Employee>
        {
            new Employee { Id = 1, Name = "Alice Johnson", Department = "Engineering",
                           Salary = 95000, HireDate = new DateTime(2020, 3, 15) },
            new Employee { Id = 2, Name = "Bob Smith", Department = "Marketing",
                           Salary = 75000, HireDate = new DateTime(2021, 7, 1) },
            new Employee { Id = 3, Name = "Carol Williams", Department = "Engineering",
                           Salary = 105000, HireDate = new DateTime(2019, 11, 20) }
        };
        // Convert the list of employees to a DataTable
        DataTable dataTable = new DataTable();
        dataTable.Columns.Add("Id", typeof(int));
        dataTable.Columns.Add("Name", typeof(string));
        dataTable.Columns.Add("Department", typeof(string));
        dataTable.Columns.Add("Salary", typeof(decimal));
        dataTable.Columns.Add("HireDate", typeof(DateTime));
        foreach (var employee in employees)
        {
            dataTable.Rows.Add(employee.Id, employee.Name, employee.Department, employee.Salary, employee.HireDate);
        }
        // Export DataTable to Excel spreadsheet
        var workbook = new WorkBook();
        var worksheet = workbook.CreateWorkSheet("Employees");
        // Populate the worksheet
        for (int i = 0; i < dataTable.Columns.Count; i++)
        {
            worksheet.SetCellValue(0, i, dataTable.Columns[i].ColumnName); // Add column headers
        }
        for (int i = 0; i < dataTable.Rows.Count; i++)
        {
            for (int j = 0; j < dataTable.Columns.Count; j++)
            {
                worksheet.SetCellValue(i + 1, j, dataTable.Rows[i][j]); // Add data rows
            }
        }
        // Save as XLSX file
        workbook.SaveAs("EmployeeReport.xlsx");
    }
}
$vbLabelText   $csharpLabel

此示例代码演示了如何使用IronXL从List<Employee>导出数据到Excel。 它首先将员工列表转换为DataTable,然后手动将列标题和行写入工作表。 IronXL自动处理诸如int、string和DateTime的数据类型,确保生成的电子表格格式整洁。 最后,Excel保存功能生成一个保存为EmployeeReport.xlsx的XLSX文件,提供了一种简单高效的方式将结构化C#数据转化为专业的Excel报告

以上所示的方法代表了一个可以扩展为更复杂场景的基础模式。 例如,您可能需要从现有数据库查询导出数据集和数据表,或者从外部来源导入Excel数据。 IronXL为两种场景提供了全面的方法,使其成为数据交换操作的多功能工具。

Excel电子表格显示出口的员工数据,带有Id、Name、Department、Salary和HireDate列,显示3个样本员工记录和正确的数据格式化

如何导出复杂的业务对象?

实际的 .NET 应用程序通常涉及更复杂的数据结构。 在处理嵌套属性、计算字段或层次数据时,您需要更成熟的方法。 IronXL在处理这些场景中表现出色,提供了对各种格式数据处理的强大支持。 这是如何导出带有嵌套属性的产品库存:

using IronXL;
using System.Collections.Generic;
using System.Data;
public class Product
{
    public string SKU { get; set; }
    public string ProductName { get; set; }
    public string Category { get; set; }
    public decimal Price { get; set; }
    public int StockLevel { get; set; }
    public bool IsActive { get; set; }
    public DateTime LastRestocked { get; set; }
    public decimal CalculatedValue => Price * StockLevel;
}
class Program
{
    static void Main(string[] args)
    {
        // Generate product inventory list for Excel export
        var products = new List<Product>
        {
            new Product
            {
                SKU = "TECH-001",
                ProductName = "Wireless Mouse",
                Category = "Electronics",
                Price = 29.99m,
                StockLevel = 150,
                IsActive = true,
                LastRestocked = DateTime.Now.AddDays(-5)
            },
            new Product
            {
                SKU = "TECH-002",
                ProductName = "Mechanical Keyboard",
                Category = "Electronics",
                Price = 89.99m,
                StockLevel = 75,
                IsActive = true,
                LastRestocked = DateTime.Now.AddDays(-12)
            },
            new Product
            {
                SKU = "OFF-001",
                ProductName = "Desk Organizer",
                Category = "Office Supplies",
                Price = 15.99m,
                StockLevel = 0,
                IsActive = false,
                LastRestocked = DateTime.Now.AddMonths(-1)
            }
        };
        // Create Excel workbook and import collection data
        var workbook = WorkBook.Create();
        var worksheet = workbook.CreateWorkSheet("Inventory");
        // Export generic list to Excel with headers
        var dataTable = new DataTable();
        dataTable.Columns.Add("SKU", typeof(string));
        dataTable.Columns.Add("ProductName", typeof(string));
        dataTable.Columns.Add("Category", typeof(string));
        dataTable.Columns.Add("Price", typeof(decimal));
        dataTable.Columns.Add("StockLevel", typeof(int));
        dataTable.Columns.Add("IsActive", typeof(bool));
        dataTable.Columns.Add("LastRestocked", typeof(DateTime));
        dataTable.Columns.Add("CalculatedValue", typeof(decimal));
        foreach (var product in products)
        {
            dataTable.Rows.Add(
                product.SKU,
                product.ProductName,
                product.Category,
                product.Price,
                product.StockLevel,
                product.IsActive,
                product.LastRestocked,
                product.CalculatedValue
            );
        }
        // With the following code:
        worksheet["A1"].Value = "SKU";
        worksheet["B1"].Value = "ProductName";
        worksheet["C1"].Value = "Category";
        worksheet["D1"].Value = "Price";
        worksheet["E1"].Value = "StockLevel";
        worksheet["F1"].Value = "IsActive";
        worksheet["G1"].Value = "LastRestocked";
        worksheet["H1"].Value = "CalculatedValue";
        int row = 2;
        foreach (DataRow dataRow in dataTable.Rows)
        {
            worksheet[$"A{row}"].Value = dataRow["SKU"];
            worksheet[$"B{row}"].Value = dataRow["ProductName"];
            worksheet[$"C{row}"].Value = dataRow["Category"];
            worksheet[$"D{row}"].Value = dataRow["Price"];
            worksheet[$"E{row}"].Value = dataRow["StockLevel"];
            worksheet[$"F{row}"].Value = dataRow["IsActive"];
            worksheet[$"G{row}"].Value = dataRow["LastRestocked"];
            worksheet[$"H{row}"].Value = dataRow["CalculatedValue"];
            row++;
        }
        // Auto-fit columns for optimal display
        for (int col = 0; col < 8; col++)
        {
            worksheet.AutoSizeColumn(col);
        }
        // Save as Excel XLSX format
        workbook.SaveAs("ProductInventory.xlsx");
    }
}
using IronXL;
using System.Collections.Generic;
using System.Data;
public class Product
{
    public string SKU { get; set; }
    public string ProductName { get; set; }
    public string Category { get; set; }
    public decimal Price { get; set; }
    public int StockLevel { get; set; }
    public bool IsActive { get; set; }
    public DateTime LastRestocked { get; set; }
    public decimal CalculatedValue => Price * StockLevel;
}
class Program
{
    static void Main(string[] args)
    {
        // Generate product inventory list for Excel export
        var products = new List<Product>
        {
            new Product
            {
                SKU = "TECH-001",
                ProductName = "Wireless Mouse",
                Category = "Electronics",
                Price = 29.99m,
                StockLevel = 150,
                IsActive = true,
                LastRestocked = DateTime.Now.AddDays(-5)
            },
            new Product
            {
                SKU = "TECH-002",
                ProductName = "Mechanical Keyboard",
                Category = "Electronics",
                Price = 89.99m,
                StockLevel = 75,
                IsActive = true,
                LastRestocked = DateTime.Now.AddDays(-12)
            },
            new Product
            {
                SKU = "OFF-001",
                ProductName = "Desk Organizer",
                Category = "Office Supplies",
                Price = 15.99m,
                StockLevel = 0,
                IsActive = false,
                LastRestocked = DateTime.Now.AddMonths(-1)
            }
        };
        // Create Excel workbook and import collection data
        var workbook = WorkBook.Create();
        var worksheet = workbook.CreateWorkSheet("Inventory");
        // Export generic list to Excel with headers
        var dataTable = new DataTable();
        dataTable.Columns.Add("SKU", typeof(string));
        dataTable.Columns.Add("ProductName", typeof(string));
        dataTable.Columns.Add("Category", typeof(string));
        dataTable.Columns.Add("Price", typeof(decimal));
        dataTable.Columns.Add("StockLevel", typeof(int));
        dataTable.Columns.Add("IsActive", typeof(bool));
        dataTable.Columns.Add("LastRestocked", typeof(DateTime));
        dataTable.Columns.Add("CalculatedValue", typeof(decimal));
        foreach (var product in products)
        {
            dataTable.Rows.Add(
                product.SKU,
                product.ProductName,
                product.Category,
                product.Price,
                product.StockLevel,
                product.IsActive,
                product.LastRestocked,
                product.CalculatedValue
            );
        }
        // With the following code:
        worksheet["A1"].Value = "SKU";
        worksheet["B1"].Value = "ProductName";
        worksheet["C1"].Value = "Category";
        worksheet["D1"].Value = "Price";
        worksheet["E1"].Value = "StockLevel";
        worksheet["F1"].Value = "IsActive";
        worksheet["G1"].Value = "LastRestocked";
        worksheet["H1"].Value = "CalculatedValue";
        int row = 2;
        foreach (DataRow dataRow in dataTable.Rows)
        {
            worksheet[$"A{row}"].Value = dataRow["SKU"];
            worksheet[$"B{row}"].Value = dataRow["ProductName"];
            worksheet[$"C{row}"].Value = dataRow["Category"];
            worksheet[$"D{row}"].Value = dataRow["Price"];
            worksheet[$"E{row}"].Value = dataRow["StockLevel"];
            worksheet[$"F{row}"].Value = dataRow["IsActive"];
            worksheet[$"G{row}"].Value = dataRow["LastRestocked"];
            worksheet[$"H{row}"].Value = dataRow["CalculatedValue"];
            row++;
        }
        // Auto-fit columns for optimal display
        for (int col = 0; col < 8; col++)
        {
            worksheet.AutoSizeColumn(col);
        }
        // Save as Excel XLSX format
        workbook.SaveAs("ProductInventory.xlsx");
    }
}
$vbLabelText   $csharpLabel

此代码演示了如何使用 IronXL 在 Excel 中生成动态产品库存报告。 它构建了一个包含SKU、价格、库存水平和补货日期等详细信息的Product对象列表,然后为每个项目计算一个派生CalculatedValue。 数据被转换为DataTable,写入带有标题的Excel工作表,并使用自动调整列的格式增强可读性。 IronXL 可以无缝处理小数、布尔值和日期等数据类型,确保专业的电子表格输出。 结果,ProductInventory.xlsx提供了一个干净的数据驱动库存导出,非常适合业务报告或分析。

处理复杂对象时,您可能还需要管理工作表以适应不同数据类别,或在单个工作簿中创建多个工作表。 IronXL支持高级工作表操作,允许您以逻辑方式组织导出的数据。 此外,您可以选择特定的范围进行目标数据操作,或者排序单元格以有意义的方式呈现数据。

Excel电子表格显示导出的产品库存,包含SKU、ProductName、Category、Price、StockLevel、IsActive状态、LastRestocked日期和CalculatedValue列,显示各种电子产品和办公用品

如何添加专业格式?

通过IronXL全面的样式功能将基本导出转换为精美报告。 专业格式化使您的Excel导出从简单的数据转储提升为高管级别的报告,有效传达见解。 IronXL提供了广泛的格式选项,包括单元格字体和大小自定义、背景图案和颜色、以及边框和对齐设置:

// After importing data, apply professional formatting
var headerRange = worksheet["A1:H1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.BackgroundColor = "#4472C4";
headerRange.Style.Font.Color = "#FFFFFF";
// Format currency columns for Excel export
var priceColumn = worksheet["D2:D100"];
priceColumn.Style.NumberFormat = "$#,##0.00";
// Apply conditional formatting to highlight business metrics
for (int row = 2; row <= products.Count + 1; row++)
{
    var stockCell = worksheet[$"E{row}"];
    if (stockCell.IntValue < 10)
    {
        stockCell.Style.BackgroundColor = "#FF6B6B";
    }
}
// Export formatted list to Excel file
workbook.SaveAs("FormattedInventory.xlsx");
// After importing data, apply professional formatting
var headerRange = worksheet["A1:H1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.BackgroundColor = "#4472C4";
headerRange.Style.Font.Color = "#FFFFFF";
// Format currency columns for Excel export
var priceColumn = worksheet["D2:D100"];
priceColumn.Style.NumberFormat = "$#,##0.00";
// Apply conditional formatting to highlight business metrics
for (int row = 2; row <= products.Count + 1; row++)
{
    var stockCell = worksheet[$"E{row}"];
    if (stockCell.IntValue < 10)
    {
        stockCell.Style.BackgroundColor = "#FF6B6B";
    }
}
// Export formatted list to Excel file
workbook.SaveAs("FormattedInventory.xlsx");
$vbLabelText   $csharpLabel

这些样式选项可以将原始数据导出转换为可供高管阅读的报告。 将集合导出到 Excel 时,使用带有背景颜色的粗体标题可以创建视觉层次结构。 数字格式化确保货币值专业显示。 条件格式化突出显示关键信息如低库存水平,使导出的Excel电子表格对库存管理立即采取可行措施。 了解更多关于高级单元格格式化边框样式的信息,以进一步增强您的导出。

除了基本格式化,IronXL还支持高级功能,如创建Excel图表以可视化导出数据。 您还可以添加超链接以连接相关数据点或外部资源,冻结窗格以更好地导航大型数据集,甚至合并单元格以创建复杂的报告布局。

具有专业格式的Excel库存电子表格,显示SKU、ProductName、Category、Price、StockLevel,并且使用条件格式将零库存以红色突出显示,IsActive状态、LastRestocked日期和CalculatedValue列

如何最佳开始使用IronXL?

IronXL 将复杂的 Excel 生成任务转化为简单、易于维护的代码。 其智能ImportData方法消除了对Microsoft Office依赖的需求,同时提供满足企业要求的专业结果。 该库的综合功能集可以处理从基本列表导出到具有样式和格式的复杂数据转换的一切操作。

开始使用IronXL非常简单。 该库支持包括Docker容器Linux环境macOS系统在内的各种部署场景。 对于企业部署,IronXL提供了全面的许可选项,以及灵活的许可证密钥管理

该库在数据交换操作方面也表现出色。 您可以转换XLSX为CSV写入CSV文件读取CSV数据,甚至转换数据表为CSV格式。 对于Web应用程序,IronXL与ASP.NET MVCBlazor框架无缝集成。

在处理现有Excel文件时,IronXL提供了强大的功能来编辑Excel文件打开工作表读取XLSX文件。 如果您的项目需要Visual Basic集成,您还可以处理VB.NET Excel文件

立即开始使用 IronXL。
green arrow pointer

准备好简化您的 C# Excel 导出流程了吗? 立即下载 IronXL,它可根据您的需求进行扩展。 请访问我们全面的文档以获取更多教程和示例。 探索API参考以获取详细的技术规格,并了解IronXL如何改变您的Excel自动化工作流程。

常见问题解答

IronXL 的主要功能是什么?

IronXL 提供了一种简化的解决方案,用于在 .NET 环境中将对象集合(如 List)导出到 Excel 文件,而不需要传统方法的复杂性。

IronXL 如何简化数据到Excel的导出过程?

IronXL通过提供ImportData方法简化了这一过程,使得开发人员可以轻松地将C#列表和复杂对象转化为专业的Excel电子表格,而无需使用Office Interop。

IronXL 可以用于 .NET Core 吗?

是的,IronXL与.NET Core兼容,并且适用于.NET和.NET Framework,使其在各种开发环境中都具有多功能性。

使用IronXL时是否需要Office Interop?

不,IronXL不需要Office Interop,这简化了过程并减少了将数据导出到Excel时的依赖性。

哪些类型的C#列表可以使用IronXL导出?

IronXL既可以导出通用列表,也可以导出复杂的对象,为开发人员处理各种数据结构提供了灵活的选择。

为什么将数据导出到Excel对业务应用程序很重要?

导出数据到Excel对于生成报告、共享见解和创建备份至关重要,这些都是有效业务运营和决策的基础。

IronXL是否支持创建专业的电子表格?

是的,IronXL旨在将C#列表转化为专业质量的Excel电子表格,适用于业务报告和数据分析。

IronXL 比传统的 Excel 文件创建方法有什么好处?

IronXL 消除了创建 Excel 文件所涉及的传统复杂性和依赖性,为开发人员提供了一种更高效和可靠的方法。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我