IronXL 教程 如何在 C# 中读取 Excel 文件 How to Read Excel Files in C# Without Interop: Complete Developer Guide Jacob Mellor 已更新:2026年1月31日 下载 IronXL NuGet 下载 DLL 下载 免费试用 LLM副本 LLM副本 将页面复制为 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 包管理器安装 https://www.nuget.org/packages/IronXl.Excel PM > Install-Package IronXl.Excel 复制并运行这段代码。 var value = IronXl.WorkBook.Load("file.xlsx").GetWorkSheet(0)["A1"].StringValue; 部署到您的生产环境中进行测试 通过免费试用立即在您的项目中开始使用IronXL Free 30 Day Trial 如何设置 IronXL 以用 C# 读取 Excel 文件? 在 C# 项目中设置 IronXL 以读取 Excel 文件只需几分钟。 该库同时支持 .XLS 和 .XLSX 格式,使其能够胜任任何与 Excel 相关的任务。 请按照以下步骤开始: 1.下载用于读取 Excel 文件的 C# 库 使用 WorkBook.Load() 加载和读取 Excel 工作簿 使用 GetWorkSheet() 方法访问工作表 使用类似 sheet["A1"].Value 的直观语法读取单元格值 通过编程方式验证和处理电子表格数据 使用 Entity Framework 将数据导出到数据库 IronXL 擅长使用 C# 读取和编辑 Microsoft Excel 文档。 该库独立运行——它既不需要 Microsoft Excel 也不需要Interop即可运行。 事实上, IronXL 提供的 API 比 Microsoft.Office.Interop.Excel 更快、更直观。 IronXL包含: 我们的 .NET 工程师提供专属产品支持 通过 Microsoft Visual Studio 轻松安装 免费试用版,供开发使用。 许可证来自 liteLicense 使用 IronXL 软件库,在 C# 和 VB.NET 中读取和创建 Excel 文件变得非常简单。 使用 IronXL 读取 .XLS 和 .XLSX Excel 文件 以下是使用 IronXL 读取 Excel 文件的基本工作流程: 通过NuGet 包安装 IronXL Excel 库,或下载.NET Excel DLL文件。 使用 WorkBook.Load() 方法读取任何 XLS、XLSX 或 CSV 文档 使用直观的语法访问单元格值:sheet["A11"].DecimalValue :path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-1.cs using IronXL; using System; using System.Linq; // Load Excel workbook from file path WorkBook workBook = WorkBook.Load("test.xlsx"); // Access the first worksheet using LINQ WorkSheet workSheet = workBook.WorkSheets.First(); // Read integer value from cell A2 int cellValue = workSheet["A2"].IntValue; Console.WriteLine($"Cell A2 value: {cellValue}"); // Iterate through a range of cells foreach (var cell in workSheet["A2:A10"]) { Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text); } // Advanced Operations with LINQ // Calculate sum using built_in Sum() method decimal sum = workSheet["A2:A10"].Sum(); // Find maximum value using LINQ decimal max = workSheet["A2:A10"].Max(c => c.DecimalValue); // Output calculated results Console.WriteLine($"Sum of A2:A10: {sum}"); Console.WriteLine($"Maximum value: {max}"); $vbLabelText $csharpLabel 这段代码演示了 IronXL 的几个关键功能:加载工作簿、按地址访问单元格、遍历范围以及执行计算。 WorkBook.Load() 方法可以智能地检测文件格式,而范围语法 ["A2:A10"] 则提供了类似 Excel 的单元格选择。 LINQ 集成支持对单元格集合进行强大的数据查询和聚合。 本教程中的代码示例使用三个示例 Excel 电子表格,分别展示了不同的数据场景: 本教程中用于演示各种 IronXL 操作的示例 Excel 文件(GDP.xlsx、People.xlsx 和 PopulationByState.xlsx)。 如何安装 IronXL C# 库? 安装 IronXl.Excel 库,即可为您的.NET Framework项目添加全面的 Excel 功能。 选择 NuGet 安装或手动 DLL 集成。 安装 IronXL NuGet 包 在 Visual Studio 中,右键单击您的项目,然后选择"管理 NuGet 程序包..." 在"浏览"选项卡中搜索"IronXl.Excel" 单击"安装"按钮,将 IronXL 添加到您的项目中。 通过 Visual Studio 的 NuGet 包管理器安装 IronXL 可实现自动依赖项管理。 或者,使用软件包管理器控制台安装 IronXL: 打开程序包管理器控制台(工具 → NuGet 程序包管理器 → 程序包管理器控制台) 运行安装命令: Install-Package IronXl.Excel 您也可以在 NuGet 网站上查看软件包详细信息。 手动安装 如需手动安装,请下载 IronXL .NET Excel DLL并将其直接引用到您的 Visual Studio 项目中。 如何加载和读取Excel工作簿? WorkBook类表示整个 Excel 文件。使用 WorkBook.Load() 方法加载 Excel 文件,该方法接受 XLS、XLSX、CSV 和 TSV 格式的文件路径。 :path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-2.cs using IronXL; using System; using System.Linq; // Load Excel file from specified path WorkBook workBook = WorkBook.Load(@"Spreadsheets\GDP.xlsx"); Console.WriteLine("Workbook loaded successfully."); // Access specific worksheet by name WorkSheet sheet = workBook.GetWorkSheet("Sheet1"); // Read and display cell value string cellValue = sheet["A1"].StringValue; Console.WriteLine($"Cell A1 contains: {cellValue}"); // Perform additional operations // Count non_empty cells in column A int rowCount = sheet["A:A"].Count(cell => !cell.IsEmpty); Console.WriteLine($"Column A has {rowCount} non_empty cells"); $vbLabelText $csharpLabel 每个 WorkBook 包含多个WorkSheet对象,分别代表不同的 Excel 工作表。 使用GetWorkSheet()按名称访问工作表: :path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-3.cs using IronXL; using System; // Get worksheet by name WorkSheet workSheet = workBook.GetWorkSheet("GDPByCountry"); Console.WriteLine("Worksheet 'GDPByCountry' not found"); // List available worksheets foreach (var sheet in workBook.WorkSheets) { Console.WriteLine($"Available: {sheet.Name}"); } $vbLabelText $csharpLabel 如何在 C# 中创建新的 Excel 文档? 使用所需的文件格式构造 WorkBook 对象,创建新的 Excel 文档。 IronXL 同时支持现代 XLSX 格式和传统 XLS 格式。 :path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-4.cs using IronXL; // Create new XLSX workbook (recommended format) WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX); // Set workbook metadata workBook.Metadata.Author = "Your Application"; workBook.Metadata.Comments = "Generated by IronXL"; // Create new XLS workbook for legacy support WorkBook legacyWorkBook = WorkBook.Create(ExcelFileFormat.XLS); // Save the workbook workBook.SaveAs("NewDocument.xlsx"); $vbLabelText $csharpLabel 注意:仅当需要与 Excel 2003 及更早版本兼容时才使用 ExcelFileFormat.XLS。 如何向Excel文档中添加工作表? IronXL WorkBook 包含一系列工作表。 了解这种结构有助于创建多工作表 Excel 文件。 IronXL 中包含多个 WorkSheet 对象的 WorkBook 结构的可视化表示。 使用 CreateWorkSheet() 创建新工作表: :path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-5.cs using IronXL; // Create multiple worksheets with descriptive names WorkSheet summarySheet = workBook.CreateWorkSheet("Summary"); WorkSheet dataSheet = workBook.CreateWorkSheet("RawData"); WorkSheet chartSheet = workBook.CreateWorkSheet("Charts"); // Set the active worksheet workBook.SetActiveTab(0); // Makes "Summary" the active sheet // Access default worksheet (first sheet) WorkSheet defaultSheet = workBook.DefaultWorkSheet; $vbLabelText $csharpLabel 如何读取和编辑单元格值? 读取和编辑单个单元格 通过工作表的索引器属性访问单个单元格。 IronXL 的Cell类提供强类型值属性。 :path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-6.cs using IronXL; using System; using System.Linq; // Load workbook and get worksheet WorkBook workBook = WorkBook.Load("test.xlsx"); WorkSheet workSheet = workBook.DefaultWorkSheet; // Access cell B1 IronXL.Cell cell = workSheet["B1"].First(); // Read cell value with type safety string textValue = cell.StringValue; int intValue = cell.IntValue; decimal decimalValue = cell.DecimalValue; DateTime? dateValue = cell.DateTimeValue; // Check cell data type if (cell.IsNumeric) { Console.WriteLine($"Numeric value: {cell.DecimalValue}"); } else if (cell.IsText) { Console.WriteLine($"Text value: {cell.StringValue}"); } $vbLabelText $csharpLabel Cell 类为不同的数据类型提供多个属性,并在可能的情况下自动转换值。 有关更多单元格操作,请参阅单元格格式设置教程。 :path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-7.cs // Write different data types to cells workSheet["A1"].Value = "Product Name"; // String workSheet["B1"].Value = 99.95m; // Decimal workSheet["C1"].Value = DateTime.Today; // Date workSheet["D1"].Formula = "=B1*1.2"; // Formula // Format cells workSheet["B1"].FormatString = "$#,##0.00"; // Currency format workSheet["C1"].FormatString = "yyyy-MM-dd";// Date format // Save changes workBook.Save(); $vbLabelText $csharpLabel 如何使用单元格区域? Range类表示单元格集合,可以对 Excel 数据进行批量操作。 :path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-8.cs using IronXL; using Range = IronXL.Range; // Select range using Excel notation Range range = workSheet["D2:D101"]; // Alternative: Use Range class for dynamic selection Range dynamicRange = workSheet.GetRange("D2:D101"); // Row 2_101, Column D // Perform bulk operations range.Value = 0; // Set all cells to 0 $vbLabelText $csharpLabel 当单元格数量已知时,使用循环高效处理范围: // 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<ValidationResult>(); 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("."); // 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<ValidationResult>(); 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("."); $vbLabelText $csharpLabel 如何在Excel表格中添加公式? 使用Formula属性应用 Excel 公式。 IronXL 支持标准 Excel 公式语法。 :path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-9.cs using IronXL; // Add formulas to calculate percentages int lastRow = 50; for (int row = 2; row < lastRow; row++) { // Calculate percentage: current value / total workSheet[$"C{row}"].Formula = $"=B{row}/B{lastRow}"; // Format as percentage workSheet[$"C{row}"].FormatString = "0.00%"; } // Add summary formulas workSheet["B52"].Formula = "=SUM(B2:B50)"; // Sum workSheet["B53"].Formula = "=AVERAGE(B2:B50)"; // Average workSheet["B54"].Formula = "=MAX(B2:B50)"; // Maximum workSheet["B55"].Formula = "=MIN(B2:B50)"; // Minimum // Force formula evaluation workBook.EvaluateAll(); $vbLabelText $csharpLabel 要编辑现有公式,请参阅Excel 公式教程。 如何验证电子表格数据? IronXL 为电子表格提供全面的数据验证功能。 本示例使用外部库和内置的 C# 功能来验证电话号码、电子邮件和日期。 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"; } } 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"; } } $vbLabelText $csharpLabel 将验证结果保存到新工作表中: // 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"); // 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"); $vbLabelText $csharpLabel 如何将Excel数据导出到数据库? 使用 IronXL 和 Entity Framework 将电子表格数据直接导出到数据库。 本示例演示如何将国家/地区 GDP 数据导出到 SQLite。 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; } 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; } $vbLabelText $csharpLabel 配置用于数据库操作的 Entity Framework 上下文: public class CountryContext : DbContext { public DbSet<Country> 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<Country>() .Property(c => c.GDP) .HasPrecision(18, 2); } } public class CountryContext : DbContext { public DbSet<Country> 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<Country>() .Property(c => c.GDP) .HasPrecision(18, 2); } } $vbLabelText $csharpLabel 请注意注意:要使用不同的数据库,请安装相应的NuGet包(例如,SQL Server 的 Microsoft.EntityFrameworkCore.SqlServer),并相应地修改连接配置。 将Excel数据导入数据库: 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; } } 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; } } $vbLabelText $csharpLabel 如何将API数据导入Excel表格? 将 IronXL 与 HTTP 客户端结合使用,即可使用实时 API 数据填充电子表格。 本示例使用RestClient.Net获取国家/地区数据。 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<Language> 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<List<RestCountry>>(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}"); } } 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<Language> 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<List<RestCountry>>(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}"); } } $vbLabelText $csharpLabel API 返回的 JSON 数据格式如下: 来自 REST Countries API 的示例 JSON 响应,显示了分层国家/地区信息。 处理 API 数据并将其写入 Excel: private async Task ProcessCountryData(List<RestCountry> 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); } } private async Task ProcessCountryData(List<RestCountry> 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); } } $vbLabelText $csharpLabel 对象参考和资源 查阅全面的IronXL API 参考文档,了解详细的类文档和高级功能。 更多Excel操作教程: -通过编程方式创建 Excel 文件 Excel格式和样式指南 -使用Excel公式 Excel图表创建教程 摘要 IronXl.Excel 是一个功能全面的 .NET 库,用于读取和操作各种格式的 Excel 文件。 它无需安装Microsoft Excel或 Interop 即可独立运行。 对于基于云的电子表格操作,您还可以探索适用于 .NET 的Google Sheets API 客户端库,它补充了 IronXL 的本地文件功能。 准备好在 C# 项目中实现 Excel 自动化了吗? 下载 IronXL或了解适用于生产环境的许可选项。 常见问题解答 如何在不使用 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 拥有曼彻斯特大学土木工程一级荣誉工程学士学位(BEng)(1998-2001 年)。他的旗舰产品 IronPDF 和 Iron Suite for .NET 库在全球的 NuGet 安装量已超过 3000 万次,其基础代码继续为全球使用的开发人员工具提供动力。Jacob 拥有 25 年的商业经验和 41 年的编码专业知识,他一直专注于推动企业级 C#、Java 和 Python PDF 技术的创新,同时指导下一代技术领导者。 A PHP Error was encountered Severity: Notice Message: Undefined index: IronXl.Excel Filename: helpers/counter_helper.php Line Number: 85 Backtrace: File: /var/www/ironpdf.com/application/helpers/counter_helper.php Line: 85 Function: _error_handler File: /var/www/ironpdf.com/application/views/main/sections/ready_to_started_202509.php Line: 12 Function: getTotalDonwloadNumber File: /var/www/ironpdf.com/application/libraries/Render.php Line: 489 Function: view File: /var/www/ironpdf.com/application/controllers/Products/Tutorials.php Line: 29 Function: render_products_view File: /var/www/ironpdf.com/index.php Line: 292 Function: require_once A PHP Error was encountered Severity: Notice Message: Undefined index: IronXl.Excel Filename: helpers/counter_helper.php Line Number: 85 Backtrace: File: /var/www/ironpdf.com/application/helpers/counter_helper.php Line: 85 Function: _error_handler File: /var/www/ironpdf.com/application/views/main/sections/ready_to_started_202509.php Line: 19 Function: getTotalDonwloadNumber File: /var/www/ironpdf.com/application/libraries/Render.php Line: 489 Function: view File: /var/www/ironpdf.com/application/controllers/Products/Tutorials.php Line: 29 Function: render_products_view File: /var/www/ironpdf.com/index.php Line: 292 Function: require_once 准备开始了吗? Nuget 下载 1,890,100 | 版本: 2026.3 刚刚发布 免费试用 免费 NuGet 下载 总下载量:1,890,100 查看许可证 Docs 本页内容 开始入门概述在C#中与Excel交互无需Interop使用许可证密钥安装 IronXL 库在 macOS 上使用在 Linux 上使用部署到云端/容器部署到Azure部署到AWS在Docker中设置其他.NET语言支持在.NET MAUI中处理Excel在Blazor中读取Excel文件处理VB.NET Excel文件教程如何在C#中读取Excel文件在 C# 中创建 Excel 文件使用C#打开和写入Excel文件操作指南工作簿创建电子表格加载电子表格在 C# 中导出到 Excel读取XLSX文件C#在C#中读取CSV在ASP.NET Web Apps中读取Excel文件在.NET中写入CSV在C#中打开Excel工作表将数据表转换为CSV将XLSX转换为CSV、JSON、XML转换电子表格文件类型作为 DataSet 导入和导出编辑工作簿元数据使用密码加密工作簿管理工作表工作表编辑公式选择范围命名范围命名表创建和编辑图表冻结窗格添加行和列自动调整行和列使用密码加密工作表分组和取消分组添加、提取和删除图像在C#中创建Excel图表单元格范围在.NET中写入Excel值在C#中导入Excel数据排序单元格范围修剪单元格范围清除单元格复制单元格设置超链接合并和拆分单元格单元格字体和大小单元格边框和对齐背景图案和颜色条件格式数学函数添加注释设置单元格数据格式在 C# 中编辑 Excel 文件故障排除故障排除指南在 IronXL 中应用许可证密钥文件大小限制Excel 限制:字符串列表的数据验证常见问题IronXL - 安全 CVE异常消息在Web.config中设置许可证密钥产品更新变更日志里程碑里程碑:性能里程碑:增强视频教程API 参考 本页内容 如何设置 IronXL 以用 C# 读取 Excel 文件?如何安装 IronXL C# 库?如何加载和读取Excel工作簿?如何在 C# 中创建新的 Excel 文档?如何向Excel文档中添加工作表?如何读取和编辑单元格值?如何使用单元格区域?如何在Excel表格中添加公式?如何验证电子表格数据?如何将Excel数据导出到数据库?如何将API数据导入Excel表格?对象参考和资源摘要 A PHP Error was encountered Severity: Notice Message: Undefined index: IronXl.Excel Filename: helpers/counter_helper.php Line Number: 85 Backtrace: File: /var/www/ironpdf.com/application/helpers/counter_helper.php Line: 85 Function: _error_handler File: /var/www/ironpdf.com/application/views/main/sections/still_scrolling_202512.php Line: 17 Function: getTotalDonwloadNumber File: /var/www/ironpdf.com/application/views/products/sections/three_column_docs_page_structure.php Line: 71 Function: view File: /var/www/ironpdf.com/application/libraries/Render.php Line: 88 Function: view File: /var/www/ironpdf.com/application/views/products/tutorials/index.php Line: 2 Function: view File: /var/www/ironpdf.com/application/libraries/Render.php Line: 88 Function: view File: /var/www/ironpdf.com/application/libraries/Render.php Line: 552 Function: view File: /var/www/ironpdf.com/application/controllers/Products/Tutorials.php Line: 29 Function: render_products_view File: /var/www/ironpdf.com/index.php Line: 292 Function: require_once A PHP Error was encountered Severity: Notice Message: Undefined index: IronXl.Excel Filename: helpers/counter_helper.php Line Number: 85 Backtrace: File: /var/www/ironpdf.com/application/helpers/counter_helper.php Line: 85 Function: _error_handler File: /var/www/ironpdf.com/application/views/main/sections/still_scrolling_202512.php Line: 24 Function: getTotalDonwloadNumber File: /var/www/ironpdf.com/application/views/products/sections/three_column_docs_page_structure.php Line: 71 Function: view File: /var/www/ironpdf.com/application/libraries/Render.php Line: 88 Function: view File: /var/www/ironpdf.com/application/views/products/tutorials/index.php Line: 2 Function: view File: /var/www/ironpdf.com/application/libraries/Render.php Line: 88 Function: view File: /var/www/ironpdf.com/application/libraries/Render.php Line: 552 Function: view File: /var/www/ironpdf.com/application/controllers/Products/Tutorials.php Line: 29 Function: render_products_view File: /var/www/ironpdf.com/index.php Line: 292 Function: require_once 还在滚动吗? 想快速获得证据? PM > Install-Package IronXl.Excel 运行示例 观看您的数据变成电子表格。 免费 NuGet 下载 总下载量:1,890,100 查看许可证