
使用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 包管理器安装库:
立即下载 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");Imports IronXL
' Create a new Excel workbook for reports
Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
' Add a worksheet for the report
Dim reportSheet As WorkSheet = 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")这段代码会创建一个带有格式化标题的新 Excel 报告文件。 熟悉的单元格引用语法(reportSheet["A1"])使开发人员可以轻松地精确指定数据应出现的位置,就像手动使用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++;
}Imports System.Data
Imports System.Data.SqlClient
' Fetch data from database
Dim connectionString As String = "Server=localhost;Database=Sales;Integrated Security=true;"
Dim salesData As New DataTable()
Using conn As New SqlConnection(connectionString)
Dim adapter As New SqlDataAdapter("SELECT ProductName, Quantity, Revenue FROM MonthlySales", conn)
adapter.Fill(salesData)
End Using
' Create Excel report from DataTable
Dim workBook As WorkBook = WorkBook.Create()
Dim sheet As WorkSheet = workBook.CreateWorkSheet("Sales Data")
' Add headers
sheet("A1").Value = "Product"
sheet("B1").Value = "Quantity"
sheet("C1").Value = "Revenue"
' Populate data
Dim row As Integer = 2
For Each dataRow As DataRow In salesData.Rows
sheet($"A{row}").Value = dataRow("ProductName")
sheet($"B{row}").Value = dataRow("Quantity")
sheet($"C{row}").Value = dataRow("Revenue")
row += 1
Next这种方法可以直接将销售数据从 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;
}Imports System.Collections.Generic
Dim salesRecords As New List(Of SalesRecord) From {
New SalesRecord With {.Product = "Widget A", .Units = 150, .Price = 29.99D},
New SalesRecord With {.Product = "Widget B", .Units = 82, .Price = 49.99D}
}
' Convert collection to Excel
For i As Integer = 0 To salesRecords.Count - 1
sheet($"A{i + 2}").Value = salesRecords(i).Product
sheet($"B{i + 2}").Value = salesRecords(i).Units
sheet($"C{i + 2}").Value = salesRecords(i).Price
Next该方法允许直接在 .NET 应用程序中使用 C# 创建 Excel 报表,使得生成多个工作表或 XLSX 文件的过程比手动 OLE 自动化或逆向工程 XML 文件要简单得多。
输出

格式化专业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");
}
}Imports IronXL
Imports IronXL.Styles
Module Program
Sub Main(args As String())
' Create a new workbook
Dim workbook = WorkBook.Create(ExcelFileFormat.XLSX)
' Add a new worksheet
Dim 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.5
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.0
' Header formatting
Dim 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 row As Integer = 2 To 10
If row Mod 2 = 0 Then
sheet($"A{row}:C{row}").Style.SetBackgroundColor("#F2F2F2")
End If
Next
' 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
Dim 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")
End Sub
End Module这些格式化选项可以将基本数据转换为专业报告。 样式 API 涵盖了从字体和颜色到边框和对齐方式的所有内容,从而可以完全控制 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 row As Integer = 3 To 10
sheet($"D{row}").Formula = $"=B{row}*C{row}"
Next
' 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)"公式支持包括所有标准Excel函数,如VLOOKUP等。 IronXL 可自动处理公式依赖关系和计算顺序,使生成包含复杂计算的 Excel 报表变得简单。 了解更多关于IronXL 中的数学函数的信息。

基于模板的报告
对于定期生成的 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");Imports System
' Load existing template
Dim templateBook As Workbook = Workbook.Load("ReportTemplate.xlsx")
Dim templateSheet As Worksheet = templateBook.DefaultWorksheet
' Find and replace template markers
For Each cell In templateSheet("A1:Z100")
If cell.Text.Contains("{{CompanyName}}") Then
cell.Value = cell.Text.Replace("{{CompanyName}}", "Acme Corp")
End If
If cell.Text.Contains("{{ReportDate}}") Then
cell.Value = cell.Text.Replace("{{ReportDate}}", DateTime.Now.ToString("MMMM yyyy"))
End If
Next
' Save as new report
templateBook.SaveAs($"Report_{DateTime.Now:yyyyMMdd}.xlsx")这种方法在更新动态内容的同时保持格式一致,非常适合用于月度报告或标准化文档。

最佳实践和故障排除
在进行Excel报表生成时,请记住以下几点:
- 处理大型文件时的内存使用情况:分块处理数据,而不是加载整个数据集( 微软针对大型 Excel 文件的建议)
• 日期格式问题:使用
DateTime.ToOADate()来处理Excel兼容的日期(解释Excel日期系统) • 文件锁定错误:始终使用MemoryStream方法正确处理Excel对象。 - 缺少样式:某些样式属性需要先设置背景颜色。
结论
IronXL 将 Excel 报表生成从繁琐的手动过程转变为自动化、可靠的工作流程。 凭借直观的 API、跨平台支持和全面的功能集,开发者可以在几分钟内创建专业的 Excel 报告,而不是几小时。 IronXL 具备易于数据集成、强大的格式设置选项和公式支持等优点,是任何使用 Excel 报表的 C# 开发人员必不可少的工具。 对于有兴趣的开发人员,IronXL提供免费试用和进一步的许可选项,适用于公司和个人。

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



