跳過到頁腳內容
使用 IRONXL

如何在C#中使用IronXL打開Excel檔案。

幾乎所有.NET開發人員遲早都會遇到在 C# 中開啟和處理 Excel 檔案的情況。無論您是自動化產生週報、處理資料匯入,還是建立能夠動態產生電子表格的工具,您選擇的程式庫都會對速度、可靠性和部署靈活性產生顯著影響。

本教學將介紹如何使用IronXL (一個輕量級的 Excel 庫,無需安裝 Microsoft Office 即可讀取、編輯和寫入工作簿)在 C# 中開啟 Excel 檔案。 你會發現,在 C# 應用程式中以程式設計方式載入資料、存取工作表和處理儲存格是多麼簡單。

為什麼選擇IronXL而不是 Microsoft.Office.Interop.Excel?

雖然 Microsoft.Office.Interop.Excel 一直是 Excel 自動化的傳統方法,但它存在一些重大局限性,因此IronXL是現代應用程式的更好選擇。 微軟本身也不建議在伺服器上使用 Office Interop ,理由是其不穩定、可擴展性問題以及不支援的部署方案。

IronXL與 Microsoft.Office.Interop.Excel 功能比較
特徵 IronXL Microsoft.Office.Interop.Excel
**需要安裝 Excel** 是的
**跨平台支援** Windows、Linux、macOS 僅限 Windows 系統
**伺服器部署** 完全支持 微軟不推薦
**記憶體管理** 自動的 需要手動清理 COM 模組。
**API複雜度** 簡單直觀 複雜 COM 介面
**文件格式支援** XLS、XLSX、CSV、TSV、JSON 僅限 Excel 格式
**螺紋安全** 支援 僅限單線程

IronXL消除了對 Microsoft Excel 的依賴,使其成為伺服器環境、 Docker 容器Azure 等雲端平台的理想選擇。 該程式庫提供了一個簡潔、現代的 API,無需處理 COM 物件或手動記憶體管理。 除了開啟檔案之外, IronXL還能處理從公式計算圖表產生再到儲存格樣式設定的所有操作。

如何在.NET專案中安裝IronXL ?

IronXL入門非常簡單——只需幾分鐘即可透過NuGet套件管理器將其添加到您的專案中。 在 Visual Studio 中開啟程式包管理器控制台並執行:

Install-Package IronXL
dotnet add package IronXL
Install-Package IronXL
dotnet add package IronXL
SHELL

兩條指令安裝的都是同一個軟體包。 第一個命令在 Visual Studio 套件管理器控制台中使用,第二個命令在.NET CLI 中使用。 安裝完成後,您可以在專案檔案的 <PackageReference Include="IronXl.Excel" /> 下驗證套件引用是否出現。

立即開始在您的項目中使用 IronXL 並免費試用。

第一步:
green arrow pointer

IronXL支援哪些.NET版本?

IronXL支援所有現代.NET版本,包括.NET 10、 .NET 8、 .NET 6、 .NET Framework 4.6.2 及更高版本以及.NET Standard 2.0。這種廣泛的支援意味著您可以在.NET 10 導向的新專案中使用 IronXL,也可以在運行於傳統.NET Framework上的舊版應用程式中使用IronXL 。

該程式庫以單一NuGet套件的形式提供,可自動為您的目標框架選擇正確的二進位。 無需額外依賴項,無需針對特定平台進行安裝,也無需 Excel 許可證。 請造訪IronXL相容性指南,查看支援的執行時間和平台的完整清單。

如何在 C# 中開啟並讀取現有的 Excel 檔案?

使用IronXL開啟現有的 Excel 檔案只需要幾行程式碼。 該程式庫透過統一的 API 支援讀取 XLS 和 XLSX 文件,以及 CSV 和 TSV 格式的文件。 以下範例示範了基本工作流程:

// Load an existing Excel file
WorkBook workbook = WorkBook.Load("sales-data.xlsx");

// Access the first worksheet by index
WorkSheet sheet = workbook.WorkSheets[0];

// Or access a worksheet by name
WorkSheet namedSheet = workbook.GetWorkSheet("January Sales");

// Read a specific cell value
string cellValue = sheet["A1"].StringValue;
Console.WriteLine($"Cell A1 contains: {cellValue}");

// Read a numeric value
decimal revenue = sheet["B2"].DecimalValue;
Console.WriteLine($"Revenue: {revenue:C}");

// Check cell data type before reading
var cell = sheet["C3"];
Console.WriteLine($"Type: {cell.Type}, Value: {cell.Value}");
// Load an existing Excel file
WorkBook workbook = WorkBook.Load("sales-data.xlsx");

// Access the first worksheet by index
WorkSheet sheet = workbook.WorkSheets[0];

// Or access a worksheet by name
WorkSheet namedSheet = workbook.GetWorkSheet("January Sales");

// Read a specific cell value
string cellValue = sheet["A1"].StringValue;
Console.WriteLine($"Cell A1 contains: {cellValue}");

// Read a numeric value
decimal revenue = sheet["B2"].DecimalValue;
Console.WriteLine($"Revenue: {revenue:C}");

// Check cell data type before reading
var cell = sheet["C3"];
Console.WriteLine($"Type: {cell.Type}, Value: {cell.Value}");
$vbLabelText   $csharpLabel

WorkBook.Load() 方法會自動偵測檔案格式(XLS、XLSX、CSV 或 TSV),並處理解析,無需任何額外的配置。 您可以透過索引(使用 workbook.WorkSheets[0])或名稱(使用 GetWorkSheet())存取工作表。 透過方括號表示法(sheet["A1"])可以讀取各個單元格的值,從而使程式碼簡潔明了。有關支援的文件類型的完整列表,請參閱SpreadsheetML 的 Open XML SDK 文件IronXL NuGet套件頁面

對於類型化訪問, IronXL直接在單元格上公開了諸如 .BoolValue 和 @@--CODE-253@@ 之類的屬性。 這樣就避免了通用物件 API 中常見的類型猜測問題。如需更複雜的場景,請參閱Excel 區域使用指南儲存格資料格式文件

輸出

如何使用IronXL在 C# 中開啟 Excel 檔案應用程式:圖 1 - 開啟並讀取範例 Excel 檔案

如何從串流或位元組數組載入 Excel 檔案?

在 Web 應用程式和雲端函數中,您通常會以流或位元組數組的形式接收文件數據,而不是以文件路徑的形式接收。 IronXL可以處理這兩種情況:

// Load from a byte array (e.g., from a database or HTTP response)
byte[] fileBytes = File.ReadAllBytes("sales-data.xlsx");
WorkBook workbookFromBytes = WorkBook.Load(fileBytes);

// Load from a MemoryStream
using var memStream = new MemoryStream(fileBytes);
WorkBook workbookFromStream = WorkBook.Load(memStream);

// Access data the same way regardless of source
WorkSheet sheet = workbookFromStream.DefaultWorkSheet;
Console.WriteLine(sheet["A1"].StringValue);
// Load from a byte array (e.g., from a database or HTTP response)
byte[] fileBytes = File.ReadAllBytes("sales-data.xlsx");
WorkBook workbookFromBytes = WorkBook.Load(fileBytes);

// Load from a MemoryStream
using var memStream = new MemoryStream(fileBytes);
WorkBook workbookFromStream = WorkBook.Load(memStream);

// Access data the same way regardless of source
WorkSheet sheet = workbookFromStream.DefaultWorkSheet;
Console.WriteLine(sheet["A1"].StringValue);
$vbLabelText   $csharpLabel

基於流的載入在ASP.NET Core控制器中特別有用,因為您會收到 IFormFile 上傳。 只需呼叫 formFile.OpenReadStream() 並將結果傳遞給 WorkBook.Load()。 完整的ASP.NET Core整合模式,請參閱ASP.NET Core Excel 教學

如何在 C# 中建立新的 Excel 工作簿?

使用 IronXL 的電子表格建立功能,建立新的 Excel 檔案同樣簡單。 以下範例產生格式化的季度報告:

// Create a new workbook in XLSX format
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);

// Add metadata
workbook.Metadata.Author = "Sales Department";
workbook.Metadata.Title = "Q1 Revenue Report";

// Create a named worksheet
WorkSheet sheet = workbook.CreateWorkSheet("Q1 Report");

// Add header row
sheet["A1"].Value = "Product";
sheet["B1"].Value = "Units Sold";
sheet["C1"].Value = "Revenue";

// Add data rows
sheet["A2"].Value = "Software Licenses";
sheet["B2"].Value = 120;
sheet["C2"].Value = 45000;

sheet["A3"].Value = "Support Contracts";
sheet["B3"].Value = 55;
sheet["C3"].Value = 27500;

// Add a SUM formula
sheet["C4"].Formula = "=SUM(C2:C3)";

// Apply number formatting
sheet["C2:C4"].FormatString = "$#,##0.00";

// Save the workbook to disk
workbook.SaveAs("quarterly-report.xlsx");
Console.WriteLine("Workbook saved successfully.");
// Create a new workbook in XLSX format
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);

// Add metadata
workbook.Metadata.Author = "Sales Department";
workbook.Metadata.Title = "Q1 Revenue Report";

// Create a named worksheet
WorkSheet sheet = workbook.CreateWorkSheet("Q1 Report");

// Add header row
sheet["A1"].Value = "Product";
sheet["B1"].Value = "Units Sold";
sheet["C1"].Value = "Revenue";

// Add data rows
sheet["A2"].Value = "Software Licenses";
sheet["B2"].Value = 120;
sheet["C2"].Value = 45000;

sheet["A3"].Value = "Support Contracts";
sheet["B3"].Value = 55;
sheet["C3"].Value = 27500;

// Add a SUM formula
sheet["C4"].Formula = "=SUM(C2:C3)";

// Apply number formatting
sheet["C2:C4"].FormatString = "$#,##0.00";

// Save the workbook to disk
workbook.SaveAs("quarterly-report.xlsx");
Console.WriteLine("Workbook saved successfully.");
$vbLabelText   $csharpLabel

WorkBook.Create() 方法以指定的格式初始化一個新的工作簿。 您可以使用 CreateWorkSheet() 新增多個工作表,使用各種資料類型(包括字串、數字、布林值和日期)填入儲存格,並透過 Formula 屬性直接套用 Excel 公式。 該程式庫會自動處理資料類型轉換和 Excel 特有的格式要求。

若要設定標題樣式和新增邊框,請使用儲存格樣式 API 。 有關基於範本的報告生成,請參閱從現有 Excel 範本匯出指南

輸出

如何使用IronXL在 C# 中開啟 Excel 檔案應用程式:圖 2 - 建立新的 Excel 工作簿

如何批次讀取和處理Excel工作表資料?

IronXL透過基於範圍的操作和 DataTable 轉換,有效地處理資料提取和批量處理:

// Load a workbook and select the default sheet
WorkBook workbook = WorkBook.Load("inventory.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;

// Read a rectangular range of cells
var range = sheet["A1:D10"];
foreach (var cell in range)
{
    Console.WriteLine($"{cell.AddressString}: {cell.Text}");
}

// Convert the worksheet to a DataTable for database integration
System.Data.DataTable dataTable = sheet.ToDataTable(useFirstRowAsColumnHeaders: true);
Console.WriteLine($"Rows: {dataTable.Rows.Count}, Columns: {dataTable.Columns.Count}");

// Use aggregate functions directly on a range
decimal total = sheet["C2:C10"].Sum();
decimal average = sheet["C2:C10"].Avg();
decimal maxValue = sheet["C2:C10"].Max();

Console.WriteLine($"Total: {total:C}");
Console.WriteLine($"Average: {average:C}");
Console.WriteLine($"Max: {maxValue:C}");

// Filter and find rows using LINQ on the DataTable
var highValue = dataTable.AsEnumerable()
    .Where(row => row.Field<decimal>("Revenue") > 10000)
    .ToList();
Console.WriteLine($"High-value rows: {highValue.Count}");
// Load a workbook and select the default sheet
WorkBook workbook = WorkBook.Load("inventory.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;

// Read a rectangular range of cells
var range = sheet["A1:D10"];
foreach (var cell in range)
{
    Console.WriteLine($"{cell.AddressString}: {cell.Text}");
}

// Convert the worksheet to a DataTable for database integration
System.Data.DataTable dataTable = sheet.ToDataTable(useFirstRowAsColumnHeaders: true);
Console.WriteLine($"Rows: {dataTable.Rows.Count}, Columns: {dataTable.Columns.Count}");

// Use aggregate functions directly on a range
decimal total = sheet["C2:C10"].Sum();
decimal average = sheet["C2:C10"].Avg();
decimal maxValue = sheet["C2:C10"].Max();

Console.WriteLine($"Total: {total:C}");
Console.WriteLine($"Average: {average:C}");
Console.WriteLine($"Max: {maxValue:C}");

// Filter and find rows using LINQ on the DataTable
var highValue = dataTable.AsEnumerable()
    .Where(row => row.Field<decimal>("Revenue") > 10000)
    .ToList();
Console.WriteLine($"High-value rows: {highValue.Count}");
$vbLabelText   $csharpLabel

範圍選擇語法(sheet["A1:D10"])提供了一種優雅的方式來一次處理多個單元格。 ToDataTable() 方法將工作表資料轉換為 System.Data.DataTable,它可直接與 Entity Framework、資料綁定控制項和 SQL 批次複製作業整合。 IronXL也支援直接在範圍內使用聚合函數-- Max()Min(),從而消除了編寫手動迭代程式碼的需求。

若要高效處理非常大的資料集,請參閱完整的IronXL API 參考文檔,以了解串流和分塊處理模式。

如何使用IronXL在 C# 中開啟 Excel 檔案應用程式:圖 3 - 處理後的 Excel 資料輸出

如何在工作表中篩選和搜尋儲存格?

除了基於範圍的存取之外, IronXL還允許您按值搜尋儲存格、應用條件邏輯以及以程式設計方式遍歷行和列:

WorkBook workbook = WorkBook.Load("products.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;

// Get total row and column counts
int rowCount = sheet.RowCount;
int colCount = sheet.ColumnCount;

Console.WriteLine($"Sheet dimensions: {rowCount} rows x {colCount} columns");

// Iterate over all rows and columns
for (int row = 1; row <= rowCount; row++)
{
    for (int col = 1; col <= colCount; col++)
    {
        var cell = sheet.GetCellAt(row, col);
        if (cell != null && !string.IsNullOrEmpty(cell.Text))
        {
            Console.WriteLine($"[{row},{col}] = {cell.Text}");
        }
    }
}

// Find the first cell containing specific text
var searchResult = sheet["A1:Z100"]
    .FirstOrDefault(c => c.StringValue.Contains("discontinued", StringComparison.OrdinalIgnoreCase));

if (searchResult != null)
{
    Console.WriteLine($"Found 'discontinued' at: {searchResult.AddressString}");
}
WorkBook workbook = WorkBook.Load("products.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;

// Get total row and column counts
int rowCount = sheet.RowCount;
int colCount = sheet.ColumnCount;

Console.WriteLine($"Sheet dimensions: {rowCount} rows x {colCount} columns");

// Iterate over all rows and columns
for (int row = 1; row <= rowCount; row++)
{
    for (int col = 1; col <= colCount; col++)
    {
        var cell = sheet.GetCellAt(row, col);
        if (cell != null && !string.IsNullOrEmpty(cell.Text))
        {
            Console.WriteLine($"[{row},{col}] = {cell.Text}");
        }
    }
}

// Find the first cell containing specific text
var searchResult = sheet["A1:Z100"]
    .FirstOrDefault(c => c.StringValue.Contains("discontinued", StringComparison.OrdinalIgnoreCase));

if (searchResult != null)
{
    Console.WriteLine($"Found 'discontinued' at: {searchResult.AddressString}");
}
$vbLabelText   $csharpLabel

這種模式在資料驗證工作流程中很常見,您需要在進一步處理之前掃描上傳的文件,以尋找特定值。 對於進階篩選用例,請參閱Excel 範圍選擇文件

這種方法支援哪些部署場景?

使用IronXL最實際的優點之一是它無需在系統上安裝任何 Microsoft Office 即可運作。 這帶來了基於互通性的解決方案根本無法比擬的部署彈性:

雲端和容器部署

IronXL無需任何特殊配置即可在Azure 應用程式服務、AWS Lambda 和 Google Cloud Run 上運作。 由於它不依賴 Office,因此您可以避免許可費用以及在容器映像中包含 Office 的複雜性。 使用IronXL 的.NET 10 應用程式的最小 Dockerfile 只需要標準的.NET執行時間映像。

基於 Docker 的部署同樣簡單直接。 IronXL Docker 指南涵蓋了 Debian、Alpine 和 Windows 容器配置。 無論哪種情況,您都可以透過NuGet安裝IronXL ,它無需額外的系統軟體包即可運行。

伺服器和 CI/CD 管線使用情況

伺服器環境通常缺少圖形使用者介面,無法執行依賴 Windows 桌面會話的應用程式。 IronXL完全以無頭模式運行,因此適用於:

  • 在排程的後台作業中產生 Excel 報告
  • 使用ASP.NET Core API 處理上傳的電子表格
  • 在自動化流程中將資料表或資料庫查詢結果匯出為 XLSX 文件
  • 在 CI/CD 測試運行期間驗證導入的資料文件

具體到ASP.NET Core ,請參閱ASP.NET Core Excel 匯出教學課程,其中涵蓋檔案流、回應標頭和正確的處置模式。

跨平台開發

IronXL面向.NET Standard 2.0,可在 Linux 和 macOS 上原生運行,從而實現跨平台開發工作流程。 macOS 上的開發者可以完全放心地在本機上編寫和測試 Excel 產生程式碼,因為相同的二進位檔案在 Linux 生產伺服器上也能完全正常運作。 不需要特定於平台的 API 或條件編譯區塊。

有關支援的環境的更多詳細信息,請訪問IronXL入門概述

除了基本的閱讀之外,你如何進行常見的Excel操作?

讀寫細胞只是基礎。 實際應用中的 Excel 自動化通常涉及格式設定、公式計算、工作表管理和格式轉換。

單元格格式設定和樣式應用

IronXL提供了一套完整的樣式 API,涵蓋字體、顏色、邊框、對齊方式和數字格式:

WorkBook workbook = WorkBook.Load("report.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;

// Apply bold, font size, and background color to header row
var headerRange = sheet["A1:F1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.Font.Height = 12;
headerRange.Style.SetBackgroundColor("#4472C4");
headerRange.Style.Font.Color = "#FFFFFF";
headerRange.Style.HorizontalAlignment = IronXl.Styles.HorizontalAlignment.Center;

// Format a currency column
sheet["D2:D100"].FormatString = "$#,##0.00";

// Apply a date format
sheet["E2:E100"].FormatString = "yyyy-MM-dd";

// Add borders to a data range
var dataRange = sheet["A1:F20"];
dataRange.Style.Border.Bottom.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.Border.Right.Type = IronXl.Styles.BorderType.Thin;

workbook.SaveAs("formatted-report.xlsx");
WorkBook workbook = WorkBook.Load("report.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;

// Apply bold, font size, and background color to header row
var headerRange = sheet["A1:F1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.Font.Height = 12;
headerRange.Style.SetBackgroundColor("#4472C4");
headerRange.Style.Font.Color = "#FFFFFF";
headerRange.Style.HorizontalAlignment = IronXl.Styles.HorizontalAlignment.Center;

// Format a currency column
sheet["D2:D100"].FormatString = "$#,##0.00";

// Apply a date format
sheet["E2:E100"].FormatString = "yyyy-MM-dd";

// Add borders to a data range
var dataRange = sheet["A1:F20"];
dataRange.Style.Border.Bottom.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.Border.Right.Type = IronXl.Styles.BorderType.Thin;

workbook.SaveAs("formatted-report.xlsx");
$vbLabelText   $csharpLabel

若要了解樣式選項的完整說明,請參閱如何設定儲存格、邊框和字型樣式

Excel 與 CSV 格式之間的轉換

IronXL直接處理格式轉換,讓您可以載入 CSV 檔案並將其儲存為 XLSX 文件,或將 XLSX 檔案匯出為 CSV 檔案以進行下游處理:

// Load a CSV file and save as XLSX
WorkBook csvBook = WorkBook.Load("data-import.csv");
csvBook.SaveAs("data-import.xlsx");

// Load an XLSX file and export as CSV
WorkBook xlsxBook = WorkBook.Load("report.xlsx");
xlsxBook.DefaultWorkSheet.SaveAsCsv("report.csv");
// Load a CSV file and save as XLSX
WorkBook csvBook = WorkBook.Load("data-import.csv");
csvBook.SaveAs("data-import.xlsx");

// Load an XLSX file and export as CSV
WorkBook xlsxBook = WorkBook.Load("report.xlsx");
xlsxBook.DefaultWorkSheet.SaveAsCsv("report.csv");
$vbLabelText   $csharpLabel

有關 CSV 處理的更多詳細信息,包括分隔符號配置和編碼選項,請參閱C# CSV 讀取器教程CSV 到 XLSX 轉換指南

如何開始免費試用?

IronXL提供免費的開發許可證供下載,讓您在購買前測試所有功能。 試用期間沒有任何功能限制—您評估的庫與生產環境中運行的庫相同。

開始使用:

  1. 透過NuGet安裝軟體套件:
    dotnet add package IronXL
    dotnet add package IronXL
    SHELL
  2. 造訪IronXL授權頁面以取得免費試用金鑰。
  3. 在呼叫任何IronXL函數之前,在程式碼中套用該金鑰:
    IronXl.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
    IronXl.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
    $vbLabelText   $csharpLabel

我們為個人開發者、團隊和組織提供許可證。 IronXL產品頁面提供完整的定價詳情和部署選項,包括免版稅分發權。 若想更全面地了解Iron Software 的所有產品及其整合方式,請參閱Iron Software產品套件

常見問題解答

如何在無需 Microsoft Office 的情況下使用 C# 開啟 Excel 文件?

您可以使用 IronXL 在 C# 中開啟 Excel 文件,而無需 Microsoft Office。IronXL 提供了比 Interop 更現代化的替代方案,性能更佳且無需 Excel 依賴。

使用 IronXL 處理 C# 中 Excel 文件的好處是什麼?

IronXL 提供了多個好處,包括提升的性能、無需安裝 Excel 和更大的部署靈活性。它允許開發者高效地自動化報告、讀取數據導入和生成電子表格。

IronXL 能夠處理自動化任務的 Excel 文件嗎?

是的,IronXL 非常適合用於自動化任務,如生成每週報告、讀取數據導入以及創建動態電子表格生成工具。

IronXL 是否是 C# 應用程式中 Interop 的合適替代品?

IronXL 是 Interop 的合適替代品,提供了一個現代化的解決方案,消除了對 Excel 依賴,並在處理 Excel 文件時提升了應用程式性能。

IronXL 支持讀取和寫入 Excel 文件嗎?

IronXL 完全支持從 Excel 文件讀取和寫入,這使其成為 .NET 開發者處理電子表格數據的多功能工具。

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担產品测测试,產品開發和研究的责任時,Jordi 為持续的產品改進增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我