使用 IRONXL 无需 Office 互操作即可在 C# 中生成 Excel 文件 Curtis Chau 已更新:2025年10月19日 下载 IronXL NuGet 下载 DLL 下载 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 使用IronXL库,无需 Microsoft Office 即可在 C# 中创建 Excel 文件,该库允许您创建、格式化和填充 Excel 电子表格。这非常适合服务器环境、Docker 容器和 CI/CD 流水线。 为什么要在不使用 Microsoft Office 的情况下生成 Excel 文件? 为什么免 Office Excel 生成对DevOps很重要? 无需 Office 即可开发 Excel 生成功能,从而解决关键的部署难题。 由于许可成本和资源需求,服务器环境通常缺少 Microsoft Office。 每个 Office 安装都需要大量的磁盘空间和内存,因此不适合云部署或容器化应用程序。 当部署到 AWS Lambda 或在 Docker 容器中运行时,轻量级解决方案对于基础设施自动化至关重要。 IronXL 通过独立运行来克服这些限制。 您的 Excel 文件生成功能无需任何更改即可在 Windows、Linux、macOS、Docker 容器或 Azure 应用服务上运行。 这种跨平台兼容性意味着您只需编写一次,即可部署到任何地方,无论是针对 .NET Framework、.NET Core 还是 .NET 8/9 应用程序。 对于使用.NET MAUI或Blazor 的团队,IronXL 可以无缝集成到所有现代 .NET 平台中。 跨平台 .NET 兼容性图表,展示了对 C#、F# 和 VB.NET 在各种 .NET 版本(6-9、Core、Standard、Framework)上的支持,以及在 Windows、Linux、Mac、Docker、Azure 和 AWS 上的部署选项。 IronXL 支持所有主流 .NET 平台和操作系统,以实现最大的部署灵活性。 IronXL与其他 Excel 库相比如何? 特征 IronXL EPPlus 封闭式 XML 非营利组织 价格 $749 $599 免费 免费 办公依赖性 无 无 无 无 性能 速度提升40倍* 良好 缓和 语速较慢 内存使用情况 小于1GB** 2-3GB 1-2GB 3-5GB Docker 支持 本地 有限的 基本的 基本的 配方支持 165+ 个功能 100+ 80岁以上 基本的 商业支持 是 是 否 否 学习曲线 简易 缓和 缓和 陡峭 *基于近期性能改进 **用于处理大型 Excel 文件 IronXL能带来哪些性能提升? 无需 COM 互操作开销,性能显著提升。 传统的办公自动化会为每个操作创建单独的进程实例,从而消耗内存和 CPU 资源。IronXL在应用程序的进程空间内以内存方式处理所有内容,因此当您以编程方式生成 Excel 文件时,执行速度更快,资源消耗更低。 该库的性能得到了显著提升,最近的更新带来了高达 40 倍的速度提升,并将内存使用量从 19.5 GB 大幅降低到 1 GB 以下。 由于IronXL以一个 NuGet 包的形式发布,因此部署变得非常简单。 无需维护注册表项、COM 注册或 Office 服务包。 您的持续集成管道运行流畅,Docker 容器保持轻量级。 这种简化的方法使IronXL成为一种流行的选择,正如在各种开发者论坛上讨论的那样,专业人士在论坛上分享了他们在不使用 Interop 的情况下实现 Excel 自动化的经验。 IronXL 功能概述展示了六项关键功能:创建电子表格、保存并导出为多种格式、编辑带有图表的工作簿、使用公式处理数据、使用密码保护工作簿以及单元格操作函数。 IronXL 通过直观的 API 设计提供完整的 Excel 操作功能。 如何在我的 C# 项目中安装 IronXL? DevOps工作流的最佳安装方法是什么? 通过 NuGet 包管理器安装IronXL只需几分钟。 在 Visual Studio 中,右键单击您的项目并选择 "管理 NuGet 包"。搜索 "IronXL.Excel",然后单击 "安装"。 该软件包自动包含用 C# 生成 Excel 文件所需的所有依赖项。 有关特定于您的开发环境的详细安装指南,请参阅入门概述。 或者,使用软件包管理器控制台: Install-Package IronXL.Excel Install-Package IronXL.Excel SHELL 程序包管理器控制台显示 IronXL.Excel 安装成功,包含 28 个依赖项,其中包括 Microsoft.Extensions 和系统库。 软件包管理器控制台确认IronXL已成功安装,所有必需的依赖项均已安装。 如何将IronXL与 CI/CD 流水线集成? 对于在自动化构建管道中使用现代 C# 项目的 .NET CLI 用户: dotnet add package IronXL.Excel dotnet add package IronXL.Excel SHELL 对于容器化部署,请将其添加到您的 Dockerfile 中: RUN dotnet add package IronXL.Excel 通过以下简单测试验证安装是否已通过编程方式创建 Excel 文件: using IronXL; // new Excel workbook var workbook = WorkBook.Create(); Console.WriteLine("IronXL installed successfully!"); using IronXL; // new Excel workbook var workbook = WorkBook.Create(); Console.WriteLine("IronXL installed successfully!"); Imports IronXL ' new Excel workbook Dim workbook = WorkBook.Create() Console.WriteLine("IronXL installed successfully!") $vbLabelText $csharpLabel 这段代码将创建一个内存工作簿对象。 如果运行无误,IronXL 即可投入使用。 该库支持所有现代 .NET 版本,确保与您现有的项目兼容。 对于 VB.NET 开发人员,可以使用VB 特有的语法示例来实现类似的功能。 当处理旧文件格式或遇到文件大小问题时,该库提供了完整的解决方案。 输出 Visual Studio 中的调试控制台显示"IronXL 安装成功!"消息 控制台输出确认IronXL已正确安装并准备好执行 Excel 生成任务。 快速入门:使用 C# 创建 Excel 文件 使用IronXL创建 Excel 文件只需要几行代码,非常适合快速开发和部署场景。 立即开始使用 NuGet 创建 PDF 文件: 使用 NuGet 包管理器安装 IronXL PM > Install-Package IronXL.Excel 复制并运行这段代码。 using IronXL; // Create a new workbook WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX); // Add a worksheet WorkSheet sheet = workbook.CreateWorkSheet("Sales"); // Add data sheet["A1"].Value = "Product"; sheet["B1"].Value = "Quantity"; sheet["C1"].Value = "Revenue"; // Save the file workbook.SaveAs("sales_report.xlsx"); 部署到您的生产环境中进行测试 立即开始在您的项目中使用 IronXL,免费试用! 免费试用30天 如何创建我的第一个Excel文件? 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 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"); 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"); Imports IronXL ' Create a new workbook (XLSX format by default) Dim workbook As 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 Dim worksheet As 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.0 ' Save the workbook workbook.SaveAs("FirstExcelFile.xlsx") $vbLabelText $csharpLabel 如何在生成的Excel文件中使用元数据? 这段代码演示了 Excel 文件生成的几个关键概念。 WorkBook.Create() 方法将在内存中初始化一个新的 Excel 文件。 您可以使用ExcelFileFormat枚举指定格式 - 选择 XLSX 可兼容现代 Excel,选择 XLS 可支持旧版 Excel。 元数据属性允许您嵌入文档信息,这些信息将显示在 Excel 的文件属性中,遵循 Microsoft 的文档属性标准,并有助于在企业环境中进行文件组织。 了解更多关于编辑工作簿元数据的信息。 CreateWorkSheet()方法会添加一个具有指定名称的新工作表。 Excel 熟悉的单元格符号(A1、B1 等)使数值设置更加直观。IronXL 可自动处理数据类型转换,无需显式转换即可识别日期、数字和文本。 SaveAs()方法会将整个 Excel 文件写入磁盘。 如需了解更多工作表操作,请参阅工作表管理教程。 输出 ! Excel 文件,显示销售数据,列标题包括日期、产品、数量和收入,以及一行示例数据。 IronXL 生成的基本 Excel 文件,显示带有正确列标题的结构化数据。 如何将数据写入Excel单元格? 填充Excel数据的有效方法有哪些? IronXL.Excel 提供了多种填充 Excel 单元格的方法,从单个单元格赋值到批量范围操作。 了解这些方法有助于您针对数据场景选择最有效的方法。 编写 Excel 值指南全面涵盖了所有可用选项。 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("EmployeeData.xlsx"); 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("EmployeeData.xlsx"); Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX) ' Create a worksheet Dim worksheet As 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 Dim headers As String() = {"ID", "Name", "Email", "Phone"} For i As Integer = 0 To headers.Length - 1 worksheet.SetCellValue(0, i, headers(i)) Next ' Working with different data types worksheet("E1").Value = "Salary" worksheet("E2").Value = 75000.5D ' Decimal for currency worksheet("E3").Value = 82000.75D 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 提供了额外的组织功能。 对于较大的数据集,可以考虑这种模式: // 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; } // 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; } ' Populate from a data source Dim employees = GetEmployeeData() ' Your data source For row As Integer = 0 To employees.Count - 1 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 Next $vbLabelText $csharpLabel 这种方法通过数据收集进行迭代,将每个属性映射到相应的列。 字符串插值($"A{row + 2}")动态生成单元格地址,从第 2 行开始,以保留页眉。 处理大型数据集时,为了提高效率,可以动态添加行和列,或者复制单元格区域。 输出 员工数据 Excel 表格,包含 ID、姓名、电子邮件、部门、电话、薪资、入职日期和全职状态等列,显示两条员工记录。 员工数据电子表格演示了IronXL中的多种数据类型和单元格分配方法。 如何应用专业格式? 创建企业级Excel文件需要哪些条件? 专业 Excel 文件需要的不仅仅是原始数据。 使用 C# 生成 Excel 文件时,IronXL 的样式 API 可以通过格式、颜色和视觉层次结构将普通的电子表格转换为精美的商业文档。 该库提供完整的单元格格式设置选项,用于创建美观的电子表格。 using IronXL; using IronXL.Formatting; WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX); // Create a worksheet WorkSheet worksheet = workbook.CreateWorkSheet("Employees"); // Add sample data first worksheet["A1"].Value = "ID"; worksheet["B1"].Value = "Name"; worksheet["C1"].Value = "Department"; worksheet["D1"].Value = "Phone"; worksheet["E1"].Value = "Salary"; worksheet["F1"].Value = "Start Date"; worksheet["G1"].Value = "Full Time"; // Add employee data worksheet["A2"].Value = 101; worksheet["B2"].Value = "John Smith"; worksheet["C2"].Value = "Sales"; worksheet["D2"].Value = "(555) 123-4567"; worksheet["E2"].Value = 75000.50m; worksheet["F2"].Value = new DateTime(2020, 3, 15); worksheet["G2"].Value = true; worksheet["A3"].Value = 102; worksheet["B3"].Value = "Jane Doe"; worksheet["C3"].Value = "Marketing"; worksheet["D3"].Value = "(555) 987-6543"; worksheet["E3"].Value = 82000.75m; worksheet["F3"].Value = new DateTime(2019, 7, 1); worksheet["G3"].Value = true; // Header formatting var headerRange = worksheet["A1:G1"]; 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.SetColumnWidth(1, 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.SetColor("#000000"); dataRange.Style.BottomBorder.SetColor("#000000"); dataRange.Style.LeftBorder.SetColor("#000000"); dataRange.Style.RightBorder.SetColor("#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"); } } workbook.SaveAs("FormattedEmployees.xlsx"); using IronXL; using IronXL.Formatting; WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX); // Create a worksheet WorkSheet worksheet = workbook.CreateWorkSheet("Employees"); // Add sample data first worksheet["A1"].Value = "ID"; worksheet["B1"].Value = "Name"; worksheet["C1"].Value = "Department"; worksheet["D1"].Value = "Phone"; worksheet["E1"].Value = "Salary"; worksheet["F1"].Value = "Start Date"; worksheet["G1"].Value = "Full Time"; // Add employee data worksheet["A2"].Value = 101; worksheet["B2"].Value = "John Smith"; worksheet["C2"].Value = "Sales"; worksheet["D2"].Value = "(555) 123-4567"; worksheet["E2"].Value = 75000.50m; worksheet["F2"].Value = new DateTime(2020, 3, 15); worksheet["G2"].Value = true; worksheet["A3"].Value = 102; worksheet["B3"].Value = "Jane Doe"; worksheet["C3"].Value = "Marketing"; worksheet["D3"].Value = "(555) 987-6543"; worksheet["E3"].Value = 82000.75m; worksheet["F3"].Value = new DateTime(2019, 7, 1); worksheet["G3"].Value = true; // Header formatting var headerRange = worksheet["A1:G1"]; 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.SetColumnWidth(1, 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.SetColor("#000000"); dataRange.Style.BottomBorder.SetColor("#000000"); dataRange.Style.LeftBorder.SetColor("#000000"); dataRange.Style.RightBorder.SetColor("#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"); } } workbook.SaveAs("FormattedEmployees.xlsx"); Imports IronXL Imports IronXL.Formatting Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX) ' Create a worksheet Dim worksheet As WorkSheet = workbook.CreateWorkSheet("Employees") ' Add sample data first worksheet("A1").Value = "ID" worksheet("B1").Value = "Name" worksheet("C1").Value = "Department" worksheet("D1").Value = "Phone" worksheet("E1").Value = "Salary" worksheet("F1").Value = "Start Date" worksheet("G1").Value = "Full Time" ' Add employee data worksheet("A2").Value = 101 worksheet("B2").Value = "John Smith" worksheet("C2").Value = "Sales" worksheet("D2").Value = "(555) 123-4567" worksheet("E2").Value = 75000.5D worksheet("F2").Value = New DateTime(2020, 3, 15) worksheet("G2").Value = True worksheet("A3").Value = 102 worksheet("B3").Value = "Jane Doe" worksheet("C3").Value = "Marketing" worksheet("D3").Value = "(555) 987-6543" worksheet("E3").Value = 82000.75D worksheet("F3").Value = New DateTime(2019, 7, 1) worksheet("G3").Value = True ' Header formatting Dim headerRange = worksheet("A1:G1") 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.SetColumnWidth(1, 20) ' Set column B to 20 characters ' Number formatting Dim salaryColumn = worksheet("E2:E3") salaryColumn.FormatString = "$#,##0.00" ' Date formatting Dim dateColumn = worksheet("F2:F3") dateColumn.FormatString = "MM/dd/yyyy" ' Cell borders Dim 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.SetColor("#000000") dataRange.Style.BottomBorder.SetColor("#000000") dataRange.Style.LeftBorder.SetColor("#000000") dataRange.Style.RightBorder.SetColor("#000000") ' Text alignment worksheet("A1:G1").Style.HorizontalAlignment = IronXL.Styles.HorizontalAlignment.Center ' Alternating row colors for readability For row As Integer = 2 To 3 If row Mod 2 = 0 Then worksheet($"A{row}:G{row}").Style.SetBackgroundColor("#F2F2F2") End If Next row workbook.SaveAs("FormattedEmployees.xlsx") $vbLabelText $csharpLabel 如何实现高级样式功能? 该格式化代码可创建符合企业标准的专业外观。 醒目的标题搭配背景图案和颜色,可以建立视觉层次感。 SetBackgroundColor() 方法接受十六进制颜色代码,可精确控制您的颜色方案。 字体属性包括大小、颜色、粗体、斜体和下划线选项,这些都是创建符合公司品牌指南的 Excel 文件所必需的。 如需更高级的样式设置,请探索条件格式功能。 列宽调整可防止文本截断。 AutoSizeColumn() 自动调整内容大小,而 SetColumnWidth() 则提供精确控制。 自动调整行和列大小的功能可确保您的数据以最佳方式显示。 数字格式设置使用 Excel 的格式代码 - 了解更多关于Excel 数字格式的信息,以获得更全面的格式设置选项。 边界和单元格对齐方式定义了数据边界,提高了可读性。 BorderType枚举提供了多种样式:细边框、中等边框、粗边框、点状边框和虚线边框。 边框和对齐选项使标题居中,数字右对齐,遵循电子表格约定。 交替的行颜色(通常称为"带状行")有助于读者跟踪大型数据集中的信息。 输出 专业Excel员工数据,蓝色标题、格式化货币、日期和简洁边框,清晰呈现结构化的员工信息。 一份专业格式的 Excel 文件,展示了IronXL对企业文档的样式设置功能。 如何以编程方式使用Excel公式? 哪些公式功能支持动态计算? Excel 公式通过自动计算使电子表格栩栩如生。IronXL支持公式创建和评估,可实现自动更新的动态电子表格。 该库支持超过 165 个 Excel 函数,并允许您以编程方式编辑公式。 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"); 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"); Imports System Dim workbook = WorkBook.Create() ' Create a budget worksheet Dim budget As WorkSheet = 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 Dim categories As String() = {"Salaries", "Marketing", "Operations", "Equipment", "Training"} Dim monthlyBudgets As Decimal(,) = { {50000, 52000, 51000}, {15000, 18000, 20000}, {8000, 8500, 9000}, {12000, 5000, 7000}, {3000, 3500, 4000} } ' Populate data For i As Integer = 0 To categories.Length - 1 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})" Next ' 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") $vbLabelText $csharpLabel 如何排查常见的配方问题? 这个预算示例说明了公式的实际应用。 公式属性接受以等号开头的标准 Excel 公式语法。IronXL支持常用函数:SUM, AVERAGE, COUNT, MAX, MIN, 以及许多其他函数。 公式中的单元格引用与 Excel 完全相同,包括相对引用和绝对引用。 要进行更高级的计算,请探索C# 中的聚合 Excel 函数和 Excel 公式。 当公式计算结果与预期不符时: -确保语法正确:公式必须以=开头。 -检查单元格引用:验证范围是否正确 -调用EvaluateAll() :保存前必须调用此函数才能查看结果 -验证数据类型:确保数值单元格包含数字,而不是文本。 EvaluateAll() 方法处理所有公式,更新整个工作簿中的计算值。 这将确保公式在 Excel 中打开时显示结果。 如果不进行评估,Excel 将显示公式,直到用户触发重新计算。 对于涉及C# 中 Excel 公式的复杂场景,IronXL 提供全面的支持。 输出 第一季度预算Excel表格,包含费用类别、月度数值、计算总额、营销费用百分比和平均支出公式。 预算工作表,内置自动计算总额和百分比的公式。 如何将数据库中的数据导出到Excel? 数据库到 Excel 导出的最佳实践是什么? 现实世界中的应用程序通常会将数据库数据导出到 Excel 中,用于报告和分析。IronXL通过内置的DataTable支持简化了此过程,从 C# 应用程序生成 Excel 文件时无需手动进行字段映射。 该库提供了多种数据库集成和DataGrid兼容性方法。 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"); 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"); Imports System.Data Imports System.Data.SqlClient ' Simulate database retrieval (replace with your actual database code) Function GetSalesData() As DataTable Dim dt As New DataTable("Sales") dt.Columns.Add("OrderID", GetType(Integer)) dt.Columns.Add("CustomerName", GetType(String)) dt.Columns.Add("Product", GetType(String)) dt.Columns.Add("Quantity", GetType(Integer)) dt.Columns.Add("UnitPrice", GetType(Decimal)) dt.Columns.Add("OrderDate", GetType(DateTime)) ' Sample data (normally from database) dt.Rows.Add(1001, "ABC Corp", "Widget Pro", 50, 25.99D, DateTime.Now.AddDays(-5)) dt.Rows.Add(1002, "XYZ Ltd", "Widget Basic", 100, 15.99D, DateTime.Now.AddDays(-4)) dt.Rows.Add(1003, "ABC Corp", "Widget Premium", 25, 45.99D, DateTime.Now.AddDays(-3)) dt.Rows.Add(1004, "Tech Solutions", "Widget Pro", 75, 25.99D, DateTime.Now.AddDays(-2)) dt.Rows.Add(1005, "XYZ Ltd", "Widget Premium", 30, 45.99D, DateTime.Now.AddDays(-1)) Return dt End Function ' Export to Excel Dim reportWorkbook As WorkBook = WorkBook.Create() Dim reportSheet As WorkSheet = reportWorkbook.CreateWorkSheet("Sales Report") ' Get data from database Dim salesData As DataTable = 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 Dim headerRow As Integer = 3 For col As Integer = 0 To salesData.Columns.Count - 1 reportSheet.SetCellValue(headerRow - 1, col, salesData.Columns(col).ColumnName) Next ' Format headers Dim headers = reportSheet($"A{headerRow}:F{headerRow}") headers.Style.Font.Bold = True headers.Style.SetBackgroundColor("#D9E1F2") ' Data rows For row As Integer = 0 To salesData.Rows.Count - 1 For col As Integer = 0 To salesData.Columns.Count - 1 reportSheet.SetCellValue(row + headerRow, col, salesData.Rows(row)(col)) Next ' Add total column with formula reportSheet($"G{row + headerRow + 1}").Formula = $"=D{row + headerRow + 1}*E{row + headerRow + 1}" Next ' 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 Dim summaryRow As Integer = 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 col As Integer = 0 To 6 reportSheet.AutoSizeColumn(col) Next ' Evaluate formulas and save reportWorkbook.EvaluateAll() reportWorkbook.SaveAs("DatabaseExport.xlsx") $vbLabelText $csharpLabel 如何优化大型数据库导出? 这个全面的示例演示了使用 C# 生成 Excel 文件的完整数据库到 Excel 工作流程。 DataTable模拟数据库检索 - 在生产环境中,请使用 Entity Framework、Dapper 或 ADO.NET 将其替换为实际的数据库查询。 对于直接 SQL 集成,可以探索从 SQL 数据库加载 Excel或从 Excel 更新数据库记录。 对于大型数据库导出,请考虑: -批量处理:分块导出以管理内存 -异步操作:导出过程中保持 UI 响应 -进度报告:向用户显示导出进度 -错误处理:优雅地处理数据库超时 代码会创建一个带有标题、格式化标题和数据行的专业报告。 公式列动态计算行总数。 摘要部分利用 Excel 公式来统计订单数量和汇总收入,确保如果数据发生变化,这些值也会随之更新。 要使用DataSets而不是DataTables ,请参阅导出数据集数据表指南。 输出 专业的销售报告Excel文件,包含订单数据、计算总额、格式化货币、日期和汇总统计信息,显示5笔订单,总金额为7,377.20美元。 利用数据库数据自动计算和格式化,生成专业的销售报告。 需要简化 Excel 报告? 获取许可证,即可解锁IronXL在生产部署方面的全部潜力。 如何处理多个工作表? 何时应该使用多工作表工作簿? 复杂的 Excel 文件通常需要多个工作表来组织相关数据。IronXL通过创建、访问和组织工作表的直观方法简化了多工作表管理。 了解更多关于管理工作表和复制工作表数据以应对高级场景的信息。 // 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"); // 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"); Imports System ' Create a multi-sheet workbook Dim companyReport As WorkBook = WorkBook.Create() ' Create department sheets Dim salesSheet As WorkSheet = companyReport.CreateWorkSheet("Sales") Dim inventorySheet As WorkSheet = companyReport.CreateWorkSheet("Inventory") Dim hrSheet As WorkSheet = 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" Dim regions As String() = {"North", "South", "East", "West"} Dim q1Sales As Decimal() = {250000D, 180000D, 220000D, 195000D} Dim q2Sales As Decimal() = {275000D, 195000D, 240000D, 210000D} For i As Integer = 0 To regions.Length - 1 salesSheet($"A{i + 4}").Value = regions(i) salesSheet($"B{i + 4}").Value = q1Sales(i) salesSheet($"C{i + 4}").Value = q2Sales(i) Next ' 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 Dim products As String() = {"Widget A", "Widget B", "Widget C"} Dim stock As Integer() = {150, 45, 200} Dim reorderPoint As Integer() = {100, 50, 75} For i As Integer = 0 To products.Length - 1 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 Dim status As String = If(stock(i) <= reorderPoint(i), "REORDER", "OK") inventorySheet($"D{i + 4}").Value = status ' Color code status If status = "REORDER" Then inventorySheet($"D{i + 4}").Style.Font.Color = "#FF0000" End If Next ' Create summary sheet referencing other sheets Dim summarySheet As WorkSheet = 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 For Each sheet As WorkSheet In companyReport.WorkSheets ' Format headers sheet("A1").Style.Font.Bold = True sheet("A1").Style.Font.Height = 14 Dim headerRow = sheet("A3:D3") headerRow.Style.Font.Bold = True headerRow.Style.SetBackgroundColor("#E7E6E6") Next ' Save multi-sheet workbook companyReport.SaveAs("CompanyReport.xlsx") $vbLabelText $csharpLabel 如何跨多个工作表引用数据? 本示例创建了一份完整的多页报告。 每个工作表都有特定的用途:销售数据、库存跟踪和人力资源指标。 汇总表使用跨表公式合并关键指标。 请注意公式中的工作表引用语法——" Sales!B4:B7 "指的是销售工作表中的单元格 B4 到 B7。 对于更复杂的操作,可以探索合并 Excel 区域以及对行和列进行分组。 库存表展示了条件逻辑,将低库存商品染成红色,以便立即引起注意。 foreach 循环在所有工作表中应用一致的格式,保持整个工作簿的专业外观。 工作表名称在 Excel 中显示为选项卡,方便用户在不同的数据视图之间轻松切换。 对于高级场景,可以考虑添加冻结窗格,以便在滚动浏览大型数据集时保持标题可见。 Excel 生成的最佳实践是什么? 如何确保生产环境中Excel文件的可扩展生成? 在 C# 中高效生成 Excel 文件需要在内存使用、错误处理和部署方面考虑周到。 在以编程方式创建 Excel 电子表格时,这些实践可确保您的应用程序有效扩展,同时保持可靠性。 审查企业部署的安全最佳实践和文件保护选项。 对于大文件,内存管理变得至关重要。 分块处理数据,而不是将整个数据集加载到内存中: // 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); } // 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); } ' Process large datasets efficiently Public Sub ExportLargeDataset(filename As String) Dim workbook As WorkBook = WorkBook.Create() Dim sheet As WorkSheet = workbook.CreateWorkSheet("Data") Dim rowsPerBatch As Integer = 1000 Dim currentRow As Integer = 1 ' Process in batches For Each batch In GetDataInBatches(rowsPerBatch) For Each record In batch sheet($"A{currentRow}").Value = record.Id sheet($"B{currentRow}").Value = record.Name sheet($"C{currentRow}").Value = record.Value currentRow += 1 Next Next workbook.SaveAs(filename) End Sub $vbLabelText $csharpLabel DevOps团队常见的问题有哪些? 问题 解决方案 预防 内存不足 分批处理 监控批次大小 文件锁定 使用流,而不是文件 落实妥善处置措施 许可证错误 在代码中验证许可证 正确应用许可证 性能 启用异步操作 轮廓瓶颈 容器问题 安装依赖项 在本地 Docker中进行测试 错误处理可防止应用程序崩溃,并在生成 Excel 文件时提供有意义的反馈: 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 } 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 } Imports System Try Dim workbook As WorkBook = WorkBook.Create() ' Excel generation code workbook.SaveAs("output.xlsx") Catch ex As Exception ' Log the error Console.WriteLine($"Excel generation failed: {ex.Message}") ' Implement appropriate recovery or notification End Try $vbLabelText $csharpLabel 对于 Web 应用程序,在内存中生成 Excel 文件并流式传输给用户。 这种方法与ASP.NET MVC 应用程序完美兼容: // 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"); } // 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"); } Imports System.IO Imports Microsoft.AspNetCore.Mvc Public Function DownloadExcel() As IActionResult Dim workbook As WorkBook = GenerateReport() Dim stream As New MemoryStream() workbook.SaveAs(stream) stream.Position = 0 Return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "report.xlsx") End Function $vbLabelText $csharpLabel 如何配置IronXL以进行容器部署? 部署方面的考虑因素可确保生产运营的顺利进行。IronXL可在受限环境中工作,无需提升权限,因此适合共享主机和容器化部署。 在部署包中包含IronXL许可证文件,并确保您的应用程序在需要时具有临时文件操作的写入权限。 有关正确的许可证配置,请参阅使用许可证密钥和web.config 设置。 对于 Docker 部署: FROM mcr.microsoft.com/dotnet/runtime:8.0 WORKDIR /app COPY . . # 安装依赖项 for Excel operations RUN apt-get update && apt-get install -y libgdiplus ENV IRONXL_LICENSE_KEY=${IRONXL_LICENSE_KEY} ENTRYPOINT ["dotnet", "YourApp.dll"] 处理敏感数据时,请考虑对工作簿进行密码保护并对工作表进行安全保护。IronXL提供全面的安全功能,保护您的 Excel 文件免受未经授权的访问。 为了获得最佳的大文件处理性能,应实施数据修剪和单元格清除策略,以有效管理文件大小。 对于 Linux 部署,请确保按照Linux 设置指南进行正确配置。 部署到 AWS Lambda 时,请参考AWS 部署指南,了解无服务器架构的特定配置。 本指南之后下一步该怎么做? IronXL 将 Excel 文件在 C# 中的生成从一个复杂的挑战转变为简单明了的编码。 您已经学会了创建工作簿、填充单元格、应用格式化、使用公式和导出数据库数据--所有这一切都无需依赖 Microsoft Office。 这些以编程方式生成 Excel 文件的技术可在 Windows、Linux 和云平台上一致运行。 如需了解高级功能,请访问: 创建用于数据可视化的 Excel 图表 -添加图片以增强报告效果 处理交互式文档中的超链接 Excel 打印设置,实现专业输出 -转换电子表格文件类型以实现最大兼容性 准备好在您的 C# 应用程序中实现 Excel 生成了吗? 立即开始免费试用,或浏览全面的API 文档了解高级功能。 对于生产环境部署,请查看符合您项目要求的许可选项。 随着需求的增长,可以考虑探索许可证延期和升级途径。 IronXL 的定价方案包括 Lite(749 美元)、Plus(999 美元)、Professional(1,999 美元)和 Unlimited(3,999 美元)四种许可证,每种许可证对开发者、地点和项目数量都有不同的限制。 灵活的许可选项,满足您从开发到企业部署的各种 Excel 生成需求。 常见问题解答 什么是 IronXL? IronXL是一个库,允许开发人员在C#中创建、读取和编辑Excel文件,而不需要Microsoft Office或复杂的COM Interop。 如何使用C#生成Excel文件? 你可以使用IronXL在C#中生成Excel文件,它提供了一个简单的API来创建、格式化和编程操作Excel文件。 我需要安装 Microsoft Office 来使用 IronXL 吗? 不,IronXL不需要在你的系统上安装Microsoft Office,是一个轻量级的创建和编辑Excel文件的解决方案。 IronXL可以处理高级Excel格式化吗? 是的,IronXL支持高级格式选项,允许你在电子表格中应用样式、格式和其他Excel功能。 是否可以通过IronXL将数据库与Excel文件集成? 是的,IronXL使你能够将Excel文件与数据库集成,方便如数据导出和直接从C#应用程序报告的任务。 IronXL可以处理哪些文件格式? IronXL可以处理XLS和XLSX文件格式,提供了处理Excel文件的灵活性。 我可以用IronXL自动化电子表格生成吗? 是的,IronXL允许你自动化生成电子表格,非常适合如报告创建和数据导出等任务。 IronXL支持.NET应用程序吗? IronXL完全兼容.NET应用程序,允许在你的C#项目中无缝集成和功能。 IronXL 的一些常见用例是什么? IronXL的常见用例包括创建报表、导出数据、自动化电子表格任务,以及在.NET应用程序中集成Excel功能。 IronXL如何简化C#中的Excel文件创建? IronXL通过提供一个简单直观的API简化Excel文件创建,消除复杂设置和依赖,简化开发过程。 Curtis Chau 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已发布2026年2月15日 如何使用 OleDb 与 IronXL.Excel 将 DataTable 导出到 Excel C# 了解如何使用 OleDb 与 IronXL.Excel 将 DataTable 导出到 Excel C#。 阅读更多 已发布2026年2月15日 如何使用 IronXL for .NET 在未安装 Office 的情况下在 VB.NET 中打开现有 Excel 文件 了解如何使用 IronXL for .NET 在未安装 Office 的情况下在 VB.NET 中打开现有 Excel 文件。 阅读更多 已发布2026年2月15日 C# CSV 到 XLSX:完整的开发人员指南 使用 IronXL 在 C# 中将 CSV 转换为 XLSX。加载 CSV 文件、保留数据类型、添加图表并导出为 Excel 格式,而无需依赖 Microsoft Office。 阅读更多 如何在 C# 中写入 CSV 文件如何在 C# 中使用 IronXL 创...
已发布2026年2月15日 如何使用 OleDb 与 IronXL.Excel 将 DataTable 导出到 Excel C# 了解如何使用 OleDb 与 IronXL.Excel 将 DataTable 导出到 Excel C#。 阅读更多
已发布2026年2月15日 如何使用 IronXL for .NET 在未安装 Office 的情况下在 VB.NET 中打开现有 Excel 文件 了解如何使用 IronXL for .NET 在未安装 Office 的情况下在 VB.NET 中打开现有 Excel 文件。 阅读更多
已发布2026年2月15日 C# CSV 到 XLSX:完整的开发人员指南 使用 IronXL 在 C# 中将 CSV 转换为 XLSX。加载 CSV 文件、保留数据类型、添加图表并导出为 Excel 格式,而无需依赖 Microsoft Office。 阅读更多