使用 IRONXL C# 导出对象至 Excel Curtis Chau 已更新:2026年2月27日 下载 IronXL NuGet 下载 DLL 下载 免费试用 LLM副本 LLM副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 将对象集合导出到 Excel 文件是商业应用的基本需求。 无论是生成报告、分享数据见解,还是创建 Excel 工作表进行备份,开发人员都需要一种可靠的方法将 List<t> 对象转换为专业的电子表格。 IronXL提供了一种解决方案,可以消除在.NET 10、 .NET Core或.NET Framework中创建 Excel 文件时遇到的传统困难——而无需在服务器上安装 Microsoft Office。 为什么将列表导出到 Excel 文件会遇到挑战? 将数据导出到 Excel 的传统方法通常涉及 Microsoft Office Interop,这需要在服务器上安装 MS Excel,并会带来部署上的麻烦。 手动逐个细胞进行反射计数既费时又容易出错。 IronXL 的数据导入功能通过在数据源和 Excel 列标题之间进行智能属性映射来解决这些问题,而无需 MS Office 或复杂的反射代码。 该库可自动处理类型转换,支持嵌套对象,并能跨不同格式(如 CSV 文件和 XLSX 文件)保持数据完整性。 对于不使用 Interop 的 C# Excel 操作开发人员来说, IronXL是现代.NET项目的理想选择,这些项目需要可靠的 Excel 生成和数据导入/导出功能。 IronXL如何简化对象导出? IronXL无需 COM 注册、Office 许可证和互操作程序集。 当您将 List<t> 导出到 Excel 时,库: 将对象属性直接映射到列标题 将.NET类型(bool)转换为正确的 Excel 表示形式 允许对单元格值、范围和格式进行精细控制 通过一次方法调用,即可将输出保存为 XLSX、XLS、CSV 和其他格式。 这种方法意味着您可以获得简洁、专业的电子表格输出,而无需编写数百行样板代码。 之后还可以从 Excel 导入数据,使往返数据工作流程变得简单。 如何安装IronXL? IronXL的入门设置非常简单。通过NuGet包管理器控制台安装库: Install-Package IronXL Install-Package IronXL SHELL 或使用 .NET CLI: dotnet add package IronXL dotnet add package IronXL SHELL 安装完成后,将 using IronXL; 指令添加到您的文件中。无需其他 Office 依赖项或运行时安装。 如何将简单列表导出到 Excel? 以下示例演示如何使用顶级语句( .NET 10 中的首选样式)将 Employee 对象列表导出到 XLSX 文件: using IronXL; using System.Data; // Define the Employee model record Employee(int Id, string Name, string Department, decimal Salary, DateTime HireDate); // Create sample employee data List<Employee> employees = [ new(1, "Alice Johnson", "Engineering", 95000, new DateTime(2020, 3, 15)), new(2, "Bob Smith", "Marketing", 75000, new DateTime(2021, 7, 1)), new(3, "Carol Williams","Engineering",105000, new DateTime(2019, 11, 20)) ]; // Build a DataTable from the list DataTable dataTable = new(); 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 emp in employees) dataTable.Rows.Add(emp.Id, emp.Name, emp.Department, emp.Salary, emp.HireDate); // Create an IronXL workbook and worksheet WorkBook workbook = new(); WorkSheet worksheet = workbook.CreateWorkSheet("Employees"); // Write headers for (int col = 0; col < dataTable.Columns.Count; col++) worksheet.SetCellValue(0, col, dataTable.Columns[col].ColumnName); // Write data rows for (int row = 0; row < dataTable.Rows.Count; row++) for (int col = 0; col < dataTable.Columns.Count; col++) worksheet.SetCellValue(row + 1, col, dataTable.Rows[row][col]); // Save as XLSX workbook.SaveAs("EmployeeReport.xlsx"); Console.WriteLine("EmployeeReport.xlsx saved."); using IronXL; using System.Data; // Define the Employee model record Employee(int Id, string Name, string Department, decimal Salary, DateTime HireDate); // Create sample employee data List<Employee> employees = [ new(1, "Alice Johnson", "Engineering", 95000, new DateTime(2020, 3, 15)), new(2, "Bob Smith", "Marketing", 75000, new DateTime(2021, 7, 1)), new(3, "Carol Williams","Engineering",105000, new DateTime(2019, 11, 20)) ]; // Build a DataTable from the list DataTable dataTable = new(); 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 emp in employees) dataTable.Rows.Add(emp.Id, emp.Name, emp.Department, emp.Salary, emp.HireDate); // Create an IronXL workbook and worksheet WorkBook workbook = new(); WorkSheet worksheet = workbook.CreateWorkSheet("Employees"); // Write headers for (int col = 0; col < dataTable.Columns.Count; col++) worksheet.SetCellValue(0, col, dataTable.Columns[col].ColumnName); // Write data rows for (int row = 0; row < dataTable.Rows.Count; row++) for (int col = 0; col < dataTable.Columns.Count; col++) worksheet.SetCellValue(row + 1, col, dataTable.Rows[row][col]); // Save as XLSX workbook.SaveAs("EmployeeReport.xlsx"); Console.WriteLine("EmployeeReport.xlsx saved."); $vbLabelText $csharpLabel 此示例将 List<Employee> 转换为 DataTable,然后将标题和行写入IronXL工作表。 IronXL可以自动处理 string 和 DateTime 等数据类型,确保生成的电子表格格式清晰。 Excel 的保存功能会生成一个 XLSX 文件,该文件可以在任何电子表格应用程序中打开。 如何导出复杂的业务对象? 实际的 .NET 应用程序通常涉及更复杂的数据结构。 以下示例生成包含计算属性的产品库存报告: using IronXL; using System.Data; // Define the Product model with a computed property record Product( string SKU, string ProductName, string Category, decimal Price, int StockLevel, bool IsActive, DateTime LastRestocked) { public decimal CalculatedValue => Price * StockLevel; } // Build the product list List<Product> products = [ new("TECH-001", "Wireless Mouse", "Electronics", 29.99m, 150, true, DateTime.Now.AddDays(-5)), new("TECH-002", "Mechanical Keyboard", "Electronics", 89.99m, 75, true, DateTime.Now.AddDays(-12)), new("OFF-001", "Desk Organizer", "Office Supplies", 15.99m, 0, false, DateTime.Now.AddMonths(-1)) ]; // Populate a DataTable DataTable dt = new(); dt.Columns.Add("SKU", typeof(string)); dt.Columns.Add("ProductName", typeof(string)); dt.Columns.Add("Category", typeof(string)); dt.Columns.Add("Price", typeof(decimal)); dt.Columns.Add("StockLevel", typeof(int)); dt.Columns.Add("IsActive", typeof(bool)); dt.Columns.Add("LastRestocked", typeof(DateTime)); dt.Columns.Add("CalculatedValue", typeof(decimal)); foreach (var p in products) dt.Rows.Add(p.SKU, p.ProductName, p.Category, p.Price, p.StockLevel, p.IsActive, p.LastRestocked, p.CalculatedValue); // Create the workbook WorkBook wb = WorkBook.Create(); WorkSheet ws = wb.CreateWorkSheet("Inventory"); // Write column headers string[] headers = ["SKU","ProductName","Category","Price", "StockLevel","IsActive","LastRestocked","CalculatedValue"]; for (int col = 0; col < headers.Length; col++) ws.SetCellValue(0, col, headers[col]); // Write data rows for (int row = 0; row < dt.Rows.Count; row++) for (int col = 0; col < dt.Columns.Count; col++) ws.SetCellValue(row + 1, col, dt.Rows[row][col]); // Auto-size columns for readability for (int col = 0; col < headers.Length; col++) ws.AutoSizeColumn(col); wb.SaveAs("ProductInventory.xlsx"); Console.WriteLine("ProductInventory.xlsx saved."); using IronXL; using System.Data; // Define the Product model with a computed property record Product( string SKU, string ProductName, string Category, decimal Price, int StockLevel, bool IsActive, DateTime LastRestocked) { public decimal CalculatedValue => Price * StockLevel; } // Build the product list List<Product> products = [ new("TECH-001", "Wireless Mouse", "Electronics", 29.99m, 150, true, DateTime.Now.AddDays(-5)), new("TECH-002", "Mechanical Keyboard", "Electronics", 89.99m, 75, true, DateTime.Now.AddDays(-12)), new("OFF-001", "Desk Organizer", "Office Supplies", 15.99m, 0, false, DateTime.Now.AddMonths(-1)) ]; // Populate a DataTable DataTable dt = new(); dt.Columns.Add("SKU", typeof(string)); dt.Columns.Add("ProductName", typeof(string)); dt.Columns.Add("Category", typeof(string)); dt.Columns.Add("Price", typeof(decimal)); dt.Columns.Add("StockLevel", typeof(int)); dt.Columns.Add("IsActive", typeof(bool)); dt.Columns.Add("LastRestocked", typeof(DateTime)); dt.Columns.Add("CalculatedValue", typeof(decimal)); foreach (var p in products) dt.Rows.Add(p.SKU, p.ProductName, p.Category, p.Price, p.StockLevel, p.IsActive, p.LastRestocked, p.CalculatedValue); // Create the workbook WorkBook wb = WorkBook.Create(); WorkSheet ws = wb.CreateWorkSheet("Inventory"); // Write column headers string[] headers = ["SKU","ProductName","Category","Price", "StockLevel","IsActive","LastRestocked","CalculatedValue"]; for (int col = 0; col < headers.Length; col++) ws.SetCellValue(0, col, headers[col]); // Write data rows for (int row = 0; row < dt.Rows.Count; row++) for (int col = 0; col < dt.Columns.Count; col++) ws.SetCellValue(row + 1, col, dt.Rows[row][col]); // Auto-size columns for readability for (int col = 0; col < headers.Length; col++) ws.AutoSizeColumn(col); wb.SaveAs("ProductInventory.xlsx"); Console.WriteLine("ProductInventory.xlsx saved."); $vbLabelText $csharpLabel 此代码构建一个包含 SKU、价格、库存水平和补货日期等详细信息的 Product 对象列表,然后为每个项目计算一个派生的 CalculatedValue。 IronXL可以处理小数、布尔值和日期等数据类型,确保专业的电子表格输出。 结果 ProductInventory.xlsx 提供了一个干净的、数据驱动的库存导出文件,适用于业务报告或分析。 如果您的现有代码库已经能够处理 DataTable 对象,您也可以直接将 DataTable 导出到 Excel 。 如何控制列宽和行高? 写入数据后,您可以通过编程方式控制电子表格的视觉布局。 IronXL 的 AutoSizeColumn 方法会调整每一列以适应其内容。 或者,您可以在保存之前设置明确的列宽,或者添加和删除行和列来调整工作表结构。 对于行高, IronXL提供了行级属性,允许您设置固定的像素高度——当工作表要打印或以 PDF 形式共享时非常有用。 一致的列和行大小还可以提高 Excel 文件在不同屏幕分辨率下打开或以不同比例打印时的可读性,这对于分发给外部利益相关者的报告尤为重要。 如何添加专业格式? 格式化功能可以将基本导出文件转换为精美的报告。 IronXL 的样式 API 可以对任何单元格或区域进行字体、颜色、边框和数字格式设置: using IronXL; WorkBook wb = WorkBook.Load("ProductInventory.xlsx"); WorkSheet ws = wb.DefaultWorkSheet; // Bold header row with a blue background and white text Range headerRange = ws["A1:H1"]; headerRange.Style.Font.Bold = true; headerRange.Style.BackgroundColor = "#4472C4"; headerRange.Style.Font.Color = "#FFFFFF"; // Format the Price column as currency Range priceColumn = ws["D2:D100"]; priceColumn.Style.NumberFormat = "$#,##0.00"; // Highlight low-stock rows in red for (int row = 2; row <= 4; row++) { var stockCell = ws[$"E{row}"]; if (stockCell.IntValue < 10) stockCell.Style.BackgroundColor = "#FF6B6B"; } wb.SaveAs("FormattedInventory.xlsx"); Console.WriteLine("FormattedInventory.xlsx saved."); using IronXL; WorkBook wb = WorkBook.Load("ProductInventory.xlsx"); WorkSheet ws = wb.DefaultWorkSheet; // Bold header row with a blue background and white text Range headerRange = ws["A1:H1"]; headerRange.Style.Font.Bold = true; headerRange.Style.BackgroundColor = "#4472C4"; headerRange.Style.Font.Color = "#FFFFFF"; // Format the Price column as currency Range priceColumn = ws["D2:D100"]; priceColumn.Style.NumberFormat = "$#,##0.00"; // Highlight low-stock rows in red for (int row = 2; row <= 4; row++) { var stockCell = ws[$"E{row}"]; if (stockCell.IntValue < 10) stockCell.Style.BackgroundColor = "#FF6B6B"; } wb.SaveAs("FormattedInventory.xlsx"); Console.WriteLine("FormattedInventory.xlsx saved."); $vbLabelText $csharpLabel 这些样式选项可以将原始数据导出转换为可供高管阅读的报告。 醒目的标题搭配背景色,可以创建视觉层次感。 数字格式化确保货币值正确显示。 条件格式突出显示关键业务指标,例如低库存水平,使导出的 Excel 电子表格能够立即用于库存管理。 您可以了解更多关于高级单元格格式和边框样式的信息,以进一步增强导出效果。 使用IronXL将对象列表导出到 Excel:图 3 - 格式化工作表 如何以编程方式应用条件格式? IronXL支持与 Excel 内置功能类似的条件格式规则。 您可以根据单元格值阈值、文本匹配或日期范围定义规则。 将规则应用于某个范围后, IronXL会写入相应的 XLSX 格式元数据,以便该文件在 Excel 或 Google Sheets 中打开时能够按预期运行。 当导出的文件将由非技术利益相关者查看时,这尤其有用,因为他们希望看到的是颜色编码的报告,而不是普通的表格数据。 导出数据前如何对数据进行排序和筛选? 您可以先对 List<t> 进行排序和筛选,然后再将其写入 Excel。 使用标准 LINQ,您可以按部门和薪资对员工进行排序,或者筛选产品,只显示活跃商品。 筛选后的列表准备就绪后,使用上面所示的逐列方法将其写入工作表。 IronXL还支持直接在工作簿中对已填充范围内的单元格进行排序——允许在填充后进行排序,而无需返回到原始集合。 如何将列表导出为其他文件格式? IronXL不仅限于 XLSX 格式。 同一个 WorkBook 对象只需更改一个方法即可保存为多种格式: XLSX -- 默认的现代 Excel 格式:workbook.SaveAs("output.xlsx") XLS -- 旧版 Office 使用的 Excel 格式 CSV -- 用于数据管道兼容性的逗号分隔值 TSV -- 制表符分隔值 导出为CSV 格式时,每个工作表都会生成一个单独的 CSV 文件。这使得IronXL不仅适用于最终用户报表,还适用于生成 ETL 管道、数据科学工具或第三方 API 使用的中间数据文件。对于导出 DataGridView 数据(Windows Forms 应用程序中的常见模式), IronXL可以无缝集成,无需额外的适配器。 如何高效处理大型数据集? 导出数千行数据时,性能就成了问题。 请牢记以下准则: 首先填充 DataTable,然后在循环中写入行,而不是通过反射反复调用单个单元格设置器方法。 只有在所有数据写入完毕后才能调用 AutoSizeColumn,因为它是读取扫描操作。 避免在紧密的循环中打开工作簿进行重新读取和重新保存——在内存中构建完整的数据集,然后调用 SaveAs 一次。 对于超过 100,000 行的数据集,请考虑将导出内容拆分到多个工作表中,以遵守 Excel 的行数限制并保持文件大小可控。 IronXL还提供了一个ASP.NET Core导出工作流,其中 XLSX 文件直接写入 MemoryStream 并作为文件下载响应返回,完全绕过磁盘 I/O。 如何在ASP.NET Core中将列表导出到 Excel? 构建 Web API 或Razor Pages 应用程序时,通常希望将 Excel 文件作为 HTTP 响应返回,而不是将其保存到磁盘。 以下模式从控制器操作返回 FileContentResult: 控制器注入一个服务,该服务构建 WorkBook,调用 workbook.ToByteArray(),然后返回 MIME 类型为 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 且带有 Content-Disposition: attachment 标头的字节。 这种方法适用于任何.NET 10 最小 API 或 MVC 控制器。 如需完整演练,请参阅ASP.NET Core Excel 导出教程;如果您正在构建Blazor WebAssembly 或Blazor Server 应用程序,请参阅Blazor导出教程。 如何立即开始使用IronXL ? IronXL将 Excel 生成任务转化为可维护的代码。 它的 API 消除了对 Microsoft Office 的依赖,同时提供了满足企业要求的专业结果。 该库的功能集涵盖了从基本列表导出到带有样式和格式的复杂数据转换的所有操作。 您还可以使用IronXL读取和编辑现有工作簿,将 Excel 数据导出到 DataTable进行进一步处理,或 创建数据透视表以生成汇总报告。 将这些功能与上面显示的格式选项结合使用,即可生成无需手动调整即可分发的电子表格。 IronXL可在NuGet上获取,并适用于任何面向.NET 10、 .NET 8 或.NET Framework 4.6.2+ 的项目。 Open XML SDK是IronXL读取和写入 XLSX 文件格式的基础,让您确信生成的文件符合 ECMA-376 标准,并且可以在任何兼容 OOXML 的应用程序中正确打开。 立即开始使用 IronXL。 免费开始 准备好开始将 C# 列表导出到 Excel 了吗? 立即下载IronXL ,体验在.NET应用程序中将列表对象快速转换为 Excel 格式的功能。 对于生产环境部署,请探索可根据您的需求进行扩展的灵活许可选项。 请访问文档以获取更多教程和示例。 常见问题解答 如何将 C# 列表导出为 Excel 文件? 您可以使用 IronXl.Excel 的 ImportData 方法将 C# 列表导出到 Excel 文件,该方法无需 Office Interop 即可简化流程。 为什么要使用 IronXL 将数据导出到 Excel? IronXL for .NET 消除了传统的复杂性,并可与 .NET、.NET Core 或 .NET Framework 轻松集成,为将数据导出到 Excel 提供了简化的解决方案。 我需要安装 Microsoft Office 来使用 IronXL 吗? 不,IronXL 不需要安装 Microsoft Office。它可以独立运行,允许您以编程方式创建和处理 Excel 文件。 IronXl.Excel 能否在导出到 Excel 时处理列表中的复杂对象? 是的,IronXl.Excel 既可以处理通用列表,也可以处理复杂对象,可以灵活地将各种类型的数据导出到 Excel。 IronXL与.NET Core兼容吗? 是的,IronXL 与 .NET Core 以及 .NET 和 .NET Framework 兼容,使其成为适用于不同开发环境的通用工具。 使用 IronXL 的 ImportData 方法有什么优势? IronXl.Excel 中的 ImportData 方法简化了从 C# 列表向 Excel 传输数据的过程,降低了代码复杂性并提高了工作效率。 我可以使用 IronXL 创建专业的电子表格吗? 当然,IronXL允许开发人员轻松地将List对象转换为适用于报告、数据共享或备份的专业电子表格。 是否有使用 IronXL 的代码示例? 是的,IronXL 文档和教程提供了将通用列表和复杂对象导出到 Excel 的简单代码示例。 Curtis Chau 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已更新2026年3月1日 在.NET C# 中下载 Excel 文件:将数据导出为 XLSX、CSV 等格式 使用 C# 和IronXL在ASP.NET Core中下载 Excel 文件。从 MVC 控制器导出数据到 XLSX、CSV 和 XML 格式,并返回 MemoryStream 和 File() 函数。包含代码示例。 阅读更多 已更新2026年3月1日 如何在Blazor中使用IronXL导出 Excel 文件 学习如何使用IronXL在Blazor Server 应用程序中将数据导出到 Excel。本指南涵盖项目设置、服务设计、条件格式设置、多工作表报表和错误处理,并提供完整的 C# 代码示例。 阅读更多 已更新2026年2月27日 如何在 C# 中读取 Excel 文件而不是使用 StreamReader 了解为什么 StreamReader 无法读取 Excel 文件,以及如何在 C# .NET中使用IronXL从磁盘或内存流加载 XLSX 和 XLS 工作簿。 阅读更多 如何使用IronXL在 C# 中将 HTML 表格导出到 Excel如何在IronXL中使用.NET Core C...
已更新2026年3月1日 在.NET C# 中下载 Excel 文件:将数据导出为 XLSX、CSV 等格式 使用 C# 和IronXL在ASP.NET Core中下载 Excel 文件。从 MVC 控制器导出数据到 XLSX、CSV 和 XML 格式,并返回 MemoryStream 和 File() 函数。包含代码示例。 阅读更多
已更新2026年3月1日 如何在Blazor中使用IronXL导出 Excel 文件 学习如何使用IronXL在Blazor Server 应用程序中将数据导出到 Excel。本指南涵盖项目设置、服务设计、条件格式设置、多工作表报表和错误处理,并提供完整的 C# 代码示例。 阅读更多
已更新2026年2月27日 如何在 C# 中读取 Excel 文件而不是使用 StreamReader 了解为什么 StreamReader 无法读取 Excel 文件,以及如何在 C# .NET中使用IronXL从磁盘或内存流加载 XLSX 和 XLS 工作簿。 阅读更多