使用 IRONXL 如何使用IronXL在 C# 中生成 Excel 文件 Curtis Chau 已更新:2026年3月1日 下载 IronXL NuGet 下载 DLL 下载 免费试用 LLM副本 LLM副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 传统上,在C#中以编程方式生成Excel工作表文件需要安装Microsoft Office或复杂的COM互操作。IronXL彻底改变了这一切,提供了一个简单的API,无需任何Office依赖项即可创建Excel文件。 本教程将引导您使用 IronXl.Excel 在 C# 中构建 Excel 文件,从基本的电子表格创建到高级格式化和数据库集成。 无论是创建报告、导出数据(XLS或XLSX文件)还是自动生成电子表格,您都会学习在.NET应用程序中使用Excel的基本技术。 为什么要在没有Microsoft Office的情况下生成Excel文件? 在不依赖 Office 的情况下开发 Excel 生成功能,解决了关键的部署难题。 由于许可成本和资源开销,服务器环境很少安装 Microsoft Office。 每次安装 Office 都需要大量的磁盘空间和内存,因此对于云部署或容器化应用程序来说并不实用。 IronXL独立运行,消除了这些限制。 您的 C# Excel 文件生成可在 Windows、Linux、macOS、Docker 容器或 Azure 应用服务上运行,无需修改。 这种跨平台兼容性意味着您只需编写一次代码即可在任何地方部署,无论是针对.NET Framework、.NET Core还是.NET 10应用程序。 性能显著提高,无需 COM Interop 开销。 传统的办公自动化会为每个操作创建单独的进程实例,从而消耗内存和 CPU 资源。 IronXL在应用程序的进程空间内内存中处理所有内容,在以编程方式生成Excel文件时实现更快的执行和更低的资源消耗。 由于 IronXL 以一个 NuGet 包的形式发布,因此部署变得非常简单。 没有注册表条目,没有COM注册,也没有Office服务包需要维护。 您的持续集成管道无缝工作,Docker容器保持轻量。 这种简化方法使 IronXL 大受欢迎,在各种 开发人员论坛上,专业人士分享了他们在 Excel 自动化方面的经验。 一些开发者仍在探索Microsoft的Open XML Productivity Tool,以直接操作Office Open XML文件结构。 不过,这种方法需要更多的人工努力,以及对 XML 架构和 Open XML SDK 安装的详细了解。 IronXL 消除了这些复杂性,让您能够更快地以编程方式使用 Excel。 如何在C#项目中安装IronXL? 通过Visual Studio中的NuGet包管理器安装IronXL只需片刻。 右键点击解决方案资源管理器中的项目,选择"管理NuGet包"。搜索"IronXl.Excel"并点击安装。 该软件包自动包含用 C# 生成 Excel 文件所需的所有依赖项。 要通过包管理器控制台或.NET CLI安装,请使用以下任一命令: Install-Package IronXl.Excel dotnet add package IronXl.Excel Install-Package IronXl.Excel dotnet add package IronXl.Excel SHELL 通过这个简单的测试验证安装,以确认库已准备就绪: using IronXL; // Create an in-memory workbook var workbook = WorkBook.Create(); Console.WriteLine("IronXL installed successfully!"); using IronXL; // Create an in-memory workbook var workbook = WorkBook.Create(); Console.WriteLine("IronXL installed successfully!"); $vbLabelText $csharpLabel 如果运行没有错误,IronXL已准备就绪。 该库支持所有现代 .NET 版本,确保与您现有的项目兼容。 有关详细的安装指南和故障排除,请查阅官方NuGet安装文档。 输出 如何创建您的第一个Excel文件? 通过IronXL创建Excel文件始于WorkBook类,这是您进行所有Excel操作的入口。 该库支持现代XLSX和传统XLS格式,当您在C#中创建Excel文件时,为不同需求提供了灵活性。 using IronXL; // Create a new workbook (XLSX format by default) WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX); // Add metadata workbook.Metadata.Title = "Monthly Sales Report"; workbook.Metadata.Author = "Sales Department"; workbook.Metadata.Comments = "Generated using IronXL"; // Create a worksheet WorkSheet worksheet = workbook.CreateWorkSheet("January Sales"); // Add header row worksheet["A1"].Value = "Date"; worksheet["B1"].Value = "Product"; worksheet["C1"].Value = "Quantity"; worksheet["D1"].Value = "Revenue"; // Add data rows worksheet["A2"].Value = new DateTime(2024, 1, 15); worksheet["B2"].Value = "Widget Pro"; worksheet["C2"].Value = 100; worksheet["D2"].Value = 2500.00; // Save the workbook workbook.SaveAs("FirstExcelFile.xlsx"); using IronXL; // Create a new workbook (XLSX format by default) WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX); // Add metadata workbook.Metadata.Title = "Monthly Sales Report"; workbook.Metadata.Author = "Sales Department"; workbook.Metadata.Comments = "Generated using IronXL"; // Create a worksheet WorkSheet worksheet = workbook.CreateWorkSheet("January Sales"); // Add header row worksheet["A1"].Value = "Date"; worksheet["B1"].Value = "Product"; worksheet["C1"].Value = "Quantity"; worksheet["D1"].Value = "Revenue"; // Add data rows worksheet["A2"].Value = new DateTime(2024, 1, 15); worksheet["B2"].Value = "Widget Pro"; worksheet["C2"].Value = 100; worksheet["D2"].Value = 2500.00; // Save the workbook workbook.SaveAs("FirstExcelFile.xlsx"); $vbLabelText $csharpLabel 这段代码演示了 Excel 文件生成的几个关键概念。 WorkBook.Create()方法在内存中初始化新Excel文件。 您可以使用ExcelFileFormat枚举指定格式——选择XLSX以实现与现代Excel的兼容性,或选择XLS以支持传统格式。 Metadata属性允许您嵌入文档信息,该信息显示在Excel的文件属性中,遵循Microsoft的文档属性标准。 CreateWorkSheet()方法添加具有指定名称的新工作表。 Excel 熟悉的单元格符号(A1、B1 等)使数值设置更加直观。IronXL 可自动处理数据类型转换,无需显式转换即可识别日期、数字和文本。 SaveAs()方法将完整的Excel文件写入磁盘。 有关更多工作表操作,请参阅如何编写Excel文件指南。 输出 如何将数据写入Excel单元格? IronXl.Excel 提供了多种填充 Excel 单元格的方法,从单个单元格赋值到批量范围操作。 理解这些方法可以帮助您在向Excel文件写入数据时选择最有效的数据场景方法。 using IronXL; WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX); WorkSheet worksheet = workbook.CreateWorkSheet("Employees"); // Individual cell assignment worksheet["A1"].Value = "Employee Name"; worksheet["A2"].Value = "John Smith"; worksheet["A3"].Value = "Jane Doe"; // Range assignment for multiple cells at once worksheet["B1:B3"].Value = "Active"; // Using numeric indices (0-based row, 0-based column) worksheet.SetCellValue(0, 2, "Department"); // C1 worksheet.SetCellValue(1, 2, "Sales"); // C2 worksheet.SetCellValue(2, 2, "Marketing"); // C3 // Array-based header population string[] headers = { "ID", "Name", "Email", "Phone" }; for (int i = 0; i < headers.Length; i++) { worksheet.SetCellValue(0, i, headers[i]); } // Working with different data types worksheet["E1"].Value = "Salary"; worksheet["E2"].Value = 75000.50m; // Decimal for currency worksheet["E3"].Value = 82000.75m; worksheet["F1"].Value = "Start Date"; worksheet["F2"].Value = new DateTime(2020, 3, 15); worksheet["F3"].Value = new DateTime(2019, 7, 1); worksheet["G1"].Value = "Full Time"; worksheet["G2"].Value = true; // Boolean worksheet["G3"].Value = true; workbook.SaveAs("EmployeeData.xlsx"); using IronXL; WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX); WorkSheet worksheet = workbook.CreateWorkSheet("Employees"); // Individual cell assignment worksheet["A1"].Value = "Employee Name"; worksheet["A2"].Value = "John Smith"; worksheet["A3"].Value = "Jane Doe"; // Range assignment for multiple cells at once worksheet["B1:B3"].Value = "Active"; // Using numeric indices (0-based row, 0-based column) worksheet.SetCellValue(0, 2, "Department"); // C1 worksheet.SetCellValue(1, 2, "Sales"); // C2 worksheet.SetCellValue(2, 2, "Marketing"); // C3 // Array-based header population string[] headers = { "ID", "Name", "Email", "Phone" }; for (int i = 0; i < headers.Length; i++) { worksheet.SetCellValue(0, i, headers[i]); } // Working with different data types worksheet["E1"].Value = "Salary"; worksheet["E2"].Value = 75000.50m; // Decimal for currency worksheet["E3"].Value = 82000.75m; worksheet["F1"].Value = "Start Date"; worksheet["F2"].Value = new DateTime(2020, 3, 15); worksheet["F3"].Value = new DateTime(2019, 7, 1); worksheet["G1"].Value = "Full Time"; worksheet["G2"].Value = true; // Boolean worksheet["G3"].Value = true; workbook.SaveAs("EmployeeData.xlsx"); $vbLabelText $csharpLabel 代码显示了 IronXL 灵活的单元格寻址。 字符串符号("A1")让 Excel 用户感觉很自然,而数字索引则为循环和动态生成提供了程序控制。 范围分配("B1:B3")有效地将多个单元格设置为相同的值,非常适合初始化列或应用默认值。 IronXL智能处理不同数据类型。小数保留精度以确保财务数据准确,DateTime对象可以正确格式化为Excel日期,布尔值显示为TRUE/FALSE。 这种自动转换消除了手动格式化代码,同时确保了数据的完整性。 对于大型数据集,请查阅导入数据指南以获取其他模式。 输出 如何对Excel文件应用专业格式? 专业 Excel 文件需要的不仅仅是原始数据。 IronXL的样式API通过格式、颜色和视觉层次结构将普通电子表格转换为精致的商业文档。 您可以应用单元格格式来控制电子表格的每一个视觉方面。 using IronXL; WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX); WorkSheet worksheet = workbook.CreateWorkSheet("Employees"); // Header formatting var headerRange = worksheet["A1:D1"]; headerRange.Style.Font.Bold = true; headerRange.Style.Font.Height = 12; headerRange.Style.SetBackgroundColor("#4472C4"); headerRange.Style.Font.Color = "#FFFFFF"; // Column width adjustment worksheet.AutoSizeColumn(0); // Auto-fit column A worksheet.GetColumn(1).Width = 20; // Set column B width // Number formatting var salaryColumn = worksheet["E2:E3"]; salaryColumn.FormatString = "$#,##0.00"; // Date formatting var dateColumn = worksheet["F2:F3"]; dateColumn.FormatString = "MM/dd/yyyy"; // Cell borders var dataRange = worksheet["A1:G3"]; dataRange.Style.TopBorder.Type = IronXl.Styles.BorderType.Thin; dataRange.Style.BottomBorder.Type = IronXl.Styles.BorderType.Thin; dataRange.Style.LeftBorder.Type = IronXl.Styles.BorderType.Thin; dataRange.Style.RightBorder.Type = IronXl.Styles.BorderType.Thin; dataRange.Style.TopBorder.Color = "#000000"; dataRange.Style.BottomBorder.Color = "#000000"; // Text alignment worksheet["A1:G1"].Style.HorizontalAlignment = IronXl.Styles.HorizontalAlignment.Center; // Alternating row colors for readability (banded rows) for (int row = 2; row <= 10; row++) { if (row % 2 == 0) { worksheet[$"A{row}:G{row}"].Style.SetBackgroundColor("#F2F2F2"); } } workbook.SaveAs("FormattedReport.xlsx"); using IronXL; WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX); WorkSheet worksheet = workbook.CreateWorkSheet("Employees"); // Header formatting var headerRange = worksheet["A1:D1"]; headerRange.Style.Font.Bold = true; headerRange.Style.Font.Height = 12; headerRange.Style.SetBackgroundColor("#4472C4"); headerRange.Style.Font.Color = "#FFFFFF"; // Column width adjustment worksheet.AutoSizeColumn(0); // Auto-fit column A worksheet.GetColumn(1).Width = 20; // Set column B width // Number formatting var salaryColumn = worksheet["E2:E3"]; salaryColumn.FormatString = "$#,##0.00"; // Date formatting var dateColumn = worksheet["F2:F3"]; dateColumn.FormatString = "MM/dd/yyyy"; // Cell borders var dataRange = worksheet["A1:G3"]; dataRange.Style.TopBorder.Type = IronXl.Styles.BorderType.Thin; dataRange.Style.BottomBorder.Type = IronXl.Styles.BorderType.Thin; dataRange.Style.LeftBorder.Type = IronXl.Styles.BorderType.Thin; dataRange.Style.RightBorder.Type = IronXl.Styles.BorderType.Thin; dataRange.Style.TopBorder.Color = "#000000"; dataRange.Style.BottomBorder.Color = "#000000"; // Text alignment worksheet["A1:G1"].Style.HorizontalAlignment = IronXl.Styles.HorizontalAlignment.Center; // Alternating row colors for readability (banded rows) for (int row = 2; row <= 10; row++) { if (row % 2 == 0) { worksheet[$"A{row}:G{row}"].Style.SetBackgroundColor("#F2F2F2"); } } workbook.SaveAs("FormattedReport.xlsx"); $vbLabelText $csharpLabel 这段格式代码创建了符合商业标准的专业外观。 带有背景颜色的粗体标题建立了视觉层次。 SetBackgroundColor()方法接受十六进制颜色代码,精确控制您的配色方案。 字体属性包括大小、颜色、粗体、斜体和下划线选项——所有这些都是创建符合企业品牌指导原则的Excel文件所必需的。 列宽调整可防止文本截断。 GetColumn().Width提供精确控制。 数字格式使用Excel的格式代码——例如,"$#,##0.00"以千位分隔符和两个小数位显示货币。 日期格式使用类似模式,使用Excel日期格式字符串,如Microsoft的数字格式代码参考所记述。 边框定义数据边界,提高可读性。 BorderType枚举提供各种样式:细、中、粗、点状和虚线。 交替的行列颜色通常被称为 "带状行列",有助于读者在宽泛的数据集中追踪信息。 要了解有关合并单元格和其他布局功能的更多信息,请参阅合并单元格指南。 输出 如何以编程方式使用Excel公式? Excel 公式通过自动计算使电子表格栩栩如生。 IronXL 支持公式创建和评估,可实现自动更新的动态电子表格。 using IronXL; var workbook = WorkBook.Create(); // Create a budget worksheet WorkSheet budget = workbook.CreateWorkSheet("Q1 Budget"); // Headers budget["A1"].Value = "Category"; budget["B1"].Value = "January"; budget["C1"].Value = "February"; budget["D1"].Value = "March"; budget["E1"].Value = "Q1 Total"; // Budget categories and values string[] categories = { "Salaries", "Marketing", "Operations", "Equipment", "Training" }; decimal[,] monthlyBudgets = { { 50000, 52000, 51000 }, { 15000, 18000, 20000 }, { 8000, 8500, 9000 }, { 12000, 5000, 7000 }, { 3000, 3500, 4000 } }; // Populate data and add row total formulas for (int i = 0; i < categories.Length; i++) { budget[$"A{i + 2}"].Value = categories[i]; budget[$"B{i + 2}"].Value = monthlyBudgets[i, 0]; budget[$"C{i + 2}"].Value = monthlyBudgets[i, 1]; budget[$"D{i + 2}"].Value = monthlyBudgets[i, 2]; budget[$"E{i + 2}"].Formula = $"=SUM(B{i + 2}:D{i + 2})"; } // Monthly totals row budget["A7"].Value = "Monthly Total"; budget["B7"].Formula = "=SUM(B2:B6)"; budget["C7"].Formula = "=SUM(C2:C6)"; budget["D7"].Formula = "=SUM(D2:D6)"; budget["E7"].Formula = "=SUM(E2:E6)"; // Calculate percentages budget["A9"].Value = "Marketing %"; budget["B9"].Formula = "=B3/B7*100"; // Average calculation budget["A10"].Value = "Average Spending"; budget["B10"].Formula = "=AVERAGE(B2:B6)"; // Evaluate all formulas before saving workbook.EvaluateAll(); workbook.SaveAs("Budget.xlsx"); using IronXL; var workbook = WorkBook.Create(); // Create a budget worksheet WorkSheet budget = workbook.CreateWorkSheet("Q1 Budget"); // Headers budget["A1"].Value = "Category"; budget["B1"].Value = "January"; budget["C1"].Value = "February"; budget["D1"].Value = "March"; budget["E1"].Value = "Q1 Total"; // Budget categories and values string[] categories = { "Salaries", "Marketing", "Operations", "Equipment", "Training" }; decimal[,] monthlyBudgets = { { 50000, 52000, 51000 }, { 15000, 18000, 20000 }, { 8000, 8500, 9000 }, { 12000, 5000, 7000 }, { 3000, 3500, 4000 } }; // Populate data and add row total formulas for (int i = 0; i < categories.Length; i++) { budget[$"A{i + 2}"].Value = categories[i]; budget[$"B{i + 2}"].Value = monthlyBudgets[i, 0]; budget[$"C{i + 2}"].Value = monthlyBudgets[i, 1]; budget[$"D{i + 2}"].Value = monthlyBudgets[i, 2]; budget[$"E{i + 2}"].Formula = $"=SUM(B{i + 2}:D{i + 2})"; } // Monthly totals row budget["A7"].Value = "Monthly Total"; budget["B7"].Formula = "=SUM(B2:B6)"; budget["C7"].Formula = "=SUM(C2:C6)"; budget["D7"].Formula = "=SUM(D2:D6)"; budget["E7"].Formula = "=SUM(E2:E6)"; // Calculate percentages budget["A9"].Value = "Marketing %"; budget["B9"].Formula = "=B3/B7*100"; // Average calculation budget["A10"].Value = "Average Spending"; budget["B10"].Formula = "=AVERAGE(B2:B6)"; // Evaluate all formulas before saving workbook.EvaluateAll(); workbook.SaveAs("Budget.xlsx"); $vbLabelText $csharpLabel 本预算示例说明了公式的实际应用。 Formula属性接受标准的Excel公式语法,以等号开头。 IronXL 支持常用函数:SUM、AVERAGE、COUNT、MAX、MIN 等。 公式中的单元格引用与 Excel 完全相同,包括相对引用和绝对引用。 EvaluateAll()方法处理所有公式,更新整个工作簿中的计算值。 这确保了公式在Excel中打开文件时显示结果。 如果没有计算,Excel将显示公式文本,直到用户触发重计算为止。 有关读取公式结果的更多信息,请参阅读取Excel文件文档。 输出 如何将数据库数据导出到Excel? 现实世界中的应用程序通常会将数据库数据导出到 Excel 中,用于报告和分析。 IronXL通过内置的DataTable支持简化了这个过程,消除了在从C#应用程序导出Excel时需要手动字段映射。 using System.Data; using IronXL; // Simulate database retrieval (replace with actual database code) DataTable GetSalesData() { DataTable dt = new DataTable("Sales"); dt.Columns.Add("OrderID", typeof(int)); dt.Columns.Add("CustomerName", typeof(string)); dt.Columns.Add("Product", typeof(string)); dt.Columns.Add("Quantity", typeof(int)); dt.Columns.Add("UnitPrice", typeof(decimal)); dt.Columns.Add("OrderDate", typeof(DateTime)); dt.Rows.Add(1001, "ABC Corp", "Widget Pro", 50, 25.99m, DateTime.Now.AddDays(-5)); dt.Rows.Add(1002, "XYZ Ltd", "Widget Basic", 100, 15.99m, DateTime.Now.AddDays(-4)); dt.Rows.Add(1003, "ABC Corp", "Widget Premium", 25, 45.99m, DateTime.Now.AddDays(-3)); dt.Rows.Add(1004, "Tech Solutions", "Widget Pro", 75, 25.99m, DateTime.Now.AddDays(-2)); dt.Rows.Add(1005, "XYZ Ltd", "Widget Premium", 30, 45.99m, DateTime.Now.AddDays(-1)); return dt; } // Export to Excel WorkBook reportWorkbook = WorkBook.Create(); WorkSheet reportSheet = reportWorkbook.CreateWorkSheet("Sales Report"); DataTable salesData = GetSalesData(); // Title row reportSheet["A1"].Value = "Order Report - " + DateTime.Now.ToString("MMMM yyyy"); reportSheet.Merge("A1:F1"); reportSheet["A1"].Style.Font.Bold = true; reportSheet["A1"].Style.Font.Height = 14; // Headers int headerRow = 3; for (int col = 0; col < salesData.Columns.Count; col++) { reportSheet.SetCellValue(headerRow - 1, col, salesData.Columns[col].ColumnName); } var headers = reportSheet[$"A{headerRow}:F{headerRow}"]; headers.Style.Font.Bold = true; headers.Style.SetBackgroundColor("#D9E1F2"); // Data rows for (int row = 0; row < salesData.Rows.Count; row++) { for (int col = 0; col < salesData.Columns.Count; col++) { reportSheet.SetCellValue(row + headerRow, col, salesData.Rows[row][col]); } reportSheet[$"G{row + headerRow + 1}"].Formula = $"=D{row + headerRow + 1}*E{row + headerRow + 1}"; } // Total header reportSheet["G3"].Value = "Total"; reportSheet["G3"].Style.Font.Bold = true; reportSheet["G3"].Style.SetBackgroundColor("#D9E1F2"); // Format currency and date columns reportSheet[$"E{headerRow + 1}:E{headerRow + salesData.Rows.Count}"].FormatString = "$#,##0.00"; reportSheet[$"G{headerRow + 1}:G{headerRow + salesData.Rows.Count}"].FormatString = "$#,##0.00"; reportSheet[$"F{headerRow + 1}:F{headerRow + salesData.Rows.Count}"].FormatString = "MM/dd/yyyy"; // Summary section int summaryRow = headerRow + salesData.Rows.Count + 2; reportSheet[$"A{summaryRow}"].Value = "Summary"; reportSheet[$"A{summaryRow}"].Style.Font.Bold = true; reportSheet[$"A{summaryRow + 1}"].Value = "Total Orders:"; reportSheet[$"B{summaryRow + 1}"].Formula = $"=COUNTA(A{headerRow + 1}:A{headerRow + salesData.Rows.Count})"; reportSheet[$"A{summaryRow + 2}"].Value = "Total Revenue:"; reportSheet[$"B{summaryRow + 2}"].Formula = $"=SUM(G{headerRow + 1}:G{headerRow + salesData.Rows.Count})"; reportSheet[$"B{summaryRow + 2}"].FormatString = "$#,##0.00"; for (int col = 0; col <= 6; col++) { reportSheet.AutoSizeColumn(col); } reportWorkbook.EvaluateAll(); reportWorkbook.SaveAs("DatabaseExport.xlsx"); using System.Data; using IronXL; // Simulate database retrieval (replace with actual database code) DataTable GetSalesData() { DataTable dt = new DataTable("Sales"); dt.Columns.Add("OrderID", typeof(int)); dt.Columns.Add("CustomerName", typeof(string)); dt.Columns.Add("Product", typeof(string)); dt.Columns.Add("Quantity", typeof(int)); dt.Columns.Add("UnitPrice", typeof(decimal)); dt.Columns.Add("OrderDate", typeof(DateTime)); dt.Rows.Add(1001, "ABC Corp", "Widget Pro", 50, 25.99m, DateTime.Now.AddDays(-5)); dt.Rows.Add(1002, "XYZ Ltd", "Widget Basic", 100, 15.99m, DateTime.Now.AddDays(-4)); dt.Rows.Add(1003, "ABC Corp", "Widget Premium", 25, 45.99m, DateTime.Now.AddDays(-3)); dt.Rows.Add(1004, "Tech Solutions", "Widget Pro", 75, 25.99m, DateTime.Now.AddDays(-2)); dt.Rows.Add(1005, "XYZ Ltd", "Widget Premium", 30, 45.99m, DateTime.Now.AddDays(-1)); return dt; } // Export to Excel WorkBook reportWorkbook = WorkBook.Create(); WorkSheet reportSheet = reportWorkbook.CreateWorkSheet("Sales Report"); DataTable salesData = GetSalesData(); // Title row reportSheet["A1"].Value = "Order Report - " + DateTime.Now.ToString("MMMM yyyy"); reportSheet.Merge("A1:F1"); reportSheet["A1"].Style.Font.Bold = true; reportSheet["A1"].Style.Font.Height = 14; // Headers int headerRow = 3; for (int col = 0; col < salesData.Columns.Count; col++) { reportSheet.SetCellValue(headerRow - 1, col, salesData.Columns[col].ColumnName); } var headers = reportSheet[$"A{headerRow}:F{headerRow}"]; headers.Style.Font.Bold = true; headers.Style.SetBackgroundColor("#D9E1F2"); // Data rows for (int row = 0; row < salesData.Rows.Count; row++) { for (int col = 0; col < salesData.Columns.Count; col++) { reportSheet.SetCellValue(row + headerRow, col, salesData.Rows[row][col]); } reportSheet[$"G{row + headerRow + 1}"].Formula = $"=D{row + headerRow + 1}*E{row + headerRow + 1}"; } // Total header reportSheet["G3"].Value = "Total"; reportSheet["G3"].Style.Font.Bold = true; reportSheet["G3"].Style.SetBackgroundColor("#D9E1F2"); // Format currency and date columns reportSheet[$"E{headerRow + 1}:E{headerRow + salesData.Rows.Count}"].FormatString = "$#,##0.00"; reportSheet[$"G{headerRow + 1}:G{headerRow + salesData.Rows.Count}"].FormatString = "$#,##0.00"; reportSheet[$"F{headerRow + 1}:F{headerRow + salesData.Rows.Count}"].FormatString = "MM/dd/yyyy"; // Summary section int summaryRow = headerRow + salesData.Rows.Count + 2; reportSheet[$"A{summaryRow}"].Value = "Summary"; reportSheet[$"A{summaryRow}"].Style.Font.Bold = true; reportSheet[$"A{summaryRow + 1}"].Value = "Total Orders:"; reportSheet[$"B{summaryRow + 1}"].Formula = $"=COUNTA(A{headerRow + 1}:A{headerRow + salesData.Rows.Count})"; reportSheet[$"A{summaryRow + 2}"].Value = "Total Revenue:"; reportSheet[$"B{summaryRow + 2}"].Formula = $"=SUM(G{headerRow + 1}:G{headerRow + salesData.Rows.Count})"; reportSheet[$"B{summaryRow + 2}"].FormatString = "$#,##0.00"; for (int col = 0; col <= 6; col++) { reportSheet.AutoSizeColumn(col); } reportWorkbook.EvaluateAll(); reportWorkbook.SaveAs("DatabaseExport.xlsx"); $vbLabelText $csharpLabel 此示例展示了一个完整的数据库到Excel的工作流。 DataTable模拟数据库检索——在生产环境中,将此替换为使用Entity Framework、Dapper或ADO.NET的实际数据库查询。 根据 Microsoft 数据导出最佳实践的建议,手动映射方法可以完全控制格式和布局。 代码会创建一个带有标题、格式化标题和数据行的专业报告。 公式列动态计算行总数。 摘要部分使用Excel公式计算订单数量和收入总和,确保这些值在数据更改时自动更新。 有关DataSets和更大数据结构的操作,请参阅Excel到DataSet转换指南。 输出 需要将Excel报表投入生产吗? 获取许可证以充分发挥IronXL在生产部署中的潜力。 如何处理多个工作表? 复杂的 Excel 文件通常需要多个工作表来组织相关数据。 IronXL 通过创建、访问和组织工作表的直观方法简化了多工作表管理。 您可以用几行代码打开和管理工作簿工作表。 using IronXL; WorkBook companyReport = WorkBook.Create(); // Create department sheets WorkSheet salesSheet = companyReport.CreateWorkSheet("Sales"); WorkSheet inventorySheet = companyReport.CreateWorkSheet("Inventory"); WorkSheet summarySheet = companyReport.CreateWorkSheet("Summary"); // Populate Sales sheet salesSheet["A1"].Value = "Sales Dashboard"; salesSheet["A3"].Value = "Region"; salesSheet["B3"].Value = "Q1 Sales"; salesSheet["C3"].Value = "Q2 Sales"; string[] regions = { "North", "South", "East", "West" }; decimal[] q1Sales = { 250000, 180000, 220000, 195000 }; decimal[] q2Sales = { 275000, 195000, 240000, 210000 }; for (int i = 0; i < regions.Length; i++) { salesSheet[$"A{i + 4}"].Value = regions[i]; salesSheet[$"B{i + 4}"].Value = q1Sales[i]; salesSheet[$"C{i + 4}"].Value = q2Sales[i]; } // Populate Inventory sheet inventorySheet["A1"].Value = "Inventory Status"; string[] products = { "Widget A", "Widget B", "Widget C" }; int[] stock = { 150, 45, 200 }; int[] reorderPoint = { 100, 50, 75 }; for (int i = 0; i < products.Length; i++) { inventorySheet[$"A{i + 4}"].Value = products[i]; inventorySheet[$"B{i + 4}"].Value = stock[i]; inventorySheet[$"C{i + 4}"].Value = reorderPoint[i]; string status = stock[i] <= reorderPoint[i] ? "REORDER" : "OK"; inventorySheet[$"D{i + 4}"].Value = status; if (status == "REORDER") inventorySheet[$"D{i + 4}"].Style.Font.Color = "#FF0000"; } // Summary sheet with cross-sheet formulas summarySheet["A1"].Value = "Company Overview"; summarySheet["A4"].Value = "Total Q1 Sales"; summarySheet["B4"].Formula = "=SUM(Sales!B4:B7)"; summarySheet["A5"].Value = "Total Q2 Sales"; summarySheet["B5"].Formula = "=SUM(Sales!C4:C7)"; summarySheet["A6"].Value = "Products Need Reorder"; summarySheet["B6"].Formula = "=COUNTIF(Inventory!D4:D6,\"REORDER\")"; // Apply consistent formatting across all sheets foreach (WorkSheet sheet in companyReport.WorkSheets) { sheet["A1"].Style.Font.Bold = true; sheet["A1"].Style.Font.Height = 14; } companyReport.SaveAs("CompanyReport.xlsx"); using IronXL; WorkBook companyReport = WorkBook.Create(); // Create department sheets WorkSheet salesSheet = companyReport.CreateWorkSheet("Sales"); WorkSheet inventorySheet = companyReport.CreateWorkSheet("Inventory"); WorkSheet summarySheet = companyReport.CreateWorkSheet("Summary"); // Populate Sales sheet salesSheet["A1"].Value = "Sales Dashboard"; salesSheet["A3"].Value = "Region"; salesSheet["B3"].Value = "Q1 Sales"; salesSheet["C3"].Value = "Q2 Sales"; string[] regions = { "North", "South", "East", "West" }; decimal[] q1Sales = { 250000, 180000, 220000, 195000 }; decimal[] q2Sales = { 275000, 195000, 240000, 210000 }; for (int i = 0; i < regions.Length; i++) { salesSheet[$"A{i + 4}"].Value = regions[i]; salesSheet[$"B{i + 4}"].Value = q1Sales[i]; salesSheet[$"C{i + 4}"].Value = q2Sales[i]; } // Populate Inventory sheet inventorySheet["A1"].Value = "Inventory Status"; string[] products = { "Widget A", "Widget B", "Widget C" }; int[] stock = { 150, 45, 200 }; int[] reorderPoint = { 100, 50, 75 }; for (int i = 0; i < products.Length; i++) { inventorySheet[$"A{i + 4}"].Value = products[i]; inventorySheet[$"B{i + 4}"].Value = stock[i]; inventorySheet[$"C{i + 4}"].Value = reorderPoint[i]; string status = stock[i] <= reorderPoint[i] ? "REORDER" : "OK"; inventorySheet[$"D{i + 4}"].Value = status; if (status == "REORDER") inventorySheet[$"D{i + 4}"].Style.Font.Color = "#FF0000"; } // Summary sheet with cross-sheet formulas summarySheet["A1"].Value = "Company Overview"; summarySheet["A4"].Value = "Total Q1 Sales"; summarySheet["B4"].Formula = "=SUM(Sales!B4:B7)"; summarySheet["A5"].Value = "Total Q2 Sales"; summarySheet["B5"].Formula = "=SUM(Sales!C4:C7)"; summarySheet["A6"].Value = "Products Need Reorder"; summarySheet["B6"].Formula = "=COUNTIF(Inventory!D4:D6,\"REORDER\")"; // Apply consistent formatting across all sheets foreach (WorkSheet sheet in companyReport.WorkSheets) { sheet["A1"].Style.Font.Bold = true; sheet["A1"].Style.Font.Height = 14; } companyReport.SaveAs("CompanyReport.xlsx"); $vbLabelText $csharpLabel 本示例创建了一份完整的多页报告。 每个工作表都有特定用途:销售数据、库存跟踪和摘要视图。 汇总表使用跨表公式合并关键指标。 注意表引用语法——"Sales!B4:B7"指的是Sales表上的B4到B7单元格。 库存表展示了条件逻辑,将低库存商品染成红色,以便立即引起注意。 foreach循环在所有工作表上应用一致的格式,保持整个工作簿的专业外观。 工作表名称显示为Excel中的选项卡,允许用户轻松在不同数据视图之间导航。 在C#中生成Excel文件最佳实践是什么? 在 C# 中高效生成 Excel 文件需要在内存使用、错误处理和部署方面考虑周到。 在以编程方式创建 Excel 电子表格时,这些实践可确保您的应用程序有效扩展,同时保持可靠性。 对于大文件,内存管理变得至关重要。 批量处理数据,而不是一次加载整个数据集。 以下模式可保持内存使用的可预见性,适用于大规模导出: using IronXL; WorkBook workbook = WorkBook.Create(); WorkSheet sheet = workbook.CreateWorkSheet("Data"); int rowsPerBatch = 1000; int currentRow = 2; sheet["A1"].Value = "ID"; sheet["B1"].Value = "Name"; sheet["C1"].Value = "Value"; // Process records in manageable batches foreach (var batch in GetDataInBatches(rowsPerBatch)) { foreach (var record in batch) { sheet[$"A{currentRow}"].Value = record.Id; sheet[$"B{currentRow}"].Value = record.Name; sheet[$"C{currentRow}"].Value = record.Value; currentRow++; } } workbook.SaveAs("LargeDataset.xlsx"); using IronXL; WorkBook workbook = WorkBook.Create(); WorkSheet sheet = workbook.CreateWorkSheet("Data"); int rowsPerBatch = 1000; int currentRow = 2; sheet["A1"].Value = "ID"; sheet["B1"].Value = "Name"; sheet["C1"].Value = "Value"; // Process records in manageable batches foreach (var batch in GetDataInBatches(rowsPerBatch)) { foreach (var record in batch) { sheet[$"A{currentRow}"].Value = record.Id; sheet[$"B{currentRow}"].Value = record.Name; sheet[$"C{currentRow}"].Value = record.Value; currentRow++; } } workbook.SaveAs("LargeDataset.xlsx"); $vbLabelText $csharpLabel 对于Web应用程序,在内存中生成Excel文件并直接流向用户,而不是将临时文件写入磁盘。 始终将生成逻辑封装在错误处理之中,以防止崩溃并提供有意义的反馈: // ASP.NET Core controller action with error handling IActionResult DownloadExcel() { try { WorkBook workbook = WorkBook.Create(); WorkSheet sheet = workbook.CreateWorkSheet("Report"); sheet["A1"].Value = "Report Data"; // Populate report data here... var stream = new MemoryStream(); workbook.SaveAs(stream); stream.Position = 0; return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "report.xlsx"); } catch (Exception ex) { Console.WriteLine($"Excel generation failed: {ex.Message}"); return StatusCode(500, "Failed to generate Excel file."); } } // ASP.NET Core controller action with error handling IActionResult DownloadExcel() { try { WorkBook workbook = WorkBook.Create(); WorkSheet sheet = workbook.CreateWorkSheet("Report"); sheet["A1"].Value = "Report Data"; // Populate report data here... var stream = new MemoryStream(); workbook.SaveAs(stream); stream.Position = 0; return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "report.xlsx"); } catch (Exception ex) { Console.WriteLine($"Excel generation failed: {ex.Message}"); return StatusCode(500, "Failed to generate Excel file."); } } $vbLabelText $csharpLabel 下表总结了关键最佳实践及适用场景: IronXL在C#中生成Excel的最佳实践 场景 推荐方法 优势 Large datasets (>10,000 rows) 分批处理,使用分块写入 减少内存占用 Web应用程序下载 使用MemoryStream替代临时文件 没有磁盘IO,响应更快 生产部署 包含有效的IronXL许可证密钥 生成的文件上无水印 货币和日期 使用FormatString属性 正确的区域设置显示在Excel中 动态报告 在SaveAs()之前调用EvaluateAll() 公式显示计算值 IronXL 可在受限环境中工作,无需提升权限,因此适合共享主机和容器化部署。 在您的部署包中包含IronXL许可证文件,并确保您的应用程序具有所需的任何临时文件操作的写入权限。 有关额外的部署指南,请参阅IronXL功能概览和完整的API文档。 从这里可以去哪里? IronXL 将 Excel 文件在 C# 中的生成从一个复杂的挑战转变为简单明了的编码。 您已经学习了如何创建工作簿、填充单元格、应用格式、使用公式、导出数据库数据以及管理多个工作表——所有这些都无需Microsoft Office依赖项。 这些技术在Windows、Linux和.NET 10的云平台上都能一致地工作。 要更深入地了解,请参阅IronXL教程指南,了解如何读取和修改现有的Excel文件,或试用许可页面以开始生产。 查看与您的项目需求和规模相匹配的许可选项。 常见问题解答 如何使用C#生成Excel文件? 您可以使用IronXL在 C# 中生成 Excel 文件,它提供了一个简单的 API 来创建 Excel 文件,而无需安装 Microsoft Office 或复杂的 COM 互操作。 在C#中处理Excel文件是否需要微软Office? 不,无需安装 Microsoft Office。IronXL 允许您使用 C# 创建和操作 Excel 文件,而无需依赖任何 Office 套件。 使用IronXL相对于传统方法有哪些优势? IronXL简化了生成 Excel 文件的过程,无需 Microsoft Office 和复杂的 COM 互操作,提供了用于创建和操作 Excel 文件的简单 API。 我可以使用IronXL将数据库与 Excel 文件集成吗? 是的, IronXL支持数据库集成等高级操作,可让您高效地将数据导出到 Excel 文件。 IronXL可以生成哪些文件格式? IronXL允许您创建 XLS 和 XLSX 文件格式,使其能够灵活满足不同的 Excel 文件生成需求。 IronXL是否支持 Excel 文件中的高级格式设置? 是的, IronXL支持高级格式设置功能,使您能够自定义 Excel 文件的外观和结构。 是否可以使用IronXL自动生成电子表格? 是的, IronXL提供工具和技术来自动生成电子表格,简化报告创建和数据导出等流程。 如何在.NET应用程序中使用Excel创建报表? IronXL提供了一种简单的方法来创建报告,它可以直接在.NET应用程序中生成 Excel 文件,为数据呈现提供强大的解决方案。 使用 C# 处理 Excel 时,有哪些必备技巧? 使用IronXL在 C# 中处理 Excel 的基本技巧包括创建基本电子表格、高级格式设置和数据库集成。 哪里可以找到有关在 C# 中使用IronXL 的文档? 您可以在Iron Software网站上找到有关在 C# 中使用IronXL的全面文档,其中包括各种用例的教程和示例。 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 工作簿。 阅读更多 如何在 C# 中读取 Excel 文件而不是使用 StreamReader使用 OleDb 或IronXL将数据表...
已更新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 工作簿。 阅读更多