如何在不使用互通的情況下用 C# 讀取 Excel 檔案:完整開發者指南
使用 IronXL 掌握 C# 中的 Excel 檔案操作-IronXL 是一個強大的 .NET 函式庫,無需安裝 Microsoft Office 即可讀取、驗證和匯出電子表格資料。 本教學課程全面示範了 Excel 的實用操作,包括資料驗證、資料庫轉換和 REST API 整合。
快速入門:使用 IronXL 一行人讀取儲存格
使用 IronXL,只需一行程式碼即可載入 Excel 工作簿並擷取儲存格的值。 它的設計宗旨是方便易用——無需互操作,無需複雜設定——只需快速存取您的資料。
立即開始使用 NuGet 建立 PDF 檔案:
使用 NuGet 套件管理器安裝 IronXL
複製並運行這段程式碼。
var value = IronXL.WorkBook.Load("file.xlsx").GetWorkSheet(0)["A1"].StringValue;部署到您的生產環境進行測試
如何在 C# 中設定 IronXL 以讀取 Excel 檔案?
在 C# 專案中設定 IronXL 以讀取 Excel 檔案只需幾分鐘。 該庫同時支援.XLS和.XLSX格式,使其能夠勝任任何與 Excel 相關的任務。
請依照以下步驟開始:
- 使用
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"].DecimalValueDecimalValue
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-1.csusing 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}");這段程式碼示範了 IronXL 的幾個關鍵功能:載入工作簿、按位址存取儲存格、遍歷範圍以及執行計算。 WorkBook.Load()方法可以智慧地偵測檔案格式,而範圍語法["A2:A10"]則提供了類似 Excel 的儲存格選擇功能。 LINQ 整合支援對單元格集合進行強大的資料查詢和聚合。
本教學中的程式碼範例使用三個範例 Excel 電子表格,分別展示了不同的資料場景:
Visual Studio 解決方案資源管理器中顯示了三個 Excel 電子表格檔案。 本教學中用於示範各種 IronXL 操作的範例 Excel 檔案(GDP.xlsx、People.xlsx 和 PopulationByState.xlsx)。
如何安裝 IronXL C# 庫?
安裝IronXL.Excel程式庫可為您的 .NET 框架專案新增全面的 Excel 功能。 選擇 NuGet 安裝或手動 DLL 整合。
安裝 IronXL NuGet 套件
- 在 Visual Studio 中,右鍵單擊您的項目,然後選擇"管理 NuGet 套件..."
- 在"瀏覽"標籤中搜尋"IronXL.Excel"
- 點選"安裝"按鈕,將 IronXL 新增到您的專案中。
NuGet 套件管理器介面顯示 IronXL.Excel 套件的安裝 透過 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.csusing 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");每個WorkBook包含多個WorkSheet對象,分別代表不同的 Excel 工作表。 使用GetWorkSheet()按名稱存取工作表:
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-3.csusing 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}");
}如何在C#中建立新的Excel文檔?
透過建立具有所需文件格式的WorkBook物件來建立新的 Excel 文件。 IronXL 同時支援現代 XLSX 格式和傳統 XLS 格式。
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-4.csusing 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");注意:僅在需要與 Excel 2003 及更早版本相容時才使用ExcelFileFormat.XLS 。
如何在Excel文件中新增工作表?
IronXL WorkBook包含一系列工作表。 了解這種結構有助於建立多工作表 Excel 檔案。
圖示:包含多個工作表的 Workbook IronXL 中包含多個 WorkSheet 物件的 WorkBook 結構的視覺化表示。
使用CreateWorkSheet()建立新工作表:
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-5.csusing 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;如何讀取和編輯單元格值?
讀取和編輯單一儲存格
透過工作表的索引器屬性存取單一儲存格。 IronXL 的Cell類別提供強類型值屬性。
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-6.csusing 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}");
}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();如何使用單元格區域?
Range類別表示儲存格集合,可以對 Excel 資料進行批次操作。
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-8.cs// 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當單元格數量已知時,使用循環高效處理範圍:
// 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(".");如何在Excel表格中新增公式?
使用Formula屬性來套用Excel公式。 IronXL 支援標準 Excel 公式語法。
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-9.csusing 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();若要編輯現有公式,請參閱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";
}
}將驗證結果儲存到新工作表中:
// 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");如何將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;
}配置用於資料庫操作的 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);
}
}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;
}
}如何將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}");
}
}API 傳回的 JSON 資料格式如下:
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);
}
}物件參考和資源
查閱全面的IronXL API 參考文檔,以了解詳細的類文檔和高級功能。
更多Excel操作教學:
概括
IronXL.Excel 是一個功能全面的 .NET 程式庫,用於讀取和操作各種格式的 Excel 檔案。 它無需安裝Microsoft Excel或 Interop 即可獨立運行。
對於基於雲端的電子表格操作,您還可以探索適用於 .NET 的Google Sheets API 用戶端程式庫,它補充了 IronXL 的本機檔案功能。
常見問題解答
如何在不使用 Microsoft Office 的情況下,用 C# 讀取 Excel 檔案?
您可以使用 IronXL 在 C# 中讀取 Excel 文件,而無需 Microsoft Office。 IronXL 提供諸如WorkBook.Load()之類的方法來開啟 Excel 文件,並允許您使用直覺的語法存取和操作資料。
C# 可以讀取哪些格式的 Excel 檔案?
IronXL 庫支援在 C# 中讀取 XLS 和 XLSX 檔案格式。本庫會自動偵測文件格式,並使用WorkBook.Load()方法進行對應的處理。
如何在C#中驗證Excel資料?
IronXL 可讓您使用 C# 以程式方式驗證 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 許可證。






