如何在 C# 中讀取 Excel 文件

如何在不使用互通的情況下用 C# 讀取 Excel 檔案:完整開發者指南

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 Icon立即開始使用 NuGet 建立 PDF 檔案:

  1. 使用 NuGet 套件管理器安裝 IronXL

    PM > Install-Package IronXL.Excel

  2. 複製並運行這段程式碼。

    var value = IronXL.WorkBook.Load("file.xlsx").GetWorkSheet(0)["A1"].StringValue;
  3. 部署到您的生產環境進行測試

    立即開始在您的專案中使用 IronXL,免費試用!
    arrow pointer

如何設定 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` 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# 庫? !{--01001100010010010100001001010010010000010101001001011001010111110101001101010100010001010101010 10100010111110101010001010010010010010100000101001100010111110100001001001100010011111010000100100110001001111010101 --- 安裝`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/)。

常見問題解答

如何在 C# 中讀取 Excel 文件而不使用 Microsoft Office?

您可以使用 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 讀取 Excel 數據配合 WorkBook.Load()GetWorkSheet() 方法,然後遍歷單元格以通過 Entity Framework 將數據轉移到數據庫。

是否可以將 Excel 功能集成到 ASP.NET Core 應用程序中?

是的,IronXL 支持與 ASP.NET Core 應用程序集成。您可以在控制器中使用 WorkBookWorkSheet 類來處理 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, Team Iron 首席技术官
首席技术官

Jacob Mellor 是 Iron Software 的首席技術官,作為 C# PDF 技術的先鋒工程師。作為 Iron Software 核心代碼的原作者,他自開始以來塑造了公司產品架構,與 CEO Cameron Rimington 一起將其轉變為一家擁有超過 50 名員工的公司,為 NASA、特斯拉 和 全世界政府機構服務。

Jacob 持有曼徹斯特大學土木工程一級榮譽学士工程學位(BEng) (1998-2001)。他於 1999 年在倫敦開設了他的第一家軟件公司,並於 2005 年製作了他的首個 .NET 組件,專注於解決 Microsoft 生態系統內的複雜問題。

他的旗艦產品 IronPDF & Iron Suite .NET 庫在全球 NuGet 被安裝超過 3000 萬次,其基礎代碼繼續為世界各地的開發工具提供動力。擁有 25 年的商業經驗和 41 年的編碼專業知識,Jacob 仍專注於推動企業級 C#、Java 及 Python PDF 技術的創新,同時指導新一代技術領袖。

準備好開始了嗎?
Nuget 下載 1,765,830 | 版本: 2025.12 剛發表