跳至页脚内容
使用 IRONXL

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

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

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

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

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

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

处理大型数据集时,传统方法经常面临内存管理和性能方面的问题。 IronXL 通过优化内部数据结构来解决这些问题,该结构能够高效地处理不同电子表格格式之间的转换,同时保持优异的性能特性。

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

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

Install-Package IronXL.Excel

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

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

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

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

! Excel电子表格显示了导出的员工数据,包含Id、姓名、部门、薪资和入职日期等列,并显示了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、价格、库存水平和补货日期等详细信息的产品对象列表,然后为每个项目计算一个派生的CalculatedValue 。 数据被转换为DataTable ,写入带有标题的 Excel 工作表,并使用自动调整列宽的方式进行格式化以提高可读性。 IronXL 可以无缝处理小数、布尔值和日期等数据类型,确保专业的电子表格输出。 生成ProductInventory文件提供了一个清晰、数据驱动的库存导出文件,非常适合用于业务报告或分析。

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

Excel电子表格显示了产品库存导出信息,包含SKU、产品名称、类别、价格、库存水平、是否在售状态、上次补货日期和计算值等列,涵盖各种电子产品和办公用品。

如何添加专业格式?

利用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、产品名称、类别、价格、库存水平(使用条件格式以红色突出显示零库存)、IsActive 状态、上次补货日期和计算值列。

如何才能最好地开始使用 IronXL?

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

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

该图书馆在数据交换操作方面也表现出色。 您可以将 XLSX 文件转换为 CSV 文件写入 CSV 文件读取 CSV 数据,甚至可以将 DataTables 转换为 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<T>)导出到 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 机器人,将他对技术的热爱与创造力相结合。