C# 中讀取 Excel 檔案的最佳方法 | IronXL 逐步指南
對於 .NET 開發人員來說,在 C# 中讀取 Excel 檔案是常見的挑戰。 無論您是建立資料匯入管道、報表工具還是批次系統,正確解析電子表格資料都至關重要。 IronXL 是一個 .NET 函式庫,它無需伺服器上的 Microsoft Office 或 COM 互操作 即可處理 XLSX、XLS 和 CSV 檔案。 本指南將帶您了解完整的流程—從安裝到進階查詢—以便您可以為您的專案選擇正確的方法。
!{--01001100010010010100001001010010010000010101001001011001010111110100011101000101010101 01000101111101010011010101000100000101010010010101000100010101000100010111110101011101001000110 1010101000100100001011111010100000101001001001111010001000101010101010000110101010100101010101011 10101010001010010010010010010000010100110001011111010000100100110001001111101000011010010111111010000110100101110--
在 C# 中讀取 Excel 檔案的最佳方法是什麼?
最佳方法是使用專用的、獨立於 Office 的庫,例如 IronXL。 像 Microsoft.Office.Interop.Excel 這樣的傳統方法在安裝了 Excel 的機器上可以正常工作,但在伺服器或容器環境中卻很脆弱,因為它們會在後台啟動一個 COM 進程。 OpenXML SDK 是免費的,並且對伺服器安全,但它公開了一個底層 XML 模型,日常任務需要大量的樣板程式碼。
IronXL 的表現介於這兩種極端情況之間。 此 API 反映了開發者對電子表格的固有認知-工作簿包含工作表,工作表包含儲存格,且儲存格包含輸入的值。 該庫內部處理格式檢測、公式計算和編碼,因此您可以將時間花在業務邏輯上,而不是解析細節。
| 方法 | 需要 Office 嗎? | 伺服器安全嗎? | API 簡化 | 格式支援 |
|---|---|---|---|---|
| COM 互操作 | 是 | 無 | 低的 | XLSX、XLS |
| OpenXML SDK | 無 | 是 | 低的 | 限 XLSX |
| IronXL | 無 | 是 | 高的 | XLSX、XLS、CSV |
IronXL Excel 讀取文件涵蓋了完整的 API 介面。 目前,以下各節展示了您在每個專案中都會用到的核心模式。
如何在.NET專案中安裝IronXL?
使用 NuGet 套件管理器安裝只需不到一分鐘。 在專案目錄下開啟終端並運行:
dotnet add package IronXL.Excel
dotnet add package IronXL.Excel
或者,使用 Visual Studio 套件管理器控制台:
Install-Package IronXL.Excel
Install-Package IronXL.Excel
安裝完成後,將 using IronXL; 指令新增至任何需要存取電子表格的檔案。 該程式庫面向 .NET 10、.NET 8、.NET 6、.NET Framework 4.6.2 和 .NET Standard 2.0,因此無需升級執行時間即可整合到現有專案中。有關特定平台的說明和 NuGet 套件詳細信息,請參閱IronXL 安裝指南。
無需額外的執行時間元件、登錄項目或 Office 授權。 NuGet 套件包含了程式庫所需的一切。
驗證安裝
新增軟體包後,建置一次專案以確認引用解析正確。 如果您看到 CS0246 錯誤,請檢查 IronXL 類型是否存在 using IronXL; 指令,以及您的 .csproj 中的目標框架是否為受支援的版本之一。 IronXL 相容性矩陣列出了所有已確認的執行時間目標。
如何載入和讀取Excel工作簿?
載入工作簿只需要呼叫一個方法。 WorkBook.Load 接受一個檔案路徑,並傳回一個 WorkBook 對象,該物件表示記憶體中的整個檔案。
using IronXL;
// Load any supported format -- XLSX、XLS, or CSV
WorkBook workbook = WorkBook.Load("financial_report.xlsx");
// Access the first worksheet by position
WorkSheet worksheet = workbook.WorkSheets[0];
// Or retrieve a named worksheet
WorkSheet expenses = workbook.GetWorkSheet("Expenses");
Console.WriteLine($"Sheets loaded: {workbook.WorkSheets.Count}");
Console.WriteLine($"Default sheet rows: {worksheet.RowCount}");
using IronXL;
// Load any supported format -- XLSX、XLS, or CSV
WorkBook workbook = WorkBook.Load("financial_report.xlsx");
// Access the first worksheet by position
WorkSheet worksheet = workbook.WorkSheets[0];
// Or retrieve a named worksheet
WorkSheet expenses = workbook.GetWorkSheet("Expenses");
Console.WriteLine($"Sheets loaded: {workbook.WorkSheets.Count}");
Console.WriteLine($"Default sheet rows: {worksheet.RowCount}");
Imports IronXL
' Load any supported format -- XLSX, XLS, or CSV
Dim workbook As WorkBook = WorkBook.Load("financial_report.xlsx")
' Access the first worksheet by position
Dim worksheet As WorkSheet = workbook.WorkSheets(0)
' Or retrieve a named worksheet
Dim expenses As WorkSheet = workbook.GetWorkSheet("Expenses")
Console.WriteLine($"Sheets loaded: {workbook.WorkSheets.Count}")
Console.WriteLine($"Default sheet rows: {worksheet.RowCount}")
。
WorkBook 物件可存取所有工作表資料。 每個 WorkSheet 實例都對應到檔案中的一個製表符。透過索引 (WorkSheets[0]) 存取單頁檔案是可靠的; 當檔案包含多個名稱已知的標籤頁時,按名稱存取會更安全。
IronXL 會在讀取儲存格時自動計算公式。 如果儲存格 B10 包含 =SUM(B2:B9),則讀取 sheet["B10"].DecimalValue 傳回計算出的總計,而不是公式字串。 有關工作簿加載選項的更多詳細信息,請參閱加載電子表格操作指南。
同時處理多個工作表
當工作簿包含多個工作表時,可以使用 workbook.WorkSheets 列舉它們,並依序處理每個工作表。 這對於按月、部門或地區將資料拆分到不同標籤頁的文件非常有用。 WorkSheet.Name 屬性會將選項卡標籤作為字串提供給您,您可以將其用於條件處理或日誌記錄。
如何讀取工作表中的儲存格值?
IronXL 為每個儲存格提供強型別屬性,因此您可以直接將值讀取到正確的 .NET 類型中,而無需手動解析。
using IronXL;
WorkBook workbook = WorkBook.Load("Products.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Address-based access with typed properties
string productName = sheet["A2"].StringValue;
int quantity = sheet["B2"].IntValue;
decimal price = sheet["C2"].DecimalValue;
bool inStock = sheet["D2"].BoolValue;
// Check for empty cells before processing
var statusCell = sheet["E2"];
if (statusCell.Value != null && statusCell.StringValue.Length > 0)
{
Console.WriteLine($"Status: {statusCell.StringValue}");
}
// Row/column index access (zero-based)
var firstDataCell = sheet.Rows[1].Columns[0];
Console.WriteLine($"Product: {productName}, Qty: {quantity}, Price: {price:C}");
using IronXL;
WorkBook workbook = WorkBook.Load("Products.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Address-based access with typed properties
string productName = sheet["A2"].StringValue;
int quantity = sheet["B2"].IntValue;
decimal price = sheet["C2"].DecimalValue;
bool inStock = sheet["D2"].BoolValue;
// Check for empty cells before processing
var statusCell = sheet["E2"];
if (statusCell.Value != null && statusCell.StringValue.Length > 0)
{
Console.WriteLine($"Status: {statusCell.StringValue}");
}
// Row/column index access (zero-based)
var firstDataCell = sheet.Rows[1].Columns[0];
Console.WriteLine($"Product: {productName}, Qty: {quantity}, Price: {price:C}");
Imports IronXL
Dim workbook As WorkBook = WorkBook.Load("Products.xlsx")
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Address-based access with typed properties
Dim productName As String = sheet("A2").StringValue
Dim quantity As Integer = sheet("B2").IntValue
Dim price As Decimal = sheet("C2").DecimalValue
Dim inStock As Boolean = sheet("D2").BoolValue
' Check for empty cells before processing
Dim statusCell = sheet("E2")
If statusCell.Value IsNot Nothing AndAlso statusCell.StringValue.Length > 0 Then
Console.WriteLine($"Status: {statusCell.StringValue}")
End If
' Row/column index access (zero-based)
Dim firstDataCell = sheet.Rows(1).Columns(0)
Console.WriteLine($"Product: {productName}, Qty: {quantity}, Price: {price:C}")
。
sheet["A2"] 語法使用標準的 Excel 表示法。 列字母不區分大小寫,行號從 1 開始,與 Excel 標記儲存格的方式一致。 單元格值讀取文件顯示了其他類型存取器,包括 DateTimeValue,用於格式化為日期的儲存格。
當單元格包含以文字形式儲存的數字(這是導出電子表格中常見的資料品質問題),StringValue 會按原樣返回文本,而 DecimalValue 會嘗試解析,並在解析失敗時返回 0。 在生產代碼中將意外資料作為類型化值處理之前,請務必先對其進行驗證。
處理日期和布爾單元格
Excel 中的日期儲存格在內部以序號的形式儲存。 IronXL 公開 DateTimeValue,以便將它們轉換為 .NET DateTime 對象,而無需手動計算。 對於包含 TRUE 或 FALSE 的儲存格,BoolValue 傳回正確的布林值,無需進行字串比較。 這些類型化存取器消除了一類在透過通用文字解析器讀取電子表格時經常出現的資料類型錯誤。
如何遍歷行和單元格?
遍歷資料集需要一個範圍或行集合。 IronXL 支援這兩種方法,您可以將它們結合起來以匹配數據的形狀。
using IronXL;
WorkBook workbook = WorkBook.Load("financial_report.xlsx");
WorkSheet sheet = workbook.WorkSheets[0];
// Iterate a cell range -- skips header row
foreach (var cell in sheet["A2:D100"])
{
Console.WriteLine($"{cell.AddressString}: {cell.Text}");
}
// Row-by-row with column access
for (int rowIndex = 1; rowIndex < sheet.RowCount; rowIndex++)
{
var row = sheet.Rows[rowIndex];
var values = new System.Text.StringBuilder();
foreach (var cell in row)
{
if (cell.Value != null)
values.Append($"{cell.StringValue}\t");
}
Console.WriteLine(values.ToString().TrimEnd());
}
using IronXL;
WorkBook workbook = WorkBook.Load("financial_report.xlsx");
WorkSheet sheet = workbook.WorkSheets[0];
// Iterate a cell range -- skips header row
foreach (var cell in sheet["A2:D100"])
{
Console.WriteLine($"{cell.AddressString}: {cell.Text}");
}
// Row-by-row with column access
for (int rowIndex = 1; rowIndex < sheet.RowCount; rowIndex++)
{
var row = sheet.Rows[rowIndex];
var values = new System.Text.StringBuilder();
foreach (var cell in row)
{
if (cell.Value != null)
values.Append($"{cell.StringValue}\t");
}
Console.WriteLine(values.ToString().TrimEnd());
}
Imports IronXL
Imports System.Text
Dim workbook As WorkBook = WorkBook.Load("financial_report.xlsx")
Dim sheet As WorkSheet = workbook.WorkSheets(0)
' Iterate a cell range -- skips header row
For Each cell In sheet("A2:D100")
Console.WriteLine($"{cell.AddressString}: {cell.Text}")
Next
' Row-by-row with column access
For rowIndex As Integer = 1 To sheet.RowCount - 1
Dim row = sheet.Rows(rowIndex)
Dim values As New StringBuilder()
For Each cell In row
If cell.Value IsNot Nothing Then
values.Append($"{cell.StringValue}" & vbTab)
End If
Next
Console.WriteLine(values.ToString().TrimEnd())
Next
使用 IronXL 在 C# 中讀取 Excel 檔案的最佳方法:圖 3 - 遍歷行的輸出
範圍字串 "A2:D100" 建立一個扁平單元格集合。 此範圍內的行以從上到下、從左到右的順序處理。 此模式適用於匯出至 List<t>、DataTable 或資料庫。
sheet.RowCount 屬性反映工作表中最後使用的行,因此當資料結束時循環會自動終止。 迭代 Excel 範圍指南涵蓋了其他迭代模式,包括列優先遍歷。
跳過標題行
大多數電子表格都有一個標題行,用於描述列名稱,而不是包含資料。 從第 2 行開始範圍迭代(例如,"A2:D100"),或從 rowIndex = 1 開始索引循環以跳過標題。 如果您使用 ToDataTable(true),IronXL 會自動處理標題偵測並對應第一行的列名。
如何處理多種Excel格式?
IronXL 會自動根據檔案副檔名和檔案頭偵測檔案格式。 XLSX、XLS 和 CSV 檔案的 API 完全相同,這意味著相同的解析程式碼無需條件邏輯即可應用於所有三種格式。
using IronXL;
// Load different formats with identical API
WorkBook xlsxBook = WorkBook.Load("Modern.xlsx");
WorkBook xlsBook = WorkBook.Load("Legacy.xls");
WorkBook csvBook = WorkBook.Load("Export.csv");
// Access worksheets identically across formats
WorkSheet sheet1 = xlsxBook.DefaultWorkSheet;
WorkSheet sheet2 = xlsBook.DefaultWorkSheet;
WorkSheet sheet3 = csvBook.DefaultWorkSheet;
// Cross-format conversion -- save XLSX as CSV, or CSV as XLSX
xlsxBook.SaveAs("converted_output.csv");
csvBook.SaveAs("structured_output.xlsx");
Console.WriteLine($"XLSX rows: {sheet1.RowCount}");
Console.WriteLine($"XLS rows: {sheet2.RowCount}");
Console.WriteLine($"CSV rows: {sheet3.RowCount}");
using IronXL;
// Load different formats with identical API
WorkBook xlsxBook = WorkBook.Load("Modern.xlsx");
WorkBook xlsBook = WorkBook.Load("Legacy.xls");
WorkBook csvBook = WorkBook.Load("Export.csv");
// Access worksheets identically across formats
WorkSheet sheet1 = xlsxBook.DefaultWorkSheet;
WorkSheet sheet2 = xlsBook.DefaultWorkSheet;
WorkSheet sheet3 = csvBook.DefaultWorkSheet;
// Cross-format conversion -- save XLSX as CSV, or CSV as XLSX
xlsxBook.SaveAs("converted_output.csv");
csvBook.SaveAs("structured_output.xlsx");
Console.WriteLine($"XLSX rows: {sheet1.RowCount}");
Console.WriteLine($"XLS rows: {sheet2.RowCount}");
Console.WriteLine($"CSV rows: {sheet3.RowCount}");
Imports IronXL
' Load different formats with identical API
Dim xlsxBook As WorkBook = WorkBook.Load("Modern.xlsx")
Dim xlsBook As WorkBook = WorkBook.Load("Legacy.xls")
Dim csvBook As WorkBook = WorkBook.Load("Export.csv")
' Access worksheets identically across formats
Dim sheet1 As WorkSheet = xlsxBook.DefaultWorkSheet
Dim sheet2 As WorkSheet = xlsBook.DefaultWorkSheet
Dim sheet3 As WorkSheet = csvBook.DefaultWorkSheet
' Cross-format conversion -- save XLSX as CSV, or CSV as XLSX
xlsxBook.SaveAs("converted_output.csv")
csvBook.SaveAs("structured_output.xlsx")
Console.WriteLine($"XLSX rows: {sheet1.RowCount}")
Console.WriteLine($"XLS rows: {sheet2.RowCount}")
Console.WriteLine($"CSV rows: {sheet3.RowCount}")
對於 CSV 文件,IronXL 遵循 RFC 4180 約定,包括包含逗號的引號欄位、帶引號的值中的換行符以及轉義的雙引號。 CSV 轉 XLSX 轉換指南涵蓋了非標準 CSV 匯出的分隔符號自訂。
當您的應用程式必須從外部系統接收檔案時,最佳實踐是在載入之前檢查檔案副檔名並驗證檔案內容。 如果檔案損壞或格式不受支持,IronXL 會拋出一個描述性異常,您可以捕獲該異常並將其顯示給使用者。
如何在 Excel 資料上執行進階查詢?
除了逐個單元格讀取之外,IronXL 還提供了聚合函數和 LINQ 相容性,可以將工作表範圍轉換為可查詢的集合。
using IronXL;
using System.Linq;
WorkBook workbook = WorkBook.Load("Financials.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Built-in aggregates -- no manual looping needed
decimal totalSales = sheet["B2:B50"].Sum();
decimal maxRevenue = sheet["C2:C50"].Max(c => c.DecimalValue);
decimal avgMargin = sheet["D2:D50"].Avg();
// LINQ filtering directly on a range
var highValueRows = sheet["C2:C50"]
.Where(c => c.DecimalValue > 1000)
.Select(c => new { c.AddressString, c.DecimalValue });
foreach (var row in highValueRows)
Console.WriteLine($"高的 value at {row.AddressString}: {row.DecimalValue:C}");
// Write a calculated result back to the sheet
sheet["E2"].Value = totalSales;
workbook.SaveAs("Financials_Updated.xlsx");
Console.WriteLine($"Total: {totalSales:C}, Max: {maxRevenue:C}, Avg: {avgMargin:C}");
using IronXL;
using System.Linq;
WorkBook workbook = WorkBook.Load("Financials.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Built-in aggregates -- no manual looping needed
decimal totalSales = sheet["B2:B50"].Sum();
decimal maxRevenue = sheet["C2:C50"].Max(c => c.DecimalValue);
decimal avgMargin = sheet["D2:D50"].Avg();
// LINQ filtering directly on a range
var highValueRows = sheet["C2:C50"]
.Where(c => c.DecimalValue > 1000)
.Select(c => new { c.AddressString, c.DecimalValue });
foreach (var row in highValueRows)
Console.WriteLine($"高的 value at {row.AddressString}: {row.DecimalValue:C}");
// Write a calculated result back to the sheet
sheet["E2"].Value = totalSales;
workbook.SaveAs("Financials_Updated.xlsx");
Console.WriteLine($"Total: {totalSales:C}, Max: {maxRevenue:C}, Avg: {avgMargin:C}");
Imports IronXL
Imports System.Linq
Dim workbook As WorkBook = WorkBook.Load("Financials.xlsx")
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Built-in aggregates -- no manual looping needed
Dim totalSales As Decimal = sheet("B2:B50").Sum()
Dim maxRevenue As Decimal = sheet("C2:C50").Max(Function(c) c.DecimalValue)
Dim avgMargin As Decimal = sheet("D2:D50").Avg()
' LINQ filtering directly on a range
Dim highValueRows = sheet("C2:C50") _
.Where(Function(c) c.DecimalValue > 1000) _
.Select(Function(c) New With {Key .AddressString = c.AddressString, Key .DecimalValue = c.DecimalValue})
For Each row In highValueRows
Console.WriteLine($"高的 value at {row.AddressString}: {row.DecimalValue:C}")
Next
' Write a calculated result back to the sheet
sheet("E2").Value = totalSales
workbook.SaveAs("Financials_Updated.xlsx")
Console.WriteLine($"Total: {totalSales:C}, Max: {maxRevenue:C}, Avg: {avgMargin:C}")
。
當您需要在將行匯入資料庫之前對其進行篩選,或者驗證列中的所有值是否都滿足閾值時,LINQ 相容性非常有用。 該程式庫在 LINQ 運行之前會評估公式,因此聚合查詢始終對最終計算值進行操作,而不是對公式字串進行操作。
IronXL 的 LINQ 教學涵蓋了連接工作表、按列分組以及將結果投影到強類型物件——這些模式可以消除資料管道程式碼中的大量樣板程式碼。
如何將Excel資料匯出到DataTable?
許多 .NET 應用程式將電子表格資料載入到 ADO.NET DataTable 中以進行進一步處理或插入資料庫。 IronXL 提供了一種直接轉換方法,無需手動進行列對應。
using IronXL;
using System.Data;
WorkBook workbook = WorkBook.Load("SalesData.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Convert worksheet to DataTable -- first row becomes column headers
DataTable dataTable = sheet.ToDataTable(true);
Console.WriteLine($"Columns: {dataTable.Columns.Count}");
Console.WriteLine($"Rows: {dataTable.Rows.Count}");
// Iterate the DataTable normally
foreach (DataRow row in dataTable.Rows)
{
Console.WriteLine($"{row["ProductName"]} -- {row["Quantity"]} -- {row["Price"]}");
}
using IronXL;
using System.Data;
WorkBook workbook = WorkBook.Load("SalesData.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Convert worksheet to DataTable -- first row becomes column headers
DataTable dataTable = sheet.ToDataTable(true);
Console.WriteLine($"Columns: {dataTable.Columns.Count}");
Console.WriteLine($"Rows: {dataTable.Rows.Count}");
// Iterate the DataTable normally
foreach (DataRow row in dataTable.Rows)
{
Console.WriteLine($"{row["ProductName"]} -- {row["Quantity"]} -- {row["Price"]}");
}
Imports IronXL
Imports System.Data
Dim workbook As WorkBook = WorkBook.Load("SalesData.xlsx")
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Convert worksheet to DataTable -- first row becomes column headers
Dim dataTable As DataTable = sheet.ToDataTable(True)
Console.WriteLine($"Columns: {dataTable.Columns.Count}")
Console.WriteLine($"Rows: {dataTable.Rows.Count}")
' Iterate the DataTable normally
For Each row As DataRow In dataTable.Rows
Console.WriteLine($"{row("ProductName")} -- {row("Quantity")} -- {row("Price")}")
Next
將 true 傳遞給 ToDataTable 會將工作表的第一行視為列標題。 產生的 DataTable 使用與標題文字相符的字串列名,讓後續的 LINQ to DataSet 查詢更易讀。 DataTable 匯出文件涵蓋了空值處理和類型推斷選項。
當下游程式碼已經期望 DataTable 時,這種模式尤其有用——例如,當呼叫 SqlBulkCopy 將行插入 SQL Server 時。 您可以載入 XLSX 文件,將其轉換為 DataTable,然後批次插入,而無需編寫任何列映射樣板程式碼。
| 手術 | API | 返回 |
|---|---|---|
| 載入文件 | WorkBook.Load(path) |
WorkBook |
| 依索引取得工作表 | workbook.WorkSheets[0] |
WorkSheet |
| 按名稱取得工作表 | workbook.GetWorkSheet("name") |
WorkSheet |
| 讀取字串單元格 | sheet["A1"].StringValue |
`字串編碼 |
| 讀取十進位單元格 | sheet["B1"].DecimalValue |
decimal |
| 迭代範圍 | foreach cell in sheet["A2:D100"] |
IEnumerable<Cell> |
| 對一定範圍求和 | sheet["B2:B50"].Sum() |
decimal |
| 匯出到資料表 | sheet.ToDataTable(true) |
DataTable |
有關完整的 API 列表,請參閱IronXL API 參考。 此參考文件涵蓋了每個屬性和方法,包括參數描述和傳回類型詳情。
下一步計劃是什麼?
只要有了合適的函式庫,用 C# 讀取 Excel 檔案就非常簡單。 IronXL 消除了對 Office 的依賴,簡化了 API 接口,並使用相同的程式碼路徑處理 XLSX、XLS 和 CSV 格式。 這裡涵蓋的模式——載入工作簿、讀取鍵入的儲存格值、迭代範圍、運行聚合以及導出到 DataTable——涵蓋了大多數現實世界的電子表格讀取需求。
為了繼續沿用這些模式:
- 閱讀IronXL 入門文檔,以了解專案設定指南和執行時間要求。
- 探索有關寫作、格式設定和圖表生成的操作指南。
- 請參閱Excel 公式支援指南,以了解 IronXL 會自動計算哪些 Excel 函數。
- 請查看IronXL 授權頁面,以了解生產部署選項。
- 瀏覽IronXL 博客,以查看有關資料驗證、資料透視表匯出和密碼保護檔案處理的範例。
對於正在評估 IronXL 與其他庫的團隊來說, IronXL 與 EPPlus 的比較以及IronXL 與 NPOI 的比較涵蓋了效能基準和 API 差異。 兩個比較都包含了每個庫中等效操作的程式碼範例。
如果您遇到來自舊系統的不尋常的電子表格結構,微軟自己的Excel 文件格式規範是一個有用的參考。 ECMA-376 標準定義了 XLSX 檔案所遵循的 OOXML 格式。
在購買正式版許可證之前,您可以先申請IronXL 免費試用許可證,在您自己的專案中測試完整的 API。
常見問題解答
在 C# 中讀取 Excel 檔案的最佳方式是什麼?
在 C# 中讀取 Excel 檔案的最佳方式,是使用專用的、獨立於 Office 之外的程式庫,例如 IronXL。它能處理 XLSX、XLS 和 CSV 格式,無需 Microsoft Excel 或 COM 互通,因此適用於伺服器及容器環境。
使用 IronXL 是否需要安裝 Microsoft Office?
不。IronXL 是一個獨立的 .NET 程式庫,以 NuGet 套件形式發行。它不需要電腦上安裝 Microsoft Office、Excel 或任何 COM 元件。
IronXL 支援哪些 Excel 檔案格式?
IronXL 可讀取及寫入 XLSX、XLS 和 CSV 檔案。系統會根據檔案副檔名和內容標頭自動偵測檔案格式。
如何在 .NET 專案中安裝 IronXL?
請在終端機中執行 'dotnet add package IronXL.Excel',或在 Visual Studio 套件管理員控制台中執行 'Install-Package IronXL.Excel'。
IronXL 能否將 Excel 資料匯出至 DataTable?
是的。WorkSheet.ToDataTable(true) 方法可將任何工作表轉換為 ADO.NET DataTable,當傳入 true 時,第一行將用作欄位標題。
IronXL 是否支援對 Excel 資料執行 LINQ 查詢?
是的。IronXL 的儲存格範圍實作了 IEnumerable 介面,因此您可以直接在工作表範圍上使用 Where、Select、Sum、Max 和 Avg 等 LINQ 方法。
IronXL 如何處理 Excel 公式?
當您讀取儲存格值時,IronXL 會自動評估公式。在公式儲存格中讀取 sheet["B10"].DecimalValue 會返回計算結果,而非公式字串。
IronXL 支援哪些 .NET 版本?
IronXL 支援 .NET 10、.NET 8、.NET 6、.NET Framework 4.6.2 以及 .NET Standard 2.0。


