跳至页脚内容
使用 IRONXL

无需 Office Interop 即可在 C# 中生成 Excel 文件

使用IronXL在C#中创建Excel文件,该库允许您制作、格式化和填充Excel电子表格,而无需Microsoft Office。这非常适合服务器环境、Docker容器和CI/CD管道。

为什么要在没有Microsoft Office的情况下生成Excel文件?

为什么对DevOps来说,无Office生成Excel文件很重要?

无需Office来开发Excel生成功能,可以解决关键的部署挑战。 由于许可费用和资源需求,服务器环境通常缺少Microsoft Office。 每次安装Office都需要大量的磁盘空间和内存,使其不适合云部署或容器化应用。 部署到AWS Lambda或在Docker容器中运行时,轻量级解决方案对于基础设施自动化至关重要。

IronXL通过独立运行消除了这些限制。 您的Excel文件生成在Windows、Linux、macOS、Docker容器或Azure App Services上运行,无需更改。 这种跨平台兼容性意味着您只需编写一次,即可部署到任何地方,无论是针对 .NET Framework、.NET Core 还是 .NET 8/9 应用程序。 对于使用.NET MAUIBlazor的团队,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 Interop开销的情况下,性能显著提高。 传统的办公自动化会为每个操作创建单独的进程实例,从而消耗内存和 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,包含Microsoft.Extensions和System库在内的28个依赖项

软件包管理器控制台确认成功安装了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!");
$vbLabelText   $csharpLabel

这段代码将创建一个内存工作簿对象。 如果运行无误,IronXL 即可投入使用。 该库支持所有现代 .NET 版本,确保与您现有的项目兼容。 对于VB.NET开发者,类似的功能可以通过VB特定语法示例获得。 处理旧文件格式或遇到文件大小问题时,该库提供完整解决方案

输出

Debug Console in Visual Studio showing IronXL installed successfully! message

控制台输出确认IronXL已经正确安装并准备好进行Excel生成任务。

快速入门:在C#中创建Excel文件

使用IronXL创建Excel文件只需几行代码,使其非常适合快速开发和部署场景。

  1. 使用 NuGet 包管理器安装 https://www.nuget.org/packages/IronXL.Excel

    PM > Install-Package IronXL.Excel
  2. 复制并运行这段代码。

    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");
  3. 部署到您的生产环境中进行测试

    通过免费试用立即在您的项目中开始使用IronXL

    arrow pointer

如何创建我的第一个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");
$vbLabelText   $csharpLabel

在生成的Excel文件中应如何使用元数据?

这段代码演示了 Excel 文件生成的几个关键概念。 WorkBook.Create()方法在内存中初始化一个新的Excel文件。 您可以使用ExcelFileFormat枚举指定格式——选择XLSX以兼容现代Excel或选择XLS以支持旧版。 元数据属性允许您嵌入文档信息,该信息显示在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");
$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;
}
$vbLabelText   $csharpLabel

这种方法通过数据收集进行迭代,将每个属性映射到相应的列。 字符串插值($"A{row + 2}")动态生成单元格地址,从第 2 行开始,以保留页眉。 处理大型数据集时,您可以动态添加行和列复制单元格范围以提高效率。

输出

员工数据Excel电子表格,包含ID、姓名、电子邮件、部门、电话、工资、入职日期和全职状态列,显示两个员工记录

员工数据电子表格展示了在IronXL中的多种数据类型和单元格分配方法。

如何应用专业格式?

创建企业质量的Excel文件需要什么?

专业 Excel 文件需要的不仅仅是原始数据。 IronXL的样式API通过格式化、颜色和视觉层次将普通电子表格转化为精美的商业文档,您在C#中生成Excel文件时可以使用。 该库提供完整的单元格格式选项,用于创建视觉上吸引人的电子表格。

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");
$vbLabelText   $csharpLabel

如何实现高级样式功能?

该格式化代码可创建符合企业标准的专业外观。 具有背景模式和颜色的粗体标题建立视觉层次。 SetBackgroundColor()方法接受十六进制颜色代码,提供精确的颜色方案控制。 字体属性包括尺寸、颜色、粗体、斜体和下划线选项,这些都是创建符合企业品牌指南的Excel文件所必需的。 对于高级样式需求,探索条件格式化能力。

列宽调整可防止文本截断。 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");
$vbLabelText   $csharpLabel

如何排除常见公式问题?

此预算示例展示了实际公式应用。 公式属性接受以等号开头的标准 Excel 公式语法。 IronXL支持常见函数:MIN以及许多其他函数。 公式中的单元格引用与 Excel 完全相同,包括相对引用和绝对引用。 对于更高级的计算,请探索Excel聚合函数C#中的Excel公式

当公式未按预期计算时:

  • 确保正确的语法:公式必须以=开头
  • 检查单元格引用:验证范围是否正确
  • 调用EvaluateAll():在保存前需要调用以查看结果
  • 验证数据类型:确保数字单元格包含数字,而不是文本

EvaluateAll()方法处理所有公式,更新整个工作簿中的计算值。 这将确保公式在 Excel 中打开时显示结果。 如果不进行评估,Excel 将显示公式,直到用户触发重新计算。 对于涉及C#中的Excel公式的复杂场景,IronXL提供全面支持。

输出

Q1预算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");
$vbLabelText   $csharpLabel

如何优化大型数据库导出?

这个全面的示例演示了使用 C# 生成 Excel 文件的完整数据库到 Excel 工作流程。 DataTable模拟数据库检索——在生产中,使用Entity Framework、Dapper或ADO.NET替换为实际的数据库查询。 对于直接SQL集成,请探索从SQL数据库加载Excel从Excel更新数据库记录

对于大型数据库导出,请考虑:

  • 批处理:分块导出以管理内存
  • 异步操作:导出时保持UI响应
  • 进度报告:向用户显示导出进度
  • 错误处理:优雅处理数据库超时

代码会创建一个带有标题、格式化标题和数据行的专业报告。 公式列动态计算行总数。 摘要部分利用Excel公式计数订单并计算收入,确保这些值在数据更改时更新。 对于使用DataTables时,请参阅《导出数据集数据表》指南。

输出

Professional sales report Excel file with order data, calculated totals, formatted currency, dates, and summary statistics showing 5 orders worth $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");
$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);
}
$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
}
$vbLabelText   $csharpLabel

对于网络应用程序,在内存中生成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");
}
$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 和云平台上一致运行。

对于高级功能,请探索:

准备好在您的 C# 应用程序中实现 Excel 生成了吗? 开始您的免费试用或探索全面的API文档以获取高级功能。 对于生产部署,请查看许可证选项以满足您的项目需求。 考虑根据需求增长扩展许可证扩展升级路径

IronXL pricing tiers showing Lite ($749), Plus ($999), Professional ($1,999), and Unlimited ($3,999) licenses with different developer, location, and project limits

灵活的许可选项可满足从开发到企业部署的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 机器人,将他对技术的热爱与创造力相结合。

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我