跳至页脚内容
使用 IRONXL

如何在 C# 中使用 IronXL 创建 Excel 报告

使用 IronXL 在 C# 中创建 Excel 报表

在现代商业和 .NET 应用程序中,使用 C# 创建 Excel 报表是一项基本要求。 无论您是生成财务报表、销售分析还是库存仪表板,自动化创建 Excel 文件和 Excel 电子表格的过程都可以节省数小时的人工时间,同时减少错误。

IronXL为开发人员提供了一个强大而直观的解决方案,可以使用 C# 创建 Excel 报表,而无需 Microsoft Office、MS Excel 或传统的互操作依赖项。 与 OLE 自动化或依赖 Excel 应用程序的方法不同,IronXL 允许在需要时仅用一行代码直接生成 Excel 工作簿和 Excel 数据。 在本指南中,我们将教您如何使用 IronXL 创建 Excel 报表,并提供易于理解的示例代码,您可以轻松地将其应用到自己的项目中!

IronXL是什么?为什么要使用它来生成Excel文件?

IronXL 是一个 .NET Excel 库,它使开发人员能够直接从 C# 或 Visual Basic 源代码创建、读取 Excel 电子表格和操作 Excel 文件。 与依赖完整 Excel 应用程序或通过 Open XML SDK 进行逆向工程的 Microsoft Office Interop 方法不同,IronXL 可在 Windows、Linux、macOS 和云环境中运行,无需安装 Excel 或依赖第三方软件。 这使其成为服务器端 Excel 报表、自动化工作流程以及基于 .NET Core 或 .NET Framework 构建的 Web 应用程序的理想选择。

对于正在从手动 Excel 流程、旧库或需要浏览各种 XML 命名空间的 Open XML 生产力工具工作流程过渡的团队而言,IronXL 提供了一个直观的 API。 它既支持传统的 XLS 文件,也支持现代的 XLSX 文件,后者本质上是包含 XML 文件和各种文件夹的 ZIP 文件。 无论您是想生成新的 Excel 工作簿、操作多个工作表,还是从外部代码加载 Excel 数据,IronXL 都能大大简化该过程,而无需了解底层格式。

IronXL 创建 Excel 文件入门指南

设置 IronXL 生成 Excel 报表只需几分钟。 在 Visual Studio 中通过 NuGet 包管理器安装库:

Install-Package IronXL.Excel
Install-Package IronXL.Excel
SHELL

立即下载 IronXL ,开始自动生成 Excel 报表。

安装完成后,创建您的第一个 Excel 报表只需几行代码:

using IronXL;
// Create a new Excel workbook for reports
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add a worksheet for the report
WorkSheet reportSheet = workBook.CreateWorkSheet("Monthly Report");
// Add a title
reportSheet["A1"].Value = "Sales Report - January 2024";
reportSheet["A1"].Style.Font.Bold = true;
// Save the Excel report
workBook.SaveAs("MonthlyReport.xlsx");
using IronXL;
// Create a new Excel workbook for reports
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add a worksheet for the report
WorkSheet reportSheet = workBook.CreateWorkSheet("Monthly Report");
// Add a title
reportSheet["A1"].Value = "Sales Report - January 2024";
reportSheet["A1"].Style.Font.Bold = true;
// Save the Excel report
workBook.SaveAs("MonthlyReport.xlsx");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

这段代码会创建一个带有格式化标题的新 Excel 报告文件。 熟悉的单元格引用语法( reportSheet["A1"] )使开发人员能够轻松地指定数据应该出现的位置,就像手动使用 Excel 一样。

输出

如何使用 IronXL 在 C# 中创建 Excel 报表:图 1 - Excel 输出示例

从多个数据源加载数据

实际应用中,Excel报表很少使用静态数据。 IronXL 擅长整合来自各种格式、API、新的数据表源,甚至是几个不同的 XML 文件的 Excel 数据。 这使其非常适合在服务器端或 Web 应用程序中生成动态 C# Excel 报表。

数据库集成

对于数据库驱动的 Excel 报表,IronXL 可以与ADO.NET DataTables无缝协作:

using System.Data;
using System.Data.SqlClient;
// Fetch data from database
string connectionString = "Server=localhost;Database=Sales;Integrated Security=true;";
DataTable salesData = new DataTable();
using (SqlConnection conn = new SqlConnection(connectionString))
{
    SqlDataAdapter adapter = new SqlDataAdapter(
        "SELECT ProductName, Quantity, Revenue FROM MonthlySales", conn);
    adapter.Fill(salesData);
}
// Create Excel report from DataTable
WorkBook workBook = WorkBook.Create();
WorkSheet sheet = workBook.CreateWorkSheet("Sales Data");
// Add headers
sheet["A1"].Value = "Product";
sheet["B1"].Value = "Quantity";
sheet["C1"].Value = "Revenue";
// Populate data
int row = 2;
foreach (DataRow dataRow in salesData.Rows)
{
    sheet[$"A{row}"].Value = dataRow["ProductName"];
    sheet[$"B{row}"].Value = dataRow["Quantity"];
    sheet[$"C{row}"].Value = dataRow["Revenue"];
    row++;
}
using System.Data;
using System.Data.SqlClient;
// Fetch data from database
string connectionString = "Server=localhost;Database=Sales;Integrated Security=true;";
DataTable salesData = new DataTable();
using (SqlConnection conn = new SqlConnection(connectionString))
{
    SqlDataAdapter adapter = new SqlDataAdapter(
        "SELECT ProductName, Quantity, Revenue FROM MonthlySales", conn);
    adapter.Fill(salesData);
}
// Create Excel report from DataTable
WorkBook workBook = WorkBook.Create();
WorkSheet sheet = workBook.CreateWorkSheet("Sales Data");
// Add headers
sheet["A1"].Value = "Product";
sheet["B1"].Value = "Quantity";
sheet["C1"].Value = "Revenue";
// Populate data
int row = 2;
foreach (DataRow dataRow in salesData.Rows)
{
    sheet[$"A{row}"].Value = dataRow["ProductName"];
    sheet[$"B{row}"].Value = dataRow["Quantity"];
    sheet[$"C{row}"].Value = dataRow["Revenue"];
    row++;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

这种方法可以直接将销售数据从 SQL Server 加载到 Excel 报表中。 通过 DataTable 集成,您可以直接使用现有的数据访问代码而无需修改。 对于更复杂的场景,请查看如何从 SQL 数据库加载 Excel

处理收款事宜

对于内存中的数据、来自 API 响应的 Excel 数据或新的 DataTable,集合可以轻松填充 Excel 工作表,而无需 Microsoft Excel 或第三方依赖项:

var salesRecords = new List<SalesRecord>
{
    new SalesRecord { Product = "Widget A", Units = 150, Price = 29.99m },
    new SalesRecord { Product = "Widget B", Units = 82, Price = 49.99m }
};
// Convert collection to Excel
for (int i = 0; i < salesRecords.Count; i++)
{
    sheet[$"A{i+2}"].Value = salesRecords[i].Product;
    sheet[$"B{i+2}"].Value = salesRecords[i].Units;
    sheet[$"C{i+2}"].Value = salesRecords[i].Price;
}
var salesRecords = new List<SalesRecord>
{
    new SalesRecord { Product = "Widget A", Units = 150, Price = 29.99m },
    new SalesRecord { Product = "Widget B", Units = 82, Price = 49.99m }
};
// Convert collection to Excel
for (int i = 0; i < salesRecords.Count; i++)
{
    sheet[$"A{i+2}"].Value = salesRecords[i].Product;
    sheet[$"B{i+2}"].Value = salesRecords[i].Units;
    sheet[$"C{i+2}"].Value = salesRecords[i].Price;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

该方法允许直接在 .NET 应用程序中使用 C# 创建 Excel 报表,使得生成多个工作表或 XLSX 文件的过程比手动 OLE 自动化或逆向工程 XML 文件要简单得多。

输出

如何使用 IronXL 在 C# 中创建 Excel 报表:图 2 - 数据输出示例工作表

格式化专业Excel报表

单凭原始数据无法撰写出一份专业的报告。 IronXL 提供全面的单元格格式设置选项,可创建精美、可用于商务的 Excel 文件。 以下代码展示了使用 IronXL 实现此功能有多么简单:

using IronXL;
using IronXL.Styles;

class Program
{
    static void Main(string[] args)
    {
        // Create a new workbook
        var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        // Add a new worksheet
        var sheet = workbook.CreateWorkSheet("MySheet");
        // Add header values
        sheet["A1"].Value = "Product";
        sheet["B1"].Value = "Quantity";
        sheet["C1"].Value = "Price";
        // Add sample data rows
        sheet["A2"].Value = "Laptop";
        sheet["B2"].Value = 5;
        sheet["C2"].Value = 1299.99;
        sheet["A3"].Value = "Headphones";
        sheet["B3"].Value = 15;
        sheet["C3"].Value = 199.50;
        sheet["A4"].Value = "Keyboard";
        sheet["B4"].Value = 10;
        sheet["C4"].Value = 89.99;
        sheet["A5"].Value = "Monitor";
        sheet["B5"].Value = 7;
        sheet["C5"].Value = 249.00;
        // Header formatting
        var headerRange = sheet["A1:C1"];
        headerRange.Style.Font.Bold = true;
        headerRange.Style.SetBackgroundColor("#4472C4");
        headerRange.Style.Font.Color = "#FFFFFF";
        headerRange.Style.BottomBorder.Type = BorderType.Thick;
        // Number formatting for currency
        sheet["C:C"].FormatString = "$#,##0.00";
        // Alternating row colors for readability
        for (int row = 2; row <= 10; row++)
        {
            if (row % 2 == 0)
            {
                sheet[$"A{row}:C{row}"].Style.SetBackgroundColor("#F2F2F2");
            }
        }
        // Column width adjustment
        sheet.Columns[0].Width = 15 * 256; // Width in 1/256th of character width
        sheet.Columns[2].Width = 12 * 256;
        // Add borders around data
        var dataRange = sheet["A1:C10"];
        dataRange.Style.TopBorder.Type = BorderType.Thin;
        dataRange.Style.RightBorder.Type = BorderType.Thin;
        dataRange.Style.BottomBorder.Type = BorderType.Thin;
        dataRange.Style.LeftBorder.Type = BorderType.Thin;
        // Save the workbook to a file
        workbook.SaveAs("MyWorkbook.xlsx");
    }
}
using IronXL;
using IronXL.Styles;

class Program
{
    static void Main(string[] args)
    {
        // Create a new workbook
        var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        // Add a new worksheet
        var sheet = workbook.CreateWorkSheet("MySheet");
        // Add header values
        sheet["A1"].Value = "Product";
        sheet["B1"].Value = "Quantity";
        sheet["C1"].Value = "Price";
        // Add sample data rows
        sheet["A2"].Value = "Laptop";
        sheet["B2"].Value = 5;
        sheet["C2"].Value = 1299.99;
        sheet["A3"].Value = "Headphones";
        sheet["B3"].Value = 15;
        sheet["C3"].Value = 199.50;
        sheet["A4"].Value = "Keyboard";
        sheet["B4"].Value = 10;
        sheet["C4"].Value = 89.99;
        sheet["A5"].Value = "Monitor";
        sheet["B5"].Value = 7;
        sheet["C5"].Value = 249.00;
        // Header formatting
        var headerRange = sheet["A1:C1"];
        headerRange.Style.Font.Bold = true;
        headerRange.Style.SetBackgroundColor("#4472C4");
        headerRange.Style.Font.Color = "#FFFFFF";
        headerRange.Style.BottomBorder.Type = BorderType.Thick;
        // Number formatting for currency
        sheet["C:C"].FormatString = "$#,##0.00";
        // Alternating row colors for readability
        for (int row = 2; row <= 10; row++)
        {
            if (row % 2 == 0)
            {
                sheet[$"A{row}:C{row}"].Style.SetBackgroundColor("#F2F2F2");
            }
        }
        // Column width adjustment
        sheet.Columns[0].Width = 15 * 256; // Width in 1/256th of character width
        sheet.Columns[2].Width = 12 * 256;
        // Add borders around data
        var dataRange = sheet["A1:C10"];
        dataRange.Style.TopBorder.Type = BorderType.Thin;
        dataRange.Style.RightBorder.Type = BorderType.Thin;
        dataRange.Style.BottomBorder.Type = BorderType.Thin;
        dataRange.Style.LeftBorder.Type = BorderType.Thin;
        // Save the workbook to a file
        workbook.SaveAs("MyWorkbook.xlsx");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

这些格式化选项可以将基本数据转换为专业报告。 样式 API 涵盖了从字体和颜色边框和对齐方式的所有内容,从而可以完全控制 Excel 报表的外观。 对于更高级的格式设置需求,可以探索条件格式,以自动突出显示重要数据。

如何使用 IronXL 在 C# 中创建 Excel 报表:图 3 - 格式化的 Excel 输出

使用公式进行动态Excel报表计算

Excel 的强大之处在于其公式,而 IronXL 完全支持Excel 公式的创建

// Add formula for row totals
sheet["D1"].Value = "Total";
sheet["D2"].Formula = "=B2*C2";
// Copy formula down the column
for (int row = 3; row <= 10; row++)
{
    sheet[$"D{row}"].Formula = $"=B{row}*C{row}";
}
// Add summary formulas
sheet["A12"].Value = "Summary";
sheet["B12"].Formula = "=SUM(B2:B10)";
sheet["C12"].Formula = "=AVERAGE(C2:C10)";
sheet["D12"].Formula = "=SUM(D2:D10)";
// Add formula for row totals
sheet["D1"].Value = "Total";
sheet["D2"].Formula = "=B2*C2";
// Copy formula down the column
for (int row = 3; row <= 10; row++)
{
    sheet[$"D{row}"].Formula = $"=B{row}*C{row}";
}
// Add summary formulas
sheet["A12"].Value = "Summary";
sheet["B12"].Formula = "=SUM(B2:B10)";
sheet["C12"].Formula = "=AVERAGE(C2:C10)";
sheet["D12"].Formula = "=SUM(D2:D10)";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

公式支持包括所有标准 Excel 函数,如SUMAVERAGEIFVLOOKUP等。 IronXL 可自动处理公式依赖关系和计算顺序,使生成包含复杂计算的 Excel 报表变得简单。 了解更多关于IronXL 中的数学函数的信息。

如何使用 IronXL 在 C# 中创建 Excel 报表:图 4 - 带公式的示例输出

基于模板的报告

对于定期生成的 Excel 报表或标准化工作簿,IronXL 支持基于模板的生成,允许开发人员从模板创建 Excel 文件,而无需处理 Open XML SDK、rels 文件或各种文件夹:

// Load existing template
Workbook templateBook = Workbook.Load("ReportTemplate.xlsx");
Worksheet templateSheet = templateBook.DefaultWorksheet;
// Find and replace template markers
foreach (var cell in templateSheet["A1:Z100"])
{
    if (cell.Text.Contains("{{CompanyName}}"))
        cell.Value = cell.Text.Replace("{{CompanyName}}", "Acme Corp");
    if (cell.Text.Contains("{{ReportDate}}"))
        cell.Value = cell.Text.Replace("{{ReportDate}}", DateTime.Now.ToString("MMMM yyyy"));
}
// Save as new report
templateBook.SaveAs($"Report_{DateTime.Now:yyyyMMdd}.xlsx");
// Load existing template
Workbook templateBook = Workbook.Load("ReportTemplate.xlsx");
Worksheet templateSheet = templateBook.DefaultWorksheet;
// Find and replace template markers
foreach (var cell in templateSheet["A1:Z100"])
{
    if (cell.Text.Contains("{{CompanyName}}"))
        cell.Value = cell.Text.Replace("{{CompanyName}}", "Acme Corp");
    if (cell.Text.Contains("{{ReportDate}}"))
        cell.Value = cell.Text.Replace("{{ReportDate}}", DateTime.Now.ToString("MMMM yyyy"));
}
// Save as new report
templateBook.SaveAs($"Report_{DateTime.Now:yyyyMMdd}.xlsx");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

这种方法在更新动态内容的同时保持格式一致,非常适合用于月度报告或标准化文档。

如何使用 IronXL 在 C# 中创建 Excel 报表:图 5 - 报表模板与使用该模板创建的 Excel 文件对比

最佳实践和故障排除

在进行Excel报表生成时,请记住以下几点:

  • 处理大型文件时的内存使用情况:分块处理数据,而不是加载整个数据集(微软针对大型 Excel 文件的建议
  • 日期格式问题:使用DateTime.ToOADate()处理与 Excel 兼容的日期( Excel 日期系统详解
  • 文件锁定错误:请始终使用using语句或新的MemoryStream方法正确释放 Excel 对象。
  • 缺少样式:某些样式属性需要先设置背景颜色。

结论

IronXL 将 Excel 报表生成从繁琐的手动过程转变为自动化、可靠的工作流程。 凭借直观的 API、跨平台支持和全面的功能集,开发者可以在几分钟内创建专业的 Excel 报告,而不是几小时。 IronXL 具备易于数据集成、强大的格式设置选项和公式支持等优点,是任何使用 Excel 报表的 C# 开发人员必不可少的工具。 对于感兴趣的开发者,IronXL 提供免费试用版,并为公司和个人提供更多许可选项

立即开始使用 IronXL。
green arrow pointer

Curtis Chau
技术作家

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

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