IronXL 教程 如何在 C# 中读取 Excel 文件 如何在不使用互操作的情况下用 C# 读取 Excel 文件:完整开发者指南 Jacob Mellor 已更新:一月 10, 2026 下载 IronXL NuGet 下载 DLL 下载 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 This article was translated from English: Does it need improvement? Translated View the article in English 使用 IronXL 掌握 C# 中的 Excel 文件操作——IronXL 是一个强大的 .NET 库,无需安装 Microsoft Office 即可读取、验证和导出电子表格数据。 本教程全面演示了 Excel 的实用操作,包括数据验证、数据库转换和 REST API 集成。 快速入门:使用 IronXL 一行读取单元格 使用 IronXL,只需一行代码即可加载 Excel 工作簿并检索单元格的值。 它的设计宗旨是方便易用——无需互操作,无需复杂设置——只需快速访问您的数据。 立即开始使用 NuGet 创建 PDF 文件: 使用 NuGet 包管理器安装 IronXL PM > Install-Package IronXL.Excel 复制并运行这段代码。 var value = IronXL.WorkBook.Load("file.xlsx").GetWorkSheet(0)["A1"].StringValue; 部署到您的生产环境中进行测试 立即开始在您的项目中使用 IronXL,免费试用! 免费试用30天 如何设置 IronXL 以用 C# 读取 Excel 文件? 在 C# 项目中设置 IronXL 以读取 Excel 文件只需几分钟。 该库同时支持`.XLS`和`.XLSX`格式,使其能够胜任任何与 Excel 相关的任务。 请按照以下步骤开始: 1.[下载用于读取 Excel 文件的 C# 库](https://nuget.org/packages/IronXL.Excel/) 2. 使用`WorkBook.Load()`加载和读取 Excel 工作簿 3. 使用`GetWorkSheet()`方法访问工作表 4. 使用直观的语法读取单元格值,例如`sheet["A1"].Value` 5. 通过编程方式验证和处理电子表格数据 6. 使用 Entity Framework 将数据导出到数据库 IronXL 擅长使用 C# 读取和编辑 Microsoft Excel 文档。 该库独立运行——它既不需要 Microsoft Excel 也不需要[Interop](https://learn.microsoft.com/en-us/dotnet/api/microsoft.office.interop.excel?view=excel-pia)即可运行。 事实上, [IronXL 提供的 API 比 Microsoft.Office.Interop.Excel 更快、更直观](/csharp/excel/blog/compare-to-other-components/microsoft-office-excel-interop-alternative/)。 IronXL包含: - 我们的 .NET 工程师提供专属产品支持 - 通过 Microsoft Visual Studio 轻松安装 - 免费试用版,供开发使用。 来自 `liteLicense` 的许可证 使用 IronXL 软件库,在 C# 和 VB.NET 中读取和创建 Excel 文件变得非常简单。 ### 使用 IronXL 读取 .XLS 和 .XLSX Excel 文件 以下是使用 IronXL 读取 Excel 文件的基本工作流程: 1. 通过[NuGet 包](https://www.nuget.org/packages/IronXL.Excel/)安装 IronXL Excel 库,或下载[.NET Excel DLL](/csharp/excel/packages/IronXL.zip)文件。 2. 使用`WorkBook.Load()`方法读取任何 XLS、XLSX 或 CSV 文档 3. 使用直观的语法访问单元格值: `sheet["A11"].DecimalValue` ```csharp :path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-1.cs ``` 这段代码演示了 IronXL 的几个关键功能:加载工作簿、按地址访问单元格、遍历范围以及执行计算。 `WorkBook.Load()`方法可以智能地检测文件格式,而范围语法`["A2:A10"]`则提供了类似 Excel 的单元格选择功能。 LINQ 集成支持对单元格集合进行强大的数据查询和聚合。 本教程中的代码示例使用三个示例 Excel 电子表格,分别展示了不同的数据场景: [Visual Studio 解决方案资源管理器中显示了三个 Excel 电子表格文件](/img/tutorials/how-to-read-excel-file-csharp/vs-spreadsheets.png)。 *本教程中用于演示各种 IronXL 操作的示例 Excel 文件(GDP.xlsx、People.xlsx 和 PopulationByState.xlsx)。* --- ## 如何安装 IronXL C# 库? 今天在您的项目中使用 IronXL,免费试用。 第一步: 免费开始 --- 安装`IronXL.Excel`库可为您的 .NET 框架项目添加全面的 Excel 功能。 选择 NuGet 安装或手动 DLL 集成。 ### 安装 IronXL NuGet 包 1. 在 Visual Studio 中,右键单击您的项目,然后选择"管理 NuGet 程序包..." 2. 在"浏览"选项卡中搜索"IronXL.Excel" 3. 单击"安装"按钮,将 IronXL 添加到您的项目中。 [NuGet 包管理器界面显示 IronXL.Excel 包的安装](/img/tutorials/how-to-read-excel-file-csharp/ef-nuget.png) *通过 Visual Studio 的 NuGet 包管理器安装 IronXL 可实现自动依赖项管理。* 或者,使用软件包管理器控制台安装 IronXL: 1. 打开程序包管理器控制台(工具 → NuGet 程序包管理器 → 程序包管理器控制台) 2. 运行安装命令: ```shell :ProductInstall ``` 您也可以[在 NuGet 网站上查看软件包详细信息](https://www.nuget.org/packages/IronXL.Excel/)。 ### 手动安装 如需手动安装,请下载 IronXL [.NET Excel DLL](/csharp/excel/packages/IronXL.zip)并将其直接引用到您的 Visual Studio 项目中。 ## 如何加载和读取Excel工作簿? [`WorkBook`](/csharp/excel/object-reference/api/IronXL.WorkBook.html)类代表整个 Excel 文件。使用`WorkBook.Load()`方法加载 Excel 文件,该方法接受 XLS、XLSX、CSV 和 TSV 格式的文件路径。 ```csharp :path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-2.cs ``` 每个`WorkBook`包含多个[`WorkSheet`](/csharp/excel/object-reference/api/IronXL.WorkSheet.html)对象,分别代表不同的 Excel 工作表。 使用[`GetWorkSheet()`](/csharp/excel/object-reference/api/IronXL.WorkBook.html#IronXL_WorkBook_GetWorkSheet_System_String_)按名称访问工作表: ```csharp :path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-3.cs ``` 如何在 C# 中创建新的 Excel 文档? 通过构建具有所需文件格式的`WorkBook`对象来创建新的 Excel 文档。 IronXL 同时支持现代 XLSX 格式和传统 XLS 格式。 ```csharp :path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-4.cs ``` 注意:仅当需要与 Excel 2003 及更早版本兼容时才使用`ExcelFileFormat.XLS` 。 ## 如何向Excel文档中添加工作表? IronXL `WorkBook`包含一系列工作表。 了解这种结构有助于创建多工作表 Excel 文件。 [图示:包含多个工作表的 Workbook](/img/tutorials/how-to-read-excel-file-csharp/work-book.png) *IronXL 中包含多个 WorkSheet 对象的 WorkBook 结构的可视化表示。* 使用`CreateWorkSheet()`创建新工作表: ```csharp :path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-5.cs ``` ## 如何读取和编辑单元格值? ### 读取和编辑单个单元格 通过工作表的索引器属性访问单个单元格。 IronXL 的[`Cell`](/csharp/excel/object-reference/api/IronXL.Cell.html)类提供强类型值属性。 ```csharp :path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-6.cs ``` `Cell`类为不同的数据类型提供了多个属性,并在可能的情况下自动转换值。 有关更多单元格操作,请参阅[单元格格式设置教程](/csharp/excel/how-to/set-cell-data-format/)。 ```csharp :path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-7.cs ``` ## 如何使用单元格区域? [`Range`](/csharp/excel/object-reference/api/IronXL.Range.html)类表示单元格集合,可以对 Excel 数据进行批量操作。 ```csharp :path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-8.cs ``` 当单元格数量已知时,使用循环高效处理范围: ```cs // Data validation example public class ValidationResult { public int Row { get; set; } public string PhoneError { get; set; } public string EmailError { get; set; } public string DateError { get; set; } public bool IsValid => string.IsNullOrEmpty(PhoneError) && string.IsNullOrEmpty(EmailError) && string.IsNullOrEmpty(DateError); } // Validate data in rows 2-101 var results = new List(); for (int row = 2; row <= 101; row++) { var result = new ValidationResult { Row = row }; // Get row data efficiently var phoneCell = workSheet[$"B{row}"]; var emailCell = workSheet[$"D{row}"]; var dateCell = workSheet[$"E{row}"]; // Validate phone number if (!IsValidPhoneNumber(phoneCell.StringValue)) result.PhoneError = "Invalid phone format"; // Validate email if (!IsValidEmail(emailCell.StringValue)) result.EmailError = "Invalid email format"; // Validate date if (!dateCell.IsDateTime) result.DateError = "Invalid date format"; results.Add(result); } // Helper methods bool IsValidPhoneNumber(string phone) => System.Text.RegularExpressions.Regex.IsMatch(phone, @"^\d{3}-\d{3}-\d{4}$"); bool IsValidEmail(string email) => email.Contains("@") && email.Contains("."); ``` ## 如何在Excel表格中添加公式? 使用[`Formula`](/csharp/excel/object-reference/api/IronXL.Cell.html#IronXL_Cell_Formula)属性应用Excel公式。 IronXL 支持标准 Excel 公式语法。 ```csharp :path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-9.cs ``` 要编辑现有公式,请参阅[Excel 公式教程](/csharp/excel/how-to/edit-formulas/)。 ## 如何验证电子表格数据? IronXL 为电子表格提供全面的数据验证功能。 本示例使用外部库和内置的 C# 功能来验证电话号码、电子邮件和日期。 ```cs using System.Text.RegularExpressions; using IronXL; // Validation implementation for (int i = 2; i <= 101; i++) { var result = new PersonValidationResult { Row = i }; results.Add(result); // Get cells for current person var cells = workSheet[$"A{i}:E{i}"].ToList(); // Validate phone (column B) string phone = cells[1].StringValue; if (!Regex.IsMatch(phone, @"^\+?1?\d{10,14}$")) { result.PhoneNumberErrorMessage = "Invalid phone format"; } // Validate email (column D) string email = cells[3].StringValue; if (!Regex.IsMatch(email, @"^[^@\s]+@[^@\s]+\.[^@\s]+$")) { result.EmailErrorMessage = "Invalid email address"; } // Validate date (column E) if (!cells[4].IsDateTime) { result.DateErrorMessage = "Invalid date format"; } } ``` 将验证结果保存到新工作表中: ```cs // Create results worksheet var resultsSheet = workBook.CreateWorkSheet("ValidationResults"); // Add headers resultsSheet["A1"].Value = "Row"; resultsSheet["B1"].Value = "Valid"; resultsSheet["C1"].Value = "Phone Error"; resultsSheet["D1"].Value = "Email Error"; resultsSheet["E1"].Value = "Date Error"; // Style headers resultsSheet["A1:E1"].Style.Font.Bold = true; resultsSheet["A1:E1"].Style.SetBackgroundColor("#4472C4"); resultsSheet["A1:E1"].Style.Font.Color = "#FFFFFF"; // Output validation results for (int i = 0; i < results.Count; i++) { var result = results[i]; int outputRow = i + 2; resultsSheet[$"A{outputRow}"].Value = result.Row; resultsSheet[$"B{outputRow}"].Value = result.IsValid ? "Yes" : "No"; resultsSheet[$"C{outputRow}"].Value = result.PhoneNumberErrorMessage ?? ""; resultsSheet[$"D{outputRow}"].Value = result.EmailErrorMessage ?? ""; resultsSheet[$"E{outputRow}"].Value = result.DateErrorMessage ?? ""; // Highlight invalid rows if (!result.IsValid) { resultsSheet[$"A{outputRow}:E{outputRow}"].Style.SetBackgroundColor("#FFE6E6"); } } // Auto-fit columns for (int col = 0; col < 5; col++) { resultsSheet.AutoSizeColumn(col); } // Save validated workbook workBook.SaveAs(@"Spreadsheets\PeopleValidated.xlsx"); ``` ## 如何将Excel数据导出到数据库? 使用 IronXL 和 Entity Framework 将电子表格数据直接导出到数据库。 本示例演示如何将国家/地区 GDP 数据导出到 SQLite。 ```cs using System; using System.ComponentModel.DataAnnotations; using Microsoft.EntityFrameworkCore; using IronXL; // Define entity model public class Country { [Key] public Guid Id { get; set; } = Guid.NewGuid(); [Required] [MaxLength(100)] public string Name { get; set; } [Range(0, double.MaxValue)] public decimal GDP { get; set; } public DateTime ImportedDate { get; set; } = DateTime.UtcNow; } ``` 配置用于数据库操作的 Entity Framework 上下文: ```cs public class CountryContext : DbContext { public DbSet Countries { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { // Configure SQLite connection optionsBuilder.UseSqlite("Data Source=CountryGDP.db"); // Enable sensitive data logging in development #if DEBUG optionsBuilder.EnableSensitiveDataLogging(); #endif } protected override void OnModelCreating(ModelBuilder modelBuilder) { // Configure decimal precision modelBuilder.Entity() .Property(c => c.GDP) .HasPrecision(18, 2); } } ``` 请注意注意:要使用不同的数据库,请安装相应的 NuGet 包(例如,SQL Server 需要`Microsoft.EntityFrameworkCore.SqlServer` ),并相应地修改连接配置。 将Excel数据导入数据库: ```cs using System.Threading.Tasks; using IronXL; using Microsoft.EntityFrameworkCore; public async Task ImportGDPDataAsync() { try { // Load Excel file var workBook = WorkBook.Load(@"Spreadsheets\GDP.xlsx"); var workSheet = workBook.GetWorkSheet("GDPByCountry"); using (var context = new CountryContext()) { // Ensure database exists await context.Database.EnsureCreatedAsync(); // Clear existing data (optional) await context.Database.ExecuteSqlRawAsync("DELETE FROM Countries"); // Import data with progress tracking int totalRows = 213; for (int row = 2; row <= totalRows; row++) { // Read country data var countryName = workSheet[$"A{row}"].StringValue; var gdpValue = workSheet[$"B{row}"].DecimalValue; // Skip empty rows if (string.IsNullOrWhiteSpace(countryName)) continue; // Create and add entity var country = new Country { Name = countryName.Trim(), GDP = gdpValue * 1_000_000 // Convert to actual value if in millions }; await context.Countries.AddAsync(country); // Save in batches for performance if (row % 50 == 0) { await context.SaveChangesAsync(); Console.WriteLine($"Imported {row - 1} of {totalRows} countries"); } } // Save remaining records await context.SaveChangesAsync(); Console.WriteLine($"Successfully imported {await context.Countries.CountAsync()} countries"); } } catch (Exception ex) { Console.WriteLine($"Import failed: {ex.Message}"); throw; } } ``` ## 如何将API数据导入Excel表格? 将 IronXL 与 HTTP 客户端结合使用,即可使用实时 API 数据填充电子表格。 本示例使用[RestClient.Net](https://github.com/MelbourneDeveloper/RestClient.Net)获取国家/地区数据。 ```cs using System; using System.Collections.Generic; using System.Net.Http; using System.Threading.Tasks; using Newtonsoft.Json; using IronXL; // Define data model matching API response public class RestCountry { public string Name { get; set; } public long Population { get; set; } public string Region { get; set; } public string NumericCode { get; set; } public List Languages { get; set; } } public class Language { public string Name { get; set; } public string NativeName { get; set; } } // Fetch and process API data public async Task ImportCountryDataAsync() { using var httpClient = new HttpClient(); try { // Call REST API var response = await httpClient.GetStringAsync("https://restcountries.com/v3.1/all"); var countries = JsonConvert.DeserializeObject>(response); // Create new workbook var workBook = WorkBook.Create(ExcelFileFormat.XLSX); var workSheet = workBook.CreateWorkSheet("Countries"); // Add headers with styling string[] headers = { "Country", "Population", "Region", "Code", "Language 1", "Language 2", "Language 3" }; for (int col = 0; col < headers.Length; col++) { var headerCell = workSheet[0, col]; headerCell.Value = headers[col]; headerCell.Style.Font.Bold = true; headerCell.Style.SetBackgroundColor("#366092"); headerCell.Style.Font.Color = "#FFFFFF"; } // Import country data await ProcessCountryData(countries, workSheet); // Save workbook workBook.SaveAs("CountriesFromAPI.xlsx"); } catch (Exception ex) { Console.WriteLine($"API import failed: {ex.Message}"); } } ``` API 返回的 JSON 数据格式如下: [JSON 响应结构显示了包含嵌套语言数组的国家/地区数据](/img/tutorials/how-to-read-excel-file-csharp/country-data.png) *来自 REST Countries API 的示例 JSON 响应,显示了分层国家/地区信息。* 处理 API 数据并将其写入 Excel: ```cs private async Task ProcessCountryData(List countries, WorkSheet workSheet) { for (int i = 0; i < countries.Count; i++) { var country = countries[i]; int row = i + 1; // Start from row 1 (after headers) // Write basic country data workSheet[$"A{row}"].Value = country.Name; workSheet[$"B{row}"].Value = country.Population; workSheet[$"C{row}"].Value = country.Region; workSheet[$"D{row}"].Value = country.NumericCode; // Format population with thousands separator workSheet[$"B{row}"].FormatString = "#,##0"; // Add up to 3 languages for (int langIndex = 0; langIndex < Math.Min(3, country.Languages?.Count ?? 0); langIndex++) { var language = country.Languages[langIndex]; string columnLetter = ((char)('E' + langIndex)).ToString(); workSheet[$"{columnLetter}{row}"].Value = language.Name; } // Add conditional formatting for regions if (country.Region == "Europe") { workSheet[$"C{row}"].Style.SetBackgroundColor("#E6F3FF"); } else if (country.Region == "Asia") { workSheet[$"C{row}"].Style.SetBackgroundColor("#FFF2E6"); } // Show progress every 50 countries if (i % 50 == 0) { Console.WriteLine($"Processed {i} of {countries.Count} countries"); } } // Auto-size all columns for (int col = 0; col < 7; col++) { workSheet.AutoSizeColumn(col); } } ``` --- ## 对象参考和资源 查阅全面的[IronXL API 参考文档](/csharp/excel/object-reference/api/),了解详细的类文档和高级功能。 更多Excel操作教程: -[通过编程方式创建 Excel 文件](/csharp/excel/tutorials/create-excel-file-net/) [Excel格式和样式指南](/csharp/excel/how-to/set-cell-data-format/) -[使用Excel公式](/csharp/excel/how-to/edit-formulas/) - [Excel图表创建教程](/csharp/excel/how-to/csharp-excel-chart-create-edit-tutorial/) ## 摘要 IronXL.Excel 是一个功能全面的 .NET 库,用于读取和操作各种格式的 Excel 文件。 它无需安装[Microsoft Excel](https://products.office.com/en-us/excel)或 Interop 即可独立运行。 对于基于云的电子表格操作,您还可以探索适用于 .NET 的[Google Sheets API 客户端库](https://developers.google.com/api-client-library/dotnet/apis/sheets/v4),它补充了 IronXL 的本地文件功能。 准备好在 C# 项目中实现 Excel 自动化了吗? [下载 IronXL](download-modal)或了解适用于生产环境的[许可选项](/csharp/excel/licensing/)。 常见问题解答 如何在不使用 Microsoft Office 的情况下用 C# 读取 Excel 文件? 29. 您可以使用 IronXL 在 C# 中读取 Excel 文件,无需 Microsoft Office。IronXL 提供像 WorkBook.Load() 这样的操作方法来打开 Excel 文件,并允许您使用直观的语法访问和操作数据。 用 C# 可以读取哪些格式的 Excel 文件? 30. 使用 IronXL,您可以在 C# 中读取 XLS 和 XLSX 文件格式。该库会自动检测文件格式,并使用 WorkBook.Load() 方法相应地处理它。 如何在 C# 中验证 Excel 数据? IronXL 允许您通过迭代单元格并应用逻辑(例如用于电子邮件的正则表达式或自定义验证函数)以编程方式验证 Excel 数据。您可以使用 CreateWorkSheet() 生成报告。 如何使用 C# 将数据从 Excel 导出到 SQL 数据库? 要将数据从 Excel 导出到 SQL 数据库,请使用 IronXL 通过 WorkBook.Load() 和 GetWorkSheet() 方法读取 Excel 数据,然后迭代单元格将数据传输到您的数据库,使用 Entity Framework。 我可以将 Excel 功能与 ASP.NET Core 应用程序集成吗? 是的,IronXL 支持与 ASP.NET Core 应用程序集成。您可以在控制器中使用 WorkBook 和 WorkSheet 类来处理 Excel 文件的上传、生成报告等。 是否可以使用 C# 向 Excel 电子表格添加公式? IronXL 使您能够以编程方式向 Excel 电子表格添加公式。您可以使用 Formula 属性设置公式,例如 cell.Formula = "=SUM(A1:A10)" 并使用 workBook.EvaluateAll() 计算结果。 如何使用 REST API 填充 Excel 文件的数据? 要使用 REST API 的数据填充 Excel 文件,请使用 IronXL 结合 HTTP 客户端获取 API 数据,然后使用 sheet["A1"].Value 将其写入 Excel。IronXL 管理 Excel 的格式和结构。 生产环境中使用 Excel 库有哪些许可选项? IronXL 提供免费试用以进行开发,而生产许可证从 $749 开始。这些许可证包括专门的技术支持,并允许在各种环境中部署,而无需额外的 Office 许可证。 Jacob Mellor 立即与工程团队聊天 首席技术官 Jacob Mellor 是 Iron Software 的首席技术官,是 C# PDF 技术的先锋工程师。作为 Iron Software 核心代码库的原始开发者,自公司成立以来,他就塑造了公司的产品架构,并与首席执行官 Cameron Rimington 一起将其转变成一家公司,拥有50多人,服务于 NASA、特斯拉和全球政府机构。Jacob 拥有曼彻斯特大学 (1998-2001) 的一级荣誉土木工程学士学位。1999 年在伦敦创办了自己的第一家软件公司,并于 2005 年创建了他的第一个 .NET 组件后,他专注于解决微软生态系统中的复杂问题。他的旗舰 IronPDF 和 Iron Suite .NET 库在全球已获得超过 3000 万次的 NuGet 安装,其基础代码继续为全球使用的开发者工具提供支持。拥有 25 年商业经验和 41 年编程经验的 Jacob 仍专注于推动企业级 C#、Java 和 Python PDF 技术的创新,同时指导下一代技术领导者。 准备开始了吗? Nuget 下载 1,765,830 | 版本: 2025.12 刚刚发布 免费 NuGet 下载 总下载量:1,765,830 查看许可证