跳至页脚内容
使用 IRONXL

如何使用IronXL在 C# 中导入 Excel 数据

对于许多 .NET 开发人员来说,处理 Microsoft Excel 文件是日常工作的一部分。 无论是导入客户数据、处理财务报告,还是将数据从电子表格迁移到数据库,开发人员都需要一种可靠的方法来读取 Excel 文件,而无需复杂的依赖关系或安装 Excel。 传统方法,例如通过 Microsoft.Office.Interop 实现 COM 自动化,需要完整安装 Office,引入平台限制,并造成脆弱的部署依赖关系。 IronXL提供了一个简单易用的解决方案,可跨平台运行,消除了所有这些问题,并允许直接从托管的.NET代码执行 Excel 操作。

如何使用IronXL在 C# 中轻松导入、读取和操作 MS Excel 文件数据:图 1 - IronXL

如何安装IronXL并开始使用 Excel 导入功能?

使用 IronXL,只需几分钟即可开始在 C# 中导入 Excel 文件。 Excel 库可以处理传统的 XLS 格式和现代的 XLSX 格式,以及CSV 、TSV 和其他电子表格格式。 与依赖Microsoft.Office.Interop.Excel的解决方案不同,IronXL 可以在任何 .NET 或 .NET Core 平台上独立运行。

如何使用IronXL在 C# 中轻松导入、读取和操作 MS Excel 文件数据:图 2 - 跨平台

通过NuGet包管理器或.NET CLI 安装IronXL 。 您也可以在 Visual Studio 中使用"管理NuGet程序包"对话框,并搜索"IronXL":

Install-Package IronXL
dotnet add package IronXL
Install-Package IronXL
dotnet add package IronXL
SHELL

如何使用IronXL在 C# 中轻松导入、读取和操作 MS Excel 文件数据:图 3 - 安装

有关完整的安装详情,包括版本兼容性和依赖项说明,请参阅IronXL NuGet安装指南。 无需额外的运行时依赖项或 Office 组件——该软件包是自包含的。 安装好软件包后,导入Excel数据非常简单:

using IronXL;

// Load any Excel file
WorkBook workBook = WorkBook.Load("ProductData.xlsx");
// Access the first worksheet
WorkSheet sheet = workBook.WorkSheets[0];
// Read a cell value
string value = sheet["B1"].StringValue;
Console.WriteLine(value);
using IronXL;

// Load any Excel file
WorkBook workBook = WorkBook.Load("ProductData.xlsx");
// Access the first worksheet
WorkSheet sheet = workBook.WorkSheets[0];
// Read a cell value
string value = sheet["B1"].StringValue;
Console.WriteLine(value);
$vbLabelText   $csharpLabel

这段代码演示了核心工作流程:加载工作簿、访问工作表和读取单元格值。 WorkBook.Load() 方法会自动检测文件格式,无论是 XLS、XLSX 还是 CSV。sheet["B1"] 直观的索引器语法使得访问单元格就像操作数组一样自然。 有关可用成员和重载的完整参考,请参阅IronXL API 文档

示例输入

如何使用IronXL在 C# 中轻松导入、读取和操作 MS Excel 文件数据:图 4 - Excel 输入

输出

如何使用IronXL在 C# 中轻松导入、读取和操作 MS Excel 文件数据:图 5 - 控制台输出

如何将Excel数据读入C#对象?

实际应用需要的不只是单个单元格的值。 IronXL 擅长导入整个数据集并将其转换为可用的 C# 对象。 当您需要导入结构化的 Excel 数据时,该库提供了多种方法,可直接映射到您的领域模型。

下面的示例从工作表中读取行,并将每一行映射到一个类型化的 Product 对象:

using IronXL;

// Load the Excel file
WorkBook workBook = WorkBook.Load("ProductData.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;

// Map rows to typed objects
var products = new List<Product>();
foreach (var row in sheet.Rows)
{
    var product = new Product
    {
        Id = row.Columns[0].IntValue,
        Name = row.Columns[1].StringValue,
        Price = row.Columns[2].DecimalValue,
        IsAvailable = row.Columns[3].BoolValue
    };
    products.Add(product);
}

foreach (var product in products)
{
    Console.WriteLine(
        $"Id: {product.Id}, Name: {product.Name}, " +
        $"Price: {product.Price}, Available: {product.IsAvailable}"
    );
}
using IronXL;

// Load the Excel file
WorkBook workBook = WorkBook.Load("ProductData.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;

// Map rows to typed objects
var products = new List<Product>();
foreach (var row in sheet.Rows)
{
    var product = new Product
    {
        Id = row.Columns[0].IntValue,
        Name = row.Columns[1].StringValue,
        Price = row.Columns[2].DecimalValue,
        IsAvailable = row.Columns[3].BoolValue
    };
    products.Add(product);
}

foreach (var product in products)
{
    Console.WriteLine(
        $"Id: {product.Id}, Name: {product.Name}, " +
        $"Price: {product.Price}, Available: {product.IsAvailable}"
    );
}
$vbLabelText   $csharpLabel

类型属性 -- DecimalValueBoolValue 会自动处理类型转换。 这种方法无需手动解析,并能减少处理混合数据类型列时出现的错误。Stack Overflow上的许多开发者都赞赏这种类型安全的 Excel 数据导入方法。

输出

如何使用IronXL在 C# 中轻松导入、读取和操作 MS Excel 文件数据:图 6 - 对象输出

如何使用单元格区域和 LINQ?

对于聚合计算和筛选查询, IronXL支持范围运算,并内置了 LINQ 兼容性:

using IronXL;

WorkBook workBook = WorkBook.Load("ProductData.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;

// Read a named cell range
Range dataRange = sheet["A1:D5"];

// Calculate aggregates directly on a range
decimal sum = sheet["C1:C5"].Sum();
Console.WriteLine($"Sum of C1:C5: {sum}");

decimal max = sheet["C1:C5"].Max(c => c.DecimalValue);
Console.WriteLine($"Max of C1:C5: {max}");

// Filter using LINQ
var highValueOrders = dataRange
    .Where(cell => cell.DecimalValue > 100)
    .Select(cell => cell.Value)
    .ToList();

Console.WriteLine("Orders above 100:");
foreach (var order in highValueOrders)
{
    Console.WriteLine(order);
}
using IronXL;

WorkBook workBook = WorkBook.Load("ProductData.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;

// Read a named cell range
Range dataRange = sheet["A1:D5"];

// Calculate aggregates directly on a range
decimal sum = sheet["C1:C5"].Sum();
Console.WriteLine($"Sum of C1:C5: {sum}");

decimal max = sheet["C1:C5"].Max(c => c.DecimalValue);
Console.WriteLine($"Max of C1:C5: {max}");

// Filter using LINQ
var highValueOrders = dataRange
    .Where(cell => cell.DecimalValue > 100)
    .Select(cell => cell.Value)
    .ToList();

Console.WriteLine("Orders above 100:");
foreach (var order in highValueOrders)
{
    Console.WriteLine(order);
}
$vbLabelText   $csharpLabel

Range 类提供类似集合的方式同时访问多个单元格。 LINQ 兼容性意味着您可以使用熟悉的 C# 模式来筛选、转换和聚合 Excel 数据,而无需先转换为中间集合。内置的聚合方法(例如 Sum()Max())可直接作用于单元格区域。 有关读取工作簿数据的更多详细信息,请参阅IronXL读取 Excel 文件指南

输出

如何使用IronXL在 C# 中轻松导入、读取和操作 MS Excel 文件数据:图 7 - 范围输出

如何在 C# 中将 Excel 转换为 DataTable?

DataTable 转换对于数据库操作和数据绑定场景至关重要。 IronXL提供了内置方法,可以处理从Excel 到 DataSet 或 DataTable 的转换。 当您需要将 Excel 电子表格导入 SQL Server 或其他关系数据库时,此功能尤其有用。 因为生成的对象是标准的 System.Data.DataTable,所以它可以与任何 ADO.NET 兼容的代码路径一起使用,而无需更改数据访问层。

using IronXL;
using System.Data;
using System.Data.SqlClient;

// Load Excel file
WorkBook workBook = WorkBook.Load("inventory.xlsx");
// Select the first worksheet
WorkSheet sheet = workBook.WorkSheets.First();

// Convert to DataTable -- first row becomes column headers
DataTable dataTable = sheet.ToDataTable(true);

// Use SqlBulkCopy to insert directly into SQL Server
string connectionString = "Data Source=.;Initial Catalog=InventoryDB;Integrated Security=True;";
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionString))
{
    bulkCopy.DestinationTableName = "Inventory";
    bulkCopy.WriteToServer(dataTable);
}
using IronXL;
using System.Data;
using System.Data.SqlClient;

// Load Excel file
WorkBook workBook = WorkBook.Load("inventory.xlsx");
// Select the first worksheet
WorkSheet sheet = workBook.WorkSheets.First();

// Convert to DataTable -- first row becomes column headers
DataTable dataTable = sheet.ToDataTable(true);

// Use SqlBulkCopy to insert directly into SQL Server
string connectionString = "Data Source=.;Initial Catalog=InventoryDB;Integrated Security=True;";
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionString))
{
    bulkCopy.DestinationTableName = "Inventory";
    bulkCopy.WriteToServer(dataTable);
}
$vbLabelText   $csharpLabel

ToDataTable() 方法接受一个布尔参数,指示第一行是否包含标题。 当设置为 true 时, IronXL会自动使用第一行的值作为列名。 生成的 DataTable 无需任何额外配置即可与.NET、Entity Framework 和数据绑定控件集成。

为了更好地控制转换过程,您可以手动构建数据表:

using IronXL;
using System.Data;

WorkBook workBook = WorkBook.Load("inventory.xlsx");
WorkSheet sheet = workBook.WorkSheets.First();

// Build DataTable manually for custom column types or validation
DataTable customTable = new DataTable();

for (int col = 0; col < sheet.ColumnCount; col++)
{
    customTable.Columns.Add($"Column{col + 1}", typeof(string));
}

foreach (var row in sheet.Rows)
{
    var dataRow = customTable.NewRow();
    for (int col = 0; col < sheet.ColumnCount; col++)
    {
        dataRow[col] = row.Columns[col].Value ?? DBNull.Value;
    }
    customTable.Rows.Add(dataRow);
}

// Print headers
foreach (DataColumn column in customTable.Columns)
{
    Console.Write($"{column.ColumnName}\t");
}
Console.WriteLine();

// Print data rows
foreach (DataRow row in customTable.Rows)
{
    foreach (var item in row.ItemArray)
    {
        Console.Write($"{item}\t");
    }
    Console.WriteLine();
}
using IronXL;
using System.Data;

WorkBook workBook = WorkBook.Load("inventory.xlsx");
WorkSheet sheet = workBook.WorkSheets.First();

// Build DataTable manually for custom column types or validation
DataTable customTable = new DataTable();

for (int col = 0; col < sheet.ColumnCount; col++)
{
    customTable.Columns.Add($"Column{col + 1}", typeof(string));
}

foreach (var row in sheet.Rows)
{
    var dataRow = customTable.NewRow();
    for (int col = 0; col < sheet.ColumnCount; col++)
    {
        dataRow[col] = row.Columns[col].Value ?? DBNull.Value;
    }
    customTable.Rows.Add(dataRow);
}

// Print headers
foreach (DataColumn column in customTable.Columns)
{
    Console.Write($"{column.ColumnName}\t");
}
Console.WriteLine();

// Print data rows
foreach (DataRow row in customTable.Rows)
{
    foreach (var item in row.ItemArray)
    {
        Console.Write($"{item}\t");
    }
    Console.WriteLine();
}
$vbLabelText   $csharpLabel

这种方法让您在导入过程中拥有充分的灵活性。 通过将空值转换为 DBNull.Value 来优雅地处理空值,从而确保与数据库列约束兼容。 有关将数据写回文件的更多指导,请参阅IronXL写入 Excel 文件指南

输出

如何使用IronXL在 C# 中轻松导入、读取和操作 MS Excel 文件数据:图 8 - 数据表输出

如何使用公式、多工作表工作簿和Entity Framework?

IronXL不仅限于基础阅读,还具备应对复杂现实场景的功能。 该库保留了 Excel 公式,允许动态评估计算结果。 对于处理复杂 Excel 工作簿的开发人员来说,这可以在整个导入过程中保持数据完整性。

如何使用IronXL在 C# 中轻松导入、读取和操作 MS Excel 文件数据:图 9 - 功能

解读公式和计算值

using IronXL;

WorkBook workBook = WorkBook.Load("FinancialReport.xlsx");
WorkSheet sheet = workBook.GetWorkSheet("Reports");

// Read the evaluated result of a formula cell
decimal calculatedTotal = sheet["E10"].DecimalValue;
Console.WriteLine($"Total: {calculatedTotal}");

// Read the formula string itself
string formula = sheet["E10"].Formula;
Console.WriteLine($"Formula: {formula}"); // e.g. "=SUM(E2:E9)"
using IronXL;

WorkBook workBook = WorkBook.Load("FinancialReport.xlsx");
WorkSheet sheet = workBook.GetWorkSheet("Reports");

// Read the evaluated result of a formula cell
decimal calculatedTotal = sheet["E10"].DecimalValue;
Console.WriteLine($"Total: {calculatedTotal}");

// Read the formula string itself
string formula = sheet["E10"].Formula;
Console.WriteLine($"Formula: {formula}"); // e.g. "=SUM(E2:E9)"
$vbLabelText   $csharpLabel

支持公式功能意味着导入包含复杂计算的 Excel 文件无需在代码中重新创建业务逻辑。 该库会自动计算公式,返回计算值,同时保留原始公式字符串。 在导入包含嵌套公式的财务模型或报表模板时,这将非常有用。

跨平台兼容性确保在 Windows、Linux、macOS 和容器环境中行为一致。 这使得IronXL非常适合云部署和微服务,在这些情况下,安装 Office 是不可行的。 .NET基金会的文档重点介绍了现代.NET应用程序如何受益于平台独立性。

将 Excel 数据与 Entity Framework 集成

Entity Framework 集成创建了从 Excel 到数据库的直接管道。 以下模式可以很好地与.NET 10 顶级语句配合使用:

using IronXL;

WorkBook workBook = WorkBook.Load("ProductData.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;

// Skip the header row, map remaining rows to entity objects
var products = sheet.Rows
    .Skip(1)
    .Select(row => new Product
    {
        Name = row.Columns[0].StringValue,
        Price = row.Columns[1].DecimalValue
    })
    .ToList();

using var context = new AppDbContext();
await context.Products.AddRangeAsync(products);
await context.SaveChangesAsync();

Console.WriteLine($"Imported {products.Count} products.");
using IronXL;

WorkBook workBook = WorkBook.Load("ProductData.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;

// Skip the header row, map remaining rows to entity objects
var products = sheet.Rows
    .Skip(1)
    .Select(row => new Product
    {
        Name = row.Columns[0].StringValue,
        Price = row.Columns[1].DecimalValue
    })
    .ToList();

using var context = new AppDbContext();
await context.Products.AddRangeAsync(products);
await context.SaveChangesAsync();

Console.WriteLine($"Imported {products.Count} products.");
$vbLabelText   $csharpLabel

这种模式能够以最少的代码实现从 Excel 到数据库的直接迁移,因此非常适合 ETL 流程、一次性数据迁移和计划导入作业。 由于 LINQ 投影在上下文保存之前就在内存中运行,因此您可以在同一步骤中应用验证或转换逻辑。有关从 C# 数据创建新的 Excel 文件,请参阅IronXL创建 Excel 文件指南

支持的文件格式

IronXL无需任何额外的库或 Office 安装即可处理多种电子表格格式。 下表总结了支持的格式及其使用场景:

IronXL支持的 Excel 文件格式
翻译格式 扩大 注意事项
Excel 工作簿 .xlsx Excel 2007 及更高版本的默认格式
旧版 Excel 工作簿 .xls 兼容旧版 Excel
逗号分隔值 .csv 纯文本表格数据,广泛支持
制表符分隔值 .tsv 适用于包含嵌入式逗号的数据
Excel二进制工作簿 .xlsb 大型文件的紧凑二进制格式

要将数据导出回这些格式,请参阅IronXL导出 Excel 指南

导入过程中如何处理单元格格式?

导入 Excel 文件时,保留或检查单元格格式通常与读取原始值同样重要。 IronXL为每个单元格公开字体、颜色、对齐方式和边框属性,因此您可以应用验证规则或以编程方式重现样式。 这对于视觉格式具有语义意义的报告尤其有用——例如,彩色单元格表示风险级别,粗体行表示总数。

例如,在决定是否将某一行包含在导入的数据集中之前,您可能需要检查该行是否包含粗体文本(粗体文本通常表示该行是汇总行或总计行):

using IronXL;

WorkBook workBook = WorkBook.Load("StyledReport.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;

foreach (var row in sheet.Rows)
{
    var firstCell = row.Columns[0];

    // Skip rows where the first cell is bold (typically header or total rows)
    if (firstCell.Style.Font.Bold)
    {
        continue;
    }

    Console.WriteLine($"Data row: {firstCell.StringValue}");
}
using IronXL;

WorkBook workBook = WorkBook.Load("StyledReport.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;

foreach (var row in sheet.Rows)
{
    var firstCell = row.Columns[0];

    // Skip rows where the first cell is bold (typically header or total rows)
    if (firstCell.Style.Font.Bold)
    {
        continue;
    }

    Console.WriteLine($"Data row: {firstCell.StringValue}");
}
$vbLabelText   $csharpLabel

有关单元格和区域格式设置的完整参考,包括数字格式字符串和背景颜色访问,请参阅IronXL单元格格式设置指南。 处理后,您还可以对输出文件应用合并操作——请参阅IronXL合并单元格指南

如何为您的项目选择合适的IronXL许可证?

IronXL提供灵活的许可选项,以满足您项目的规模需求。 我们提供免费试用许可证供您评估,让您在开发过程中不受时间限制地使用所有功能。 试用版会在输出文件中添加水印,而有效的正式版许可证会移除水印。

如何使用IronXL在 C# 中轻松导入、读取和操作 MS Excel 文件数据:图 10 - 许可

对于构建生产应用程序的团队, IronXL许可包括针对个人开发人员、团队和组织范围部署的选项。 所有生产许可均包含:

  • 免版税再分发权
  • IronXL开发团队的优先支持
  • 在许可期限内,可获取所有当前版本和次要版本更新。

如果您正在将IronXL与其他 Excel 库进行比较, IronXL功能概述提供了每个级别包含内容的详细分类。

要立即开始在您的项目中使用IronXL ,请访问IronXL产品页面或直接查阅IronXL文档,其中包含设置指南、操作指南和 API 参考,涵盖库中的每个功能。

常见问题解答

如何在 C# 中导入 Excel 数据?

您可以使用 IronXL 在 C# 中轻松导入 Excel 数据,而无需在系统中安装 Microsoft Excel。

使用 IronXL 操作 Excel 文件有什么好处?

IronXL 允许开发人员用 C# 来读写和操作 Excel 文件,而无需复杂的依赖关系,并且可以在不同的平台上运行。

我需要安装 Microsoft Office 来使用 IronXL 吗?

不,IronXL 不需要安装 Microsoft Office,让您可以直接在 C# 应用程序中处理 Excel 文件。

IronXL 能否同时处理 XLSX 和 CSV 文件格式?

是的,IronXl.Excel 支持包括 XLSX 和 CSV 在内的各种 Excel 文件格式,使其成为满足不同数据处理需求的多功能工具。

IronXL 是否适合处理大型 Excel 文件?

是的,IronXl.Excel 设计用于高效处理大型 Excel 文件,使开发人员能够处理大量数据集而不会出现性能问题。

IronXL 支持哪些平台?

IronXl.Excel 兼容多种平台,可以跨平台开发和部署处理 Excel 文件的应用程序。

IronXl.Excel 如何简化从 Excel 到数据库的数据迁移?

IronXl.Excel 提供了从 Excel 表中读取和导出数据的直接方法,无需复杂的编码就能更轻松地将数据传输到数据库。

能否使用 IronXL 自动生成 Excel 报告?

是的,IronXl.Excel 允许自动生成 Excel 报告,使您能够用 C# 编程创建和操作 Excel 文件。

IronXL 是否既适用于小型应用,也适用于企业级应用?

IronXl.Excel 具有通用性和可扩展性,既适用于小型项目,也适用于需要操作 Excel 文件的大型企业级应用程序。

Curtis Chau
技术作家

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

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

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me