跳至页脚内容
使用 IRONXL

如何使用 IronXL.Excel 在 C# 中生成 Excel 文件

传统上,使用 C# 或 Visual Basic 以编程方式生成 Excel 工作表文件需要安装 Microsoft Office 或进行复杂的 COM 互操作。IronXL 彻底改变了这一现状,提供了一个简单的 API,无需任何 Office 依赖即可创建 Excel 应用程序文件。 本教程将引导您使用 IronXL.Excel 在 C# 中构建 Excel 文件,从基本的电子表格创建到高级格式化和数据库集成。 无论您是创建报告、导出数据(XLS 文件或 XLSX 文件)还是自动生成电子表格,您都将学习在 .NET 应用程序中使用 Excel 的基本技巧。

如何使用 IronXL 在 C# 中生成 Excel 文件:图 1 - IronXL

为什么要在没有 Microsoft Office 的情况下生成 Excel 工作表文件? 在不依赖 Office 的情况下开发 Excel 生成功能,解决了关键的部署难题。 由于许可成本和资源开销,服务器环境很少安装 Microsoft Office。 每次安装 Office 都需要大量的磁盘空间和内存,因此对于云部署或容器化应用程序来说并不实用。 IronXL 通过独立运作消除了这些限制。 您的 C# Excel 文件生成可在 Windows、Linux、macOS、Docker 容器或 Azure 应用服务上运行,无需修改。 这种跨平台兼容性意味着您只需编写一次,即可部署到任何地方,无论是针对 .NET Framework、.NET Core 还是 .NET 8/9 应用程序。 [如何使用 IronXL 在 C# 中生成 Excel 文件:图 2 - 跨平台](/static-assets/excel/blog/generate-excel-csharp-blog/generate-excel-csharp-blog-2.webp) 性能显著提高,无需 COM Interop 开销。 传统的办公自动化会为每个操作创建单独的进程实例,从而消耗内存和 CPU 资源。 IronXL 在应用程序的进程空间内以内存方式处理所有内容,因此当您以编程方式生成 Excel 文件时,执行速度更快,资源消耗更低。 由于 IronXL 以一个 NuGet 包的形式发布,因此部署变得非常简单。 无需维护任何注册表项、COM 注册和 Office 服务包。 您的持续集成管道可以无缝运行,Docker 容器保持轻量级。 这种简化方法使 IronXL 大受欢迎,在各种 [ 开发人员论坛](https://stackoverflow.com/questions/tagged/ironxl)上,专业人士分享了他们在 Excel 自动化方面的经验。 一些开发人员仍在使用微软的 Open XML 生产工具直接处理 Office Open XML 文件结构。 但是,这种方法需要更多的人工操作和对 XML 模式及 Open XML SDK 安装的详细了解。 IronXL 消除了这些复杂性,让您能够更快地以编程方式使用 Excel。 [如何使用 IronXL 在 C# 中生成 Excel 文件:图 3 - 功能](/static-assets/excel/blog/generate-excel-csharp-blog/generate-excel-csharp-blog-3.webp) ## 如何在 C# 项目中安装 IronXL? 通过解决方案资源管理器中的 NuGet 包管理器安装 IronXL 只需几分钟。 在 Visual Studio 中,右键单击您的项目并选择 "管理 NuGet 包"。搜索 "IronXL.Excel",然后单击 "安装"。 该软件包自动包含用 C# 生成 Excel 文件所需的所有依赖项。 或者,使用软件包管理器控制台: ```shell Install-Package IronXL.Excel ``` [如何使用 IronXL 在 C# 中生成 Excel 文件:图 4 - 安装](/static-assets/excel/blog/generate-excel-csharp-blog/generate-excel-csharp-blog-4.webp) 适用于使用现代 C# 项目的 .NET CLI 用户: ```shell dotnet add package IronXL.Excel ``` 通过以下简单测试验证安装是否已完成,该测试将以编程方式创建 Excel 文件: ```csharp using IronXL; // Create a new Excel workbook var workbook = WorkBook.Create(); Console.WriteLine("IronXL installed successfully!"); ``` 这段代码将创建一个内存工作簿对象。 如果运行无误,IronXL 即可投入使用。 该库支持所有现代 .NET 版本,确保与您现有的项目兼容。 有关详细的安装指导和故障排除,请查阅官方文档。 准备好开始了吗? 立即下载 IronXL,几分钟内开始生成 Excel 文件。 ### 输出 [如何使用 IronXL 在 C# 中生成 Excel 文件:图 5 - 控制台输出](/static-assets/excel/blog/generate-excel-csharp-blog/generate-excel-csharp-blog-5.webp)

如何创建您的第一个 Excel 文件? 使用 IronXL 创建 Excel 文件从[WorkBook 类](/object-reference/api/IronXL.WorkBook.html)开始,它是您进行所有 Excel 操作的入口。 该库同时支持现代 XLSX 和传统 XLS 格式,让您在用 C# 生成 Excel 文件时能灵活地满足不同的要求。 ```cs 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 some basic data 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"); ``` 这段代码演示了 Excel 文件生成的几个关键概念。 `WorkBook.Create()` 方法将在内存中初始化一个新的 Excel 文件。 您可以使用`ExcelFileFormat`枚举指定格式 - 选择 XLSX 可兼容现代 Excel,选择 XLS 可支持旧版 Excel。 `Metadata`属性允许您嵌入文档信息,这些信息将显示在 Excel 的文件属性中,并遵循[Microsoft 的文档属性标准](https://support.microsoft.com/en-us/office/view-or-change-the-properties-for-an-office-file-21d604c2-481e-4379-8e54-1dd4622c6b75)。 `CreateWorkSheet()`方法会添加一个具有指定名称的新工作表。 Excel 熟悉的单元格符号(A1、B1 等)使数值设置更加直观。IronXL 可自动处理数据类型转换,无需显式转换即可识别日期、数字和文本。 `SaveAs()`方法会将整个 Excel 文件写入磁盘。 有关工作表操作的更多信息,请浏览工作表管理教程。 ### 输出 [如何使用 IronXL 在 C# 中生成 Excel 文件:图 6 - 基本 Excel 输出](/static-assets/excel/blog/generate-excel-csharp-blog/generate-excel-csharp-blog-6.webp)

如何将数据写入 Excel 单元格? IronXL.Excel 提供了多种填充 Excel 单元格的方法,从单个单元格赋值到批量范围操作。 了解这些方法有助于您针对数据场景选择最有效的方法。 ```cs WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX); // Create a worksheet 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 worksheet["B1:B3"].Value = "Active"; // Using numeric indices (0-based) worksheet.SetCellValue(0, 2, "Department"); // C1 worksheet.SetCellValue(1, 2, "Sales"); // C2 worksheet.SetCellValue(2, 2, "Marketing"); // C3 // Array-based 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("FirstExcelFile.xlsx"); ``` 代码显示了 IronXL 灵活的单元格寻址。 字符串符号("A1")让 Excel 用户感觉很自然,而数字索引则为循环和动态生成提供了程序控制。 范围赋值("B1:B3")可以有效地将多个单元格设置为相同的值,非常适合初始化列或应用默认值。 IronXL 可智能处理不同的数据类型。小数可保持财务数据的精确性,DateTime 对象可正确格式化为 Excel 日期,布尔值可显示为 TRUE/FALSE。 这种自动转换消除了手动格式化代码,同时确保了数据的完整性。 ### 输出 [如何使用 IronXL 在 C# 中生成 Excel 文件:图 7 - Excel 输出](/static-assets/excel/blog/generate-excel-csharp-blog/generate-excel-csharp-blog-7.webp) 对于较大的数据集,可以考虑这种模式: ```cs // Populate from a data source var employees = GetEmployeeData(); // Your data source for (int row = 0; row < employees.Count; row++) { worksheet[$"A{row + 2}"].Value = employees[row].Id; worksheet[$"B{row + 2}"].Value = employees[row].Name; worksheet[$"C{row + 2}"].Value = employees[row].Department; worksheet[$"D{row + 2}"].Value = employees[row].Salary; } ``` 这种方法通过数据收集进行迭代,将每个属性映射到相应的列。 字符串插值( `$"A{row + 2}"` )动态生成单元格地址,从第 2 行开始以保留标题。

如何应用专业格式? 专业 Excel 文件需要的不仅仅是原始数据。 使用 C# 生成 Excel 文件时,IronXL 的[样式 API](/how-to/cell-font-size/)可以通过格式、颜色和视觉层次结构将普通的电子表格转换为精美的商业文档。 ```cs using IronXL; WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX); // Create a worksheet 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 to 20 characters // 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; // To set border color, use: dataRange.Style.TopBorder.Color = "#000000"; dataRange.Style.BottomBorder.Color = "#000000"; dataRange.Style.LeftBorder.Color = "#000000"; dataRange.Style.RightBorder.Color = "#000000"; // Text alignment worksheet["A1:G1"].Style.HorizontalAlignment = IronXL.Styles.HorizontalAlignment.Center; // Alternating row colors for readability for (int row = 2; row <= 3; row++) { if (row % 2 == 0) { worksheet[$"A{row}:G{row}"].Style.SetBackgroundColor("#F2F2F2"); } } ``` 该格式化代码可创建符合企业标准的专业外观。 带有背景颜色的粗体标题建立了视觉层次。 `SetBackgroundColor()` 方法接受十六进制颜色代码,可精确控制您的颜色方案。 字体属性包括大小、颜色、粗体、斜体和下划线选项,这些都是创建符合企业品牌准则的 Excel 文件所必需的。 列宽调整可防止文本截断。 `AutoSizeColumn()` 自动调整内容大小,而 `SetColumnWidth()` 则提供精确控制。 数字格式使用 Excel 的格式代码。 例如,"$#,##0.00 "显示的是带有千位分隔符和两位小数的货币。 日期格式遵循类似模式,使用 [Microsoft Excel 规范](https://support.microsoft.com/en-us/office/number-format-codes-5026bbd6-04bc-48cd-bf33-80f18b4eae68)中记录的标准 Excel 日期格式字符串。 边框定义数据边界,提高可读性。 BorderType 枚举提供了多种样式:细、中、粗、点和虚线。 对齐方式可根据电子表格惯例,将标题居中,数字右对齐。 交替的行列颜色通常被称为 "带状行列",有助于读者在宽泛的数据集中追踪信息。 在我们的单元格样式指南中了解更多有关高级格式化的信息,以创建格式化的 Excel 数据。 ### 输出 [如何使用 IronXL 在 C# 中生成 Excel 文件:图 8 - 格式化的 Excel 输出](/static-assets/excel/blog/generate-excel-csharp-blog/generate-excel-csharp-blog-8.webp)

如何以编程方式使用 Excel 公式? Excel 公式通过自动计算使电子表格栩栩如生。 IronXL 支持公式创建和评估,可实现自动更新的动态电子表格。 ```cs 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 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]; // Row total formula 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"; budget["C9"].Formula = "=C3/C7*100"; budget["D9"].Formula = "=D3/D7*100"; // Average calculation budget["A10"].Value = "Average Spending"; budget["B10"].Formula = "=AVERAGE(B2:B6)"; // Evaluate all formulas workbook.EvaluateAll(); workbook.SaveAs("Budget.xlsx"); ``` 本预算示例说明了公式的实际应用。 公式属性接受以等号开头的标准 Excel 公式语法。 IronXL 支持常用函数:SUM、AVERAGE、COUNT、MAX、MIN 等。 公式中的单元格引用与 Excel 完全相同,包括相对引用和绝对引用。 行合计公式(`=SUM(B{i + 2}:D{i + 2})`)计算每个类别的季度合计。 字符串插值可以为每一行动态生成正确的单元格引用。 月度总数是整列的总和,而百分比计算则是将特定单元格除以总数。 `EvaluateAll()` 方法处理所有公式,更新整个工作簿中的计算值。 这将确保公式在 Excel 中打开时显示结果。 如果不进行评估,Excel 将显示公式,直到用户触发重新计算。 ### 输出 [如何使用 IronXL 在 C# 中生成 Excel 文件:图 9 - 使用公式输出 Excel 文件](/static-assets/excel/blog/generate-excel-csharp-blog/generate-excel-csharp-blog-9.webp)

如何将数据从数据库导出到 Excel? 现实世界中的应用程序通常会将数据库数据导出到 Excel 中,用于报告和分析。 IronXL 通过内置的`DataTable`支持简化了此过程,从 C# 应用程序生成 Excel 文件时无需手动进行字段映射。 ```cs using System; using System.Data; using System.Data.SqlClient; // Simulate database retrieval (replace with your 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)); // Sample data (normally from database) 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"); // Get data from database DataTable salesData = GetSalesData(); // Method 1: Manual mapping with formatting 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); } // Format headers 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]); } // Add total column with formula reportSheet[$"G{row + headerRow + 1}"].Formula = $"=D{row + headerRow + 1}*E{row + headerRow + 1}"; } // Add total header and format reportSheet["G3"].Value = "Total"; reportSheet["G3"].Style.Font.Bold = true; reportSheet["G3"].Style.SetBackgroundColor("#D9E1F2"); // Format currency 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"; // Format date column reportSheet[$"F{headerRow + 1}:F{headerRow + salesData.Rows.Count}"].FormatString = "MM/dd/yyyy"; // Add 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"; // Auto-fit columns for (int col = 0; col <= 6; col++) { reportSheet.AutoSizeColumn(col); } // Evaluate formulas and save reportWorkbook.EvaluateAll(); reportWorkbook.SaveAs("DatabaseExport.xlsx"); ``` 这个全面的示例演示了使用 C# 生成 Excel 文件的完整数据库到 Excel 工作流程。 `DataTable`模拟数据库检索 - 在生产环境中,请使用 Entity Framework、Dapper 或 ADO.NET 将其替换为实际的数据库查询。 根据 [Microsoft 数据导出最佳实践](https://docs.microsoft.com/en-us/office/dev/add-ins/excel/excel-add-ins-data-validation)的建议,手动映射方法可以完全控制格式和布局。 代码会创建一个带有标题、格式化标题和数据行的专业报告。 公式列动态计算行总数。 摘要部分使用 Excel 公式计算订单数和收入总和,确保在数据发生变化时更新这些值。 货币和日期格式要符合商业文档标准,同时自动调整列的大小,确保所有内容都能正确显示。 如需处理较大的数据集,请查看我们的性能优化指南。 ### 输出 [如何使用 IronXL 在 C# 中生成 Excel 文件:图 10 - 数据库导出到 Excel 输出](/static-assets/excel/blog/generate-excel-csharp-blog/generate-excel-csharp-blog-10.webp) 需要简化 Excel 报告? [获取许可证](/licensing/),即可解锁 IronXL 在生产部署方面的全部潜力。

如何处理多个工作表? 复杂的 Excel 文件通常需要多个工作表来组织相关数据。 IronXL 通过创建、访问和组织工作表的直观方法简化了多工作表管理。 ```cs // Create a multi-sheet workbook WorkBook companyReport = WorkBook.Create(); // Create department sheets WorkSheet salesSheet = companyReport.CreateWorkSheet("Sales"); WorkSheet inventorySheet = companyReport.CreateWorkSheet("Inventory"); WorkSheet hrSheet = companyReport.CreateWorkSheet("HR Metrics"); // 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"; inventorySheet["A3"].Value = "Product"; inventorySheet["B3"].Value = "Stock Level"; inventorySheet["C3"].Value = "Reorder Point"; inventorySheet["D3"].Value = "Status"; // Add inventory data with conditional 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]; // Status based on stock level string status = stock[i] <= reorderPoint[i] ? "REORDER" : "OK"; inventorySheet[$"D{i + 4}"].Value = status; // Color code status if (status == "REORDER") { inventorySheet[$"D{i + 4}"].Style.Font.Color = "#FF0000"; } } // Create summary sheet referencing other sheets WorkSheet summarySheet = companyReport.CreateWorkSheet("Summary"); summarySheet["A1"].Value = "Company Overview"; summarySheet["A3"].Value = "Metric"; summarySheet["B3"].Value = "Value"; 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\")"; // Format all sheets consistently foreach (WorkSheet sheet in companyReport.WorkSheets) { // Format headers sheet["A1"].Style.Font.Bold = true; sheet["A1"].Style.Font.Height = 14; var headerRow = sheet["A3:D3"]; headerRow.Style.Font.Bold = true; headerRow.Style.SetBackgroundColor("#E7E6E6"); } // Save multi-sheet workbook companyReport.SaveAs("CompanyReport.xlsx"); ``` 本示例创建了一份完整的多页报告。 每个工作表都有特定的用途:销售数据、库存跟踪和人力资源指标。 汇总表使用跨表公式合并关键指标。 请注意公式中的工作表引用语法,"Sales!B4:B7"指的是销售工作表中的单元格 B4 到 B7。 库存表展示了条件逻辑,将低库存商品染成红色,以便立即引起注意。 `foreach`循环在所有工作表中应用一致的格式,使整个工作簿保持专业的外观。 工作表名称在 Excel 中显示为选项卡,方便用户在不同的数据视图之间浏览。

Excel 生成的最佳实践是什么? 在 C# 中高效生成 Excel 文件需要在内存使用、错误处理和部署方面考虑周到。 在以编程方式创建 Excel 电子表格时,这些实践可确保您的应用程序有效扩展,同时保持可靠性。 对于大文件,内存管理变得至关重要。 分块处理数据,而不是将整个数据集加载到内存中: ```cs // Process large datasets efficiently public void ExportLargeDataset(string filename) { WorkBook workbook = WorkBook.Create(); WorkSheet sheet = workbook.CreateWorkSheet("Data"); int rowsPerBatch = 1000; int currentRow = 1; // Process in 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(filename); } ``` 错误处理可防止应用程序崩溃,并在生成 Excel 文件时提供有意义的反馈: ```cs try { WorkBook workbook = WorkBook.Create(); // Excel generation code workbook.SaveAs("output.xlsx"); } catch (Exception ex) { // Log the error Console.WriteLine($"Excel generation failed: {ex.Message}"); // Implement appropriate recovery or notification } ``` 对于网络应用程序,在内存中生成 Excel 文件并将其传输给用户: ```cs // ASP.NET Core example public IActionResult DownloadExcel() { WorkBook workbook = GenerateReport(); var stream = new MemoryStream(); workbook.SaveAs(stream); stream.Position = 0; return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "report.xlsx"); } ``` 部署方面的考虑因素可确保生产运营的顺利进行。 IronXL 可在受限环境中工作,无需提升权限,因此适合共享主机和容器化部署。 在部署包中包含 IronXL 许可证文件,并确保您的应用程序在需要时具有临时文件操作的写入权限。 有关更多部署指导,请参阅[部署文档](/docs/)。 ## 结论 IronXL 将 Excel 文件在 C# 中的生成从一个复杂的挑战转变为简单明了的编码。 您已经学会了创建工作簿、填充单元格、应用格式化、使用公式和导出数据库数据--所有这一切都无需依赖 Microsoft Office。 这些以编程方式生成 Excel 文件的技术可在 Windows、Linux 和云平台上一致运行。 准备好在您的 C# 应用程序中实现 Excel 生成了吗? [立即开始免费试用](trial-license),或浏览全面的[API 文档](/object-reference/api/)了解高级功能。 对于生产部署,请查看与您的项目要求相匹配的许可选项。 [如何使用 IronXL 在 C# 中生成 Excel 文件:图 11 - 许可](/static-assets/excel/blog/generate-excel-csharp-blog/generate-excel-csharp-blog-11.webp)

Curtis Chau
技术作家

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

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