IRONSOFTWAREHOME
USING IRONXL

C# 中读取 Excel 文件的最佳方法 | IronXL分步指南

Curtis Chau
Curtis Chau
Updated: 2026年6月28日

对于.NET开发人员来说,在 C# 中读取 Excel 文件是一个常见的挑战。 无论您是构建数据导入管道、报表工具还是批处理系统,正确解析电子表格数据都至关重要。 IronXL是一个.NET库,它无需服务器上的 Microsoft Office 或 COM 互操作 即可处理 XLSX、XLS 和 CSV 文件。 本指南将带您了解完整的流程——从安装到高级查询——以便您可以为您的项目选择正确的方法。

第一步:
arrow pointer

在C#中读取Excel文件的最佳方式是什么?

最佳方法是使用专用的、独立于 Office 的库,例如IronXL。 像 Microsoft.Office.Interop.Excel 这样的传统方法在安装了 Excel 的机器上可以正常工作,但在服务器或容器环境中却很脆弱,因为它们会在后台启动一个 COM 进程。 OpenXML SDK 是免费的,并且对服务器安全,但它公开了一个底层 XML 模型,日常任务需要大量的样板代码。

IronXL 的性能介于这两种极端情况之间。 该 API 反映了开发者对电子表格的固有认知——工作簿包含工作表,工作表包含单元格,单元格包含输入的值。 该库内部处理格式检测、公式计算和编码,因此您可以将时间花在业务逻辑上,而不是解析细节上。

C# 中 Excel 阅读方法的比较
方法需要 Office 吗?服务器安全吗?简化应用程序接口格式支持
COM 互操作低的XLSX、XLS
OpenXML SDK低的仅限 XLSX
IronXL高的XLSX、XLS、CSV

IronXL的Excel读取文档涵盖了完整的API界面。 目前,以下各节展示了您在每个项目中都会用到的核心模式。

如何在.NET项目中安装IronXL ?

使用NuGet包管理器安装只需不到一分钟。 在项目目录中打开终端并运行:

dotnet add package IronXL.Excel

或者,使用 Visual Studio 包管理器控制台:

PM > Install-Package IronXL.Excel

安装后,将using IronXL;指令添加到任何需要电子表格访问的文件中。 该库面向.NET 10、 .NET 8、 .NET 6、 .NET Framework 4.6.2 和.NET Standard 2.0,因此无需升级运行时即可集成到现有项目中。有关特定平台的说明和NuGet包详细信息,请参阅IronXL安装指南

无需额外的运行时组件、注册表项或 Office 许可证。 NuGet包包含了库所需的一切。

验证安装

添加软件包后,构建一次项目以确认引用解析正确。 如果您看到针对.csproj中的目标框架是受支持的版本之一。 IronXL兼容性矩阵列出了所有已确认的运行时目标。

如何加载和读取Excel工作簿?

加载工作簿只需要调用一个方法。 WorkBook对象。

using IronXL;

// Load any supported format -- XLSX、XLS, or CSV
WorkBook workbook = WorkBook.Load("financial_report.xlsx");

// Access the first worksheet by position
WorkSheet worksheet = workbook.WorkSheets[0];

// Or retrieve a named worksheet
WorkSheet expenses = workbook.GetWorkSheet("Expenses");

Console.WriteLine($"Sheets loaded: {workbook.WorkSheets.Count}");
Console.WriteLine($"Default sheet rows: {worksheet.RowCount}");

C#中通过IronXL读取Excel文件的最佳方法:图1 - 控制台输出用于确认已加载的工作簿

WorkBook对象保持所有工作表数据可访问。 每个WorkSheets[0]访问对于单一工作表文件是可靠的; 当文件包含多个名称已知的标签页时,按名称访问更安全。

IronXL会在读取单元格时自动计算公式。 如果单元格sheet["B10"].DecimalValue将返回计算出的总数,而不是公式字符串。 有关工作簿加载选项的更多详细信息,请参阅加载电子表格操作指南

同时处理多个工作表

当一个工作簿包含多个标签时,您可以使用workbook.WorkSheets枚举它们,并依次处理每个标签。 这对于按月、部门或地区将数据拆分到不同标签页的文件非常有用。 WorkSheet.Name属性为您提供标签名称字符串,您可以用它进行条件处理或记录。

如何读取工作表中的单元格值?

IronXL为每个单元格提供强类型属性,因此您可以直接将值读取到正确的.NET类型中,而无需手动解析。

using IronXL;

WorkBook workbook = WorkBook.Load("Products.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;

// Address-based access with typed properties
string productName = sheet["A2"].StringValue;
int quantity       = sheet["B2"].IntValue;
decimal price      = sheet["C2"].DecimalValue;
bool inStock       = sheet["D2"].BoolValue;

// Check for empty cells before processing
var statusCell = sheet["E2"];
if (statusCell.Value != null && statusCell.StringValue.Length > 0)
{
    Console.WriteLine($"Status: {statusCell.StringValue}");
}

// Row/column index access (zero-based)
var firstDataCell = sheet.Rows[1].Columns[0];
Console.WriteLine($"Product: {productName}, Qty: {quantity}, Price: {price:C}");

C#中通过IronXL读取Excel文件的最佳方法:图2 - 使用IronXL的简单Excel读取输出

sheet["A2"]语法使用标准的Excel表示法。 列字母不区分大小写,行号从 1 开始,与 Excel 标记单元格的方式一致。 单元格值读取文档展示了额外的类型访问器,包括用于日期格式单元格的DateTimeValue

当单元格包含以文本存储的数字时(导出电子表格中的常见数据质量问题),0。 在生产代码中将意外数据作为类型化值处理之前,务必先对其进行验证。

处理日期和布尔单元格

Excel 中的日期单元格在内部以序列号的形式存储。 IronXL提供DateTimeValue将它们转换为.NET DateTime对象,而无需手动计算。 对于包含BoolValue返回正确的布尔值,而无需字符串比较。 这些类型化访问器消除了一类在通过通用文本解析器读取电子表格时经常出现的数据类型错误。

如何遍历行和单元格?

遍历数据集需要一个范围或行集合。 IronXL支持这两种方法,您可以将它们结合起来以匹配数据的形状。

using IronXL;

WorkBook workbook = WorkBook.Load("financial_report.xlsx");
WorkSheet sheet = workbook.WorkSheets[0];

// Iterate a cell range -- skips header row
foreach (var cell in sheet["A2:D100"])
{
    Console.WriteLine($"{cell.AddressString}: {cell.Text}");
}

// Row-by-row with column access
for (int rowIndex = 1; rowIndex < sheet.RowCount; rowIndex++)
{
    var row = sheet.Rows[rowIndex];
    var values = new System.Text.StringBuilder();

    foreach (var cell in row)
    {
        if (cell.Value != null)
            values.Append($"{cell.StringValue}\t");
    }

    Console.WriteLine(values.ToString().TrimEnd());
}

C#中通过IronXL读取Excel文件的最佳方法:图3 - 遍历行的输出

范围字符串"A2:D100"创建一个平面单元格集合。 该范围内的行按从上到下、从左到右的顺序处理。 这种模式非常适合导出到DataTable或数据库。

sheet.RowCount属性反映工作表中最后使用的行,因此循环在数据结束时自动终止。 遍历Excel范围指南涵盖了包括列优先遍历在内的其他迭代模式。

跳过标题行

大多数电子表格都有一个标题行,用于描述列名称,而不是包含数据。 从第2行开始范围迭代(例如,rowIndex = 1开始索引循环以跳过标题行。 如果您使用ToDataTable(true),IronXL会自动处理标题检测,并将列名映射到第一行。

如何处理多种Excel格式?

IronXL会自动根据文件扩展名和文件头检测文件格式。 XLSX、XLS 和 CSV 文件的 API 完全相同,这意味着相同的解析代码无需条件逻辑即可应用于所有三种格式。

using IronXL;

// Load different formats with identical API
WorkBook xlsxBook = WorkBook.Load("Modern.xlsx");
WorkBook xlsBook  = WorkBook.Load("Legacy.xls");
WorkBook csvBook  = WorkBook.Load("Export.csv");

// Access worksheets identically across formats
WorkSheet sheet1 = xlsxBook.DefaultWorkSheet;
WorkSheet sheet2 = xlsBook.DefaultWorkSheet;
WorkSheet sheet3 = csvBook.DefaultWorkSheet;

// Cross-format conversion -- save XLSX as CSV, or CSV as XLSX
xlsxBook.SaveAs("converted_output.csv");
csvBook.SaveAs("structured_output.xlsx");

Console.WriteLine($"XLSX rows: {sheet1.RowCount}");
Console.WriteLine($"XLS rows:  {sheet2.RowCount}");
Console.WriteLine($"CSV rows:  {sheet3.RowCount}");

对于 CSV 文件, IronXL遵循 RFC 4180 约定,包括包含逗号的带引号字段、带引号的值中的换行符以及转义的双引号。 CSV到XLSX转换指南涵盖了非标准CSV导出分隔符自定义。

当您的应用程序必须从外部系统接收文件时,最佳实践是在加载之前检查文件扩展名并验证文件内容。 如果文件损坏或格式不受支持, IronXL会抛出一个描述性异常,您可以捕获该异常并将其显示给用户。

如何在 Excel 数据上运行高级查询?

除了逐个单元格读取之外, IronXL还提供了聚合函数和 LINQ 兼容性,可以将工作表范围转换为可查询的集合。

using IronXL;
using System.Linq;

WorkBook workbook = WorkBook.Load("Financials.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;

// Built-in aggregates -- no manual looping needed
decimal totalSales = sheet["B2:B50"].Sum();
decimal maxRevenue = sheet["C2:C50"].Max(c => c.DecimalValue);
decimal avgMargin  = sheet["D2:D50"].Avg();

// LINQ filtering directly on a range
var highValueRows = sheet["C2:C50"]
    .Where(c => c.DecimalValue > 1000)
    .Select(c => new { c.AddressString, c.DecimalValue });

foreach (var row in highValueRows)
    Console.WriteLine($"高的 value at {row.AddressString}: {row.DecimalValue:C}");

// Write a calculated result back to the sheet
sheet["E2"].Value = totalSales;
workbook.SaveAs("Financials_Updated.xlsx");

Console.WriteLine($"Total: {totalSales:C}, Max: {maxRevenue:C}, Avg: {avgMargin:C}");

C#中通过IronXL读取Excel文件的最佳方法:图4 - 高级读取操作控制台输出

当您需要在将行导入数据库之前对其进行筛选,或者验证列中的所有值是否都满足阈值时,LINQ 兼容性非常有用。 该库在 LINQ 运行之前会评估公式,因此聚合查询始终对最终计算值进行操作,而不是对公式字符串进行操作。

IronXL的LINQ教程涵盖了连接工作表、按列分组和将结果投影为强类型对象的模式,这些模式消除了数据管道代码中的大量样板。

如何将Excel数据导出到DataTable?

许多.NET应用程序将电子表格数据加载到ADO.NET DataTable中以便进一步处理或插入数据库。 IronXL提供了一种直接转换方法,无需手动进行列映射。

using IronXL;
using System.Data;

WorkBook workbook = WorkBook.Load("SalesData.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;

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

Console.WriteLine($"Columns: {dataTable.Columns.Count}");
Console.WriteLine($"Rows:    {dataTable.Rows.Count}");

// Iterate the DataTable normally
foreach (DataRow row in dataTable.Rows)
{
    Console.WriteLine($"{row["ProductName"]} -- {row["Quantity"]} -- {row["Price"]}");
}

ToDataTable将第一行工作表视为列标题。 结果DataTable使用与标题文本匹配的字符串列名,使得随后的LINQ-to-DataSet查询可读。 DataTable导出文档涵盖了空值处理和类型推断选项。

当下游代码已经期待SqlBulkCopy向SQL Server插入行时。 您可以加载XLSX文件,将其转换为DataTable,并在无需编写任何列映射样板代码的情况下进行批量插入。

IronXL核心读取 API 参考
手术API返回
加载文件WorkBook.Load(path)WorkBook
按索引获取工作表workbook.WorkSheets[0]WorkSheet
按名称获取工作表workbook.GetWorkSheet("name")WorkSheet
读取字符串单元格sheet["A1"].StringValue字符串
读取十进制单元格sheet["B1"].DecimalValuedecimal
迭代范围foreach cell in sheet["A2:D100"]IEnumerable<Cell>
对一定范围求和sheet["B2:B50"].Sum()decimal
导出到数据表sheet.ToDataTable(true)DataTable

有关完整的 API 列表,请参阅IronXL API 参考。 该参考文档涵盖了每个属性和方法,包括参数描述和返回类型详情。

下一步计划是什么?

只要有了合适的库,用 C# 读取 Excel 文件就非常简单。 IronXL消除了对 Office 的依赖,简化了 API 接口,并且使用相同的代码路径处理 XLSX、XLS 和 CSV 格式。 这里涵盖的模式——加载工作簿、读取类型单元格值、迭代范围、运行聚合和导出到DataTable——涵盖了大部分实际的电子表格读取需求。

为了继续沿用这些模式:

对于将IronXL与其他库进行评估的团队,IronXL与EPPlus比较以及IronXL与NPOI比较涵盖了性能基准和API差异。 两项比较都包含了每个库中等效操作的代码示例。

如果您遇到来自旧系统的不寻常的电子表格结构,微软自己的Excel 文件格式规范是一个有用的参考。 ECMA-376 标准定义了 XLSX 文件遵循的 OOXML 格式。

在购买正式版许可证之前,您可以先申请IronXL免费试用许可证,在您自己的项目中测试完整的 API。

Curtis Chau
技术作家

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

...
阅读更多

相关文章

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户