使用 IRONXL 如何使用IronXL在 C# 中读取 Excel 文件 Curtis Chau 已更新:2026年2月27日 下载 IronXL NuGet 下载 DLL 下载 免费试用 LLM副本 LLM副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 在 C# 应用程序中读取 Excel 文件是业务软件、数据处理管道和报表系统的常见需求。 使用 Microsoft Office Interop 的传统方法需要在每台服务器或工作站上安装 Excel,这会造成脆弱的依赖关系,使部署和许可变得复杂。 IronXL完全消除了这种依赖性——您的应用程序无需在环境中任何地方安装 Office 即可读取 XLSX、XLS、CSV 和其他电子表格格式。 本教程将引导您完成所需的每项技术:安装库、加载工作簿、提取键入的单元格值、遍历行和列、运行聚合计算以及构建完整的员工数据读取器。 所有示例均使用 C#,顶级语句面向.NET 10。 如何安装IronXL进行 Excel 处理? 在 Visual Studio 中打开NuGet程序包管理器控制台,然后运行以下命令将IronXL添加到您的项目中。 或者,如果您更喜欢在终端中操作,请使用第二行所示的.NET CLI 命令: Install-Package IronXl.Excel dotnet add package IronXl.Excel Install-Package IronXl.Excel dotnet add package IronXl.Excel SHELL 该软件包只需几秒钟即可安装,并向您的项目添加一个托管程序集引用。 无需进行 COM 注册,无需进行 Office 主互操作程序集管理,也无需管理特定版本的 Excel 依赖项。 安装完成后,在每个处理电子表格数据的文件顶部添加 using 指令: using IronXL; using IronXL; $vbLabelText $csharpLabel 单一命名空间使您可以访问 WorkSheet、单元格区域、类型化值属性、聚合函数以及IronXL 的所有其他类型。 IronXL .Excel 的NuGet Gallery 页面列出了所有可用的版本及其完整的依赖关系树。 IronXL支持哪些 Excel 文件格式? 了解应用程序必须处理的格式,会影响您发出的 API 调用和项目采用的存储决策。 XLSX (自 Excel 2007 起成为默认格式)是 XML 文件的 ZIP 压缩包。 它支持超过一百万行数据、丰富的格式设置、透视表和命名范围。 大多数现代数据管道都会生成 XLSX 输出,因此这是您最常遇到的格式。 XLS是 Excel 2003 及更早版本使用的传统二进制格式。 有些企业系统仍然会导出 XLS 格式,因此在与旧基础设施集成时,对这种格式的可靠支持至关重要。 IronXL无需任何特殊配置即可读取 XLS 文件。 XLSM为 XLSX 添加了宏支持功能。 即使IronXL不执行嵌入的 VBA 代码,它也会从 XLSM 文件中读取电子表格数据,这是服务器端数据提取的正确行为。 CSV 和 TSV是纯文本表格格式,广泛用于系统间的数据交换。 WorkBook.LoadCSV 处理逗号分隔的文件, IronXL返回相同的 WorkBook 对象,您的代码已经知道如何访问该对象,从而保持您的数据读取逻辑与源格式无关。 IronXL会在您调用 WorkBook.Load 时自动从文件扩展名检测文件格式。 大多数情况下,您无需明确指定格式,这简化了必须处理来自多个来源的输入的代码。 IronXL支持的 Excel 文件格式 翻译格式 扩大 加载方法 注意事项 打开 XML 工作簿 .xlsx WorkBook.Load 默认现代格式 传统二进制文件 .xls WorkBook.Load Excel 2003 及更早版本 启用宏 .xlsm WorkBook.Load 数据已读取;宏未执行 逗号分隔 .csv WorkBook.LoadCSV 优化的 CSV 解析器 制表符分隔 .tsv WorkBook.Load 制表符分隔符变体 如何加载和读取Excel工作簿? WorkBook.Load 方法是所有基于文件的操作的入口点。 传入文件路径, IronXL将返回一个完整的工作簿对象,您可以立即对其进行查询: using IronXL; // Load the workbook; format is detected automatically WorkBook workbook = WorkBook.Load("Employees.xlsx"); // Access the first worksheet WorkSheet sheet = workbook.DefaultWorkSheet; // Read a single cell by A1 address string companyName = sheet["A1"].StringValue; Console.WriteLine($"Company: {companyName}"); // Access sheets by name or by zero-based index WorkSheet byName = workbook.GetWorkSheet("Sales"); WorkSheet byIndex = workbook.WorkSheets[1]; // Load a password-protected file WorkBook secured = WorkBook.Load("Confidential.xlsx", "p@ssw0rd"); using IronXL; // Load the workbook; format is detected automatically WorkBook workbook = WorkBook.Load("Employees.xlsx"); // Access the first worksheet WorkSheet sheet = workbook.DefaultWorkSheet; // Read a single cell by A1 address string companyName = sheet["A1"].StringValue; Console.WriteLine($"Company: {companyName}"); // Access sheets by name or by zero-based index WorkSheet byName = workbook.GetWorkSheet("Sales"); WorkSheet byIndex = workbook.WorkSheets[1]; // Load a password-protected file WorkBook secured = WorkBook.Load("Confidential.xlsx", "p@ssw0rd"); $vbLabelText $csharpLabel DefaultWorkSheet 属性返回第一张工作表,涵盖了大多数单页文件。 当您的文件包含多个工作表时,GetWorkSheet 按名称检索,而 WorkSheets[n] 按从零开始的索引检索。 WorkBook API 参考文档记录了工作簿对象的每个重载和属性。 使用IronXL读取 Excel 文件:无需 Microsoft Office 的分步指南:图 1 -安装 输入 使用IronXL读取 Excel 文件: .NET的分步指南(无需 Microsoft Office):图 2 - Excel 输入示例 输出 使用IronXL读取 Excel 文件:无需 Microsoft Office 的分步指南:图 3 -控制台输出 如何从Excel中读取已输入的单元格值? IronXL中的每个单元格都公开了类型化属性,这些属性会返回您需要的确切数据类型的值——无需手动解析或转换。 类型化属性会自动处理来自底层单元格表示的强制转换: using IronXL; WorkBook workbook = WorkBook.Load("Employees.xlsx"); WorkSheet sheet = workbook.DefaultWorkSheet; // Extract typed values from row 2 int employeeId = sheet["A2"].IntValue; string name = sheet["B2"].StringValue; string department = sheet["C2"].StringValue; decimal salary = sheet["D2"].DecimalValue; DateTime hireDate = sheet["E2"].DateTimeValue; Console.WriteLine($"ID: {employeeId}"); Console.WriteLine($"Name: {name}"); Console.WriteLine($"Department: {department}"); Console.WriteLine($"Salary: {salary:C}"); Console.WriteLine($"Hired: {hireDate:d}"); // Use the Text property for the formatted display value string formattedSalary = sheet["D2"].Text; // "$75,000.00" string formattedDate = sheet["E2"].Text; // "28/02/2026" // Guard against empty cells before reading if (!sheet["B3"].IsEmpty) { string value = sheet["B3"].StringValue; } using IronXL; WorkBook workbook = WorkBook.Load("Employees.xlsx"); WorkSheet sheet = workbook.DefaultWorkSheet; // Extract typed values from row 2 int employeeId = sheet["A2"].IntValue; string name = sheet["B2"].StringValue; string department = sheet["C2"].StringValue; decimal salary = sheet["D2"].DecimalValue; DateTime hireDate = sheet["E2"].DateTimeValue; Console.WriteLine($"ID: {employeeId}"); Console.WriteLine($"Name: {name}"); Console.WriteLine($"Department: {department}"); Console.WriteLine($"Salary: {salary:C}"); Console.WriteLine($"Hired: {hireDate:d}"); // Use the Text property for the formatted display value string formattedSalary = sheet["D2"].Text; // "$75,000.00" string formattedDate = sheet["E2"].Text; // "28/02/2026" // Guard against empty cells before reading if (!sheet["B3"].IsEmpty) { string value = sheet["B3"].StringValue; } $vbLabelText $csharpLabel Text 属性返回 Excel 中格式化的显示值——当您需要格式化的数字字符串而不是原始数值时非常有用。 对于包含Excel 公式的单元格, IronXL会计算表达式并通过相同的类型属性返回计算结果。 附加值属性 -- BoolValue, DoubleValue, FloatValue -- 出现在单元格值引用中。 如何遍历 Excel 中的行和列? 处理数据集中的每一条记录都需要遍历行和列。 IronXL 的范围语法直接对应于 Excel 的 A1 表示法,因此对于任何编写过电子表格公式的人来说,选择单元格区域的操作都很熟悉: using IronXL; WorkBook workbook = WorkBook.Load("Employees.xlsx"); WorkSheet sheet = workbook.DefaultWorkSheet; // Iterate a single column range Console.WriteLine("Employee List:"); foreach (var cell in sheet["B2:B100"]) { if (!string.IsNullOrEmpty(cell.Text)) Console.WriteLine($" - {cell.Text}"); } // Iterate all rows and all columns using the Rows property foreach (var row in sheet.Rows) { foreach (var cell in row) Console.Write(cell.Text.PadRight(15)); Console.WriteLine(); } using IronXL; WorkBook workbook = WorkBook.Load("Employees.xlsx"); WorkSheet sheet = workbook.DefaultWorkSheet; // Iterate a single column range Console.WriteLine("Employee List:"); foreach (var cell in sheet["B2:B100"]) { if (!string.IsNullOrEmpty(cell.Text)) Console.WriteLine($" - {cell.Text}"); } // Iterate all rows and all columns using the Rows property foreach (var row in sheet.Rows) { foreach (var cell in row) Console.Write(cell.Text.PadRight(15)); Console.WriteLine(); } $vbLabelText $csharpLabel 范围 sheet["B2:B100"] 返回单元格对象的可枚举集合。 检查 string.IsNullOrEmpty 会优雅地跳过空白行。 Rows 属性(在工作表数据范围指南中有详细说明)一次遍历工作表一行,并显示每一行的单元格,而无需事先知道列数。 输出 使用IronXL读取 Excel 文件:无需 Microsoft Office 的分步指南:图 4 - Excel 行输出 如何在Excel数据上运行聚合计算? IronXL包含内置的聚合函数,可直接在单元格区域上计算结果——无需手动累加循环: using IronXL; WorkBook workbook = WorkBook.Load("Employees.xlsx"); WorkSheet sheet = workbook.DefaultWorkSheet; // Built-in aggregate methods work on any named range decimal total = sheet["D2:D200"].Sum(); decimal highest = sheet["D2:D200"].Max(); decimal lowest = sheet["D2:D200"].Min(); decimal average = sheet["D2:D200"].Avg(); Console.WriteLine($"Total Payroll: {total:C}"); Console.WriteLine($"Highest Salary: {highest:C}"); Console.WriteLine($"Lowest Salary: {lowest:C}"); Console.WriteLine($"Average Salary: {average:C}"); // Combine with LINQ for filtered aggregation decimal itTotal = sheet["D2:D200"] .Where(c => sheet[$"C{c.RowIndex}"].StringValue == "IT") .Sum(c => c.DecimalValue); Console.WriteLine($"IT Department Total: {itTotal:C}"); using IronXL; WorkBook workbook = WorkBook.Load("Employees.xlsx"); WorkSheet sheet = workbook.DefaultWorkSheet; // Built-in aggregate methods work on any named range decimal total = sheet["D2:D200"].Sum(); decimal highest = sheet["D2:D200"].Max(); decimal lowest = sheet["D2:D200"].Min(); decimal average = sheet["D2:D200"].Avg(); Console.WriteLine($"Total Payroll: {total:C}"); Console.WriteLine($"Highest Salary: {highest:C}"); Console.WriteLine($"Lowest Salary: {lowest:C}"); Console.WriteLine($"Average Salary: {average:C}"); // Combine with LINQ for filtered aggregation decimal itTotal = sheet["D2:D200"] .Where(c => sheet[$"C{c.RowIndex}"].StringValue == "IT") .Sum(c => c.DecimalValue); Console.WriteLine($"IT Department Total: {itTotal:C}"); $vbLabelText $csharpLabel Max 和 Avg 会自动跳过空单元格,并在后台处理数值转换。 将 LINQ 查询链接到该范围,即可获得筛选后的聚合结果——部门小计、日期范围总和以及条件计数——所有这些都无需离开IronXL API。 如何构建一个完整的员工数据读取器? 以下示例将目前为止介绍的所有内容整合到一个可用于生产的控制台应用程序中,该应用程序加载员工电子表格、格式化每条记录、累加工资总额、处理回写并优雅地捕获错误: using IronXL; try { WorkBook workbook = WorkBook.Load("Employees.xlsx"); WorkSheet sheet = workbook.DefaultWorkSheet; Console.WriteLine("=== Employee Data Report ===\n"); int rowNumber = 2; decimal totalSalary = 0m; int employeeCount = 0; while (!string.IsNullOrEmpty(sheet[$"A{rowNumber}"].StringValue)) { int id = sheet[$"A{rowNumber}"].IntValue; string name = sheet[$"B{rowNumber}"].StringValue; string department = sheet[$"C{rowNumber}"].StringValue; decimal salary = sheet[$"D{rowNumber}"].DecimalValue; Console.WriteLine($"{id,4} {name,-20} {department,-15} {salary,10:C}"); totalSalary += salary; employeeCount += 1; rowNumber += 1; } Console.WriteLine($"\nTotal Employees: {employeeCount}"); Console.WriteLine($"Total Payroll: {totalSalary:C}"); // Write a new record back to the sheet and save sheet["A10"].Value = 1010; sheet["B10"].Value = "Jane Doe"; sheet["C10"].Value = "Finance"; sheet["D10"].Value = 75000; workbook.SaveAs("Employees-Updated.xlsx"); } catch (Exception ex) { Console.WriteLine($"Error reading Excel file: {ex.Message}"); } using IronXL; try { WorkBook workbook = WorkBook.Load("Employees.xlsx"); WorkSheet sheet = workbook.DefaultWorkSheet; Console.WriteLine("=== Employee Data Report ===\n"); int rowNumber = 2; decimal totalSalary = 0m; int employeeCount = 0; while (!string.IsNullOrEmpty(sheet[$"A{rowNumber}"].StringValue)) { int id = sheet[$"A{rowNumber}"].IntValue; string name = sheet[$"B{rowNumber}"].StringValue; string department = sheet[$"C{rowNumber}"].StringValue; decimal salary = sheet[$"D{rowNumber}"].DecimalValue; Console.WriteLine($"{id,4} {name,-20} {department,-15} {salary,10:C}"); totalSalary += salary; employeeCount += 1; rowNumber += 1; } Console.WriteLine($"\nTotal Employees: {employeeCount}"); Console.WriteLine($"Total Payroll: {totalSalary:C}"); // Write a new record back to the sheet and save sheet["A10"].Value = 1010; sheet["B10"].Value = "Jane Doe"; sheet["C10"].Value = "Finance"; sheet["D10"].Value = 75000; workbook.SaveAs("Employees-Updated.xlsx"); } catch (Exception ex) { Console.WriteLine($"Error reading Excel file: {ex.Message}"); } $vbLabelText $csharpLabel 当 A 列为空时,循环终止,这使得读取器能够适应任何长度的电子表格,而无需硬编码行数。 写回值遵循与读取相同的单元格地址语法,并且 SaveAs 将更改持久化到新文件中,因此原始文件保持不变。 try/catch 代码块处理丢失的文件、锁定的工作簿和损坏的数据——所有这些情况都会在生产环境中发生,因为输入文件来自外部源。 输出 使用IronXL读取 Excel 文件:无需 Microsoft Office 的分步指南:图 5 -员工数据输出 创建电子表格的操作指南和将 XLSX 转换为 CSV 的指南展示了如何在端到端工作流程中结合读取和写入操作。 单元格样式指南涵盖了格式化输出时的字体大小、颜色和边框。 使用IronXL读取 Excel 文件: .NET的分步指南(无需 Microsoft Office):图 6 - Windows 窗体输出 您如何应对高阶阅读场景? 在实际项目中,会出现一些不太常见但很重要的情况。 命名范围、工作表发现和 CSV 加载均有专门的 API 支持。 命名范围允许您通过逻辑标签而不是单元格地址来引用数据。 如果工作簿作者定义了一个名为 SalaryTable 的命名范围,则可以通过 GetRangeByName 直接访问它: var range = workbook.GetRangeByName("SalaryTable"); decimal total = range.Sum(); Console.WriteLine($"Named range total: {total:C}"); var range = workbook.GetRangeByName("SalaryTable"); decimal total = range.Sum(); Console.WriteLine($"Named range total: {total:C}"); $vbLabelText $csharpLabel 工作表发现功能会列出工作簿中的每个工作表,这在处理包含数量不固定的工作表的文件时非常有用: foreach (WorkSheet ws in workbook.WorkSheets) Console.WriteLine($"Sheet: {ws.Name}, Rows: {ws.RowCount}"); foreach (WorkSheet ws in workbook.WorkSheets) Console.WriteLine($"Sheet: {ws.Name}, Rows: {ws.RowCount}"); $vbLabelText $csharpLabel CSV 加载使用专门针对纯文本文件优化的方法,返回 WorkSheet,您可以使用相同的 API 进行导航: WorkBook csv = WorkBook.LoadCSV("data.csv"); WorkSheet first = csv.DefaultWorkSheet; Console.WriteLine(first["A1"].StringValue); WorkBook csv = WorkBook.LoadCSV("data.csv"); WorkSheet first = csv.DefaultWorkSheet; Console.WriteLine(first["A1"].StringValue); $vbLabelText $csharpLabel 这些模式涵盖了数据迁移项目、ETL 管道和自动化报告系统中出现的高级读取场景。 有关完整的 API 接口,请参阅IronXL对象参考。 其他权威参考资料: IronXL文档主页 如何编辑Excel公式 -如何使用数学函数 如何选择范围 ECMA-376 Open XML 规范——定义 XLSX 格式的权威标准 Microsoft Open XML SDK 文档——底层文件结构的参考资料 NuGet Gallery -- IronXl.Excel -- 包含版本历史记录和下载统计信息的包页面 下一步计划是什么? IronXL将依赖关系繁多的 Interop 挑战中的 Excel 文件读取操作简化为几行简单的 C# 代码。 加载工作簿、提取键入的值、逐行迭代、运行聚合计算以及处理边界情况,所有这些都遵循相同的一致 API 模式——无需在部署环境中安装 Microsoft Office。 从教程过渡到生产环境: 1.开始免费试用,解锁IronXL 的全部功能,并在购买许可证之前使用您自己的 Excel 文件进行验证。 浏览IronXL 的完整文档,获取有关编写、格式化、样式设置和转换电子表格的指南。 探索对象参考和完整 API ,发现库中可用的每个类、方法和属性。 如果您的工作流程需要生成输出文件以及读取输入文件,请查看创建电子表格的操作指南。 查看IronXL博客文章索引,了解更多涵盖实际场景(例如报告生成、数据验证和多工作表合并)的教程。 常见问题解答 什么是 IronXL? IronXL 是一个 .NET 库,允许开发人员在无需安装 Microsoft Office 的情况下读取、编辑和创建 XLSX 和 XLS 等各种格式的 Excel 文件。 如何使用IronXL在 C# 中读取 Excel 文件? 调用 WorkBook.Load 并传入文件路径以打开工作簿,然后使用 A1 表示法和类型属性(例如 StringValue、IntValue 和 DecimalValue)访问单元格。 为什么选择 IronXL 而不是 Microsoft Office Interop 来读取 Excel 文件? IronXL无需安装 Microsoft Office,消除了 COM 依赖项,简化了服务器端部署。 IronXL可以读取哪些Excel文件格式? IronXL支持读取 XLSX、XLS、XLSM、CSV 和 TSV 格式的文件。格式检测基于文件扩展名自动完成。 IronXL 能高效处理大型 Excel 文件吗? 是的, IronXL针对性能进行了优化,可以处理大型 Excel 文件,因此适用于数据密集型应用。 IronXL是否兼容.NET 10? 是的, IronXL支持包括.NET 10 在内的现代.NET版本以及.NET Framework项目。 如何使用IronXL进行聚合计算? 对任意单元格区域使用内置的 Sum、Min、Max 和 Avg 方法。这些方法会自动跳过空单元格。 IronXL能读取受密码保护的 Excel 文件吗? 是的,将密码作为第二个参数传递给 WorkBook.Load:WorkBook.Load("file.xlsx", "password")。 Curtis Chau 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已更新2026年3月1日 在.NET C# 中下载 Excel 文件:将数据导出为 XLSX、CSV 等格式 使用 C# 和IronXL在ASP.NET Core中下载 Excel 文件。从 MVC 控制器导出数据到 XLSX、CSV 和 XML 格式,并返回 MemoryStream 和 File() 函数。包含代码示例。 阅读更多 已更新2026年3月1日 如何在Blazor中使用IronXL导出 Excel 文件 学习如何使用IronXL在Blazor Server 应用程序中将数据导出到 Excel。本指南涵盖项目设置、服务设计、条件格式设置、多工作表报表和错误处理,并提供完整的 C# 代码示例。 阅读更多 已更新2026年2月27日 如何在 C# 中读取 Excel 文件而不是使用 StreamReader 了解为什么 StreamReader 无法读取 Excel 文件,以及如何在 C# .NET中使用IronXL从磁盘或内存流加载 XLSX 和 XLS 工作簿。 阅读更多 如何使用IronXL在 C# .NET Core中创建 Excel 电子表格如何使用IronXL在 C# 中将 Dat...
已更新2026年3月1日 在.NET C# 中下载 Excel 文件:将数据导出为 XLSX、CSV 等格式 使用 C# 和IronXL在ASP.NET Core中下载 Excel 文件。从 MVC 控制器导出数据到 XLSX、CSV 和 XML 格式,并返回 MemoryStream 和 File() 函数。包含代码示例。 阅读更多
已更新2026年3月1日 如何在Blazor中使用IronXL导出 Excel 文件 学习如何使用IronXL在Blazor Server 应用程序中将数据导出到 Excel。本指南涵盖项目设置、服务设计、条件格式设置、多工作表报表和错误处理,并提供完整的 C# 代码示例。 阅读更多
已更新2026年2月27日 如何在 C# 中读取 Excel 文件而不是使用 StreamReader 了解为什么 StreamReader 无法读取 Excel 文件,以及如何在 C# .NET中使用IronXL从磁盘或内存流加载 XLSX 和 XLS 工作簿。 阅读更多