如何使用 IronXL 在 C# 中匯入 Excel 資料
處理Microsoft Excel檔案是許多.NET開發人員的日常需求。 無論是導入客戶資料、處理財務報告,還是從電子表格遷移資料到資料庫,開發人員都需要一種可靠的方法來讀取Excel文件,而無需複雜的依賴或安裝Excel。 傳統方法,如通過Microsoft.Office.Interop進行COM自動化,需要完整的Office安裝,會帶來平台限制,並創造脆弱的部署依賴。 IronXL 提供了一個簡單的解決方案,可以跨平台工作,消除了所有這些問題,並允許直接從受管的.NET程式碼進行Excel操作。

如何安裝IronXL並開始使用Excel導入?
使用IronXL,C#中的Excel導入只需數分鐘即可開始。 Excel程式庫處理舊版XLS和現代的XLSX格式,以及CSV、TSV和其他電子表格格式。 與依賴Microsoft.Office.Interop.Excel的解決方案不同,IronXL可獨立運行於任何.NET或.NET Core平台。

通過NuGet套件管理器或.NET CLI安裝IronXL。 您還可以使用Visual Studio中的管理NuGet套件對話框並搜索"IronXL":
Install-Package IronXL.Excel

有關完整的安裝細節,包括版本相容性和相依性說明,請參閱IronXL NuGet安裝指南。 不需要額外的運行時相依性或Office元件 - 該套件是自包含的。 安裝包後,匯入Excel資料非常簡單:
using IronXL;
// Load any Excel file
WorkBook workBook = WorkBook.Load("ProductData.xlsx");
// Access the first worksheet
WorkSheet sheet = workBook.WorkSheets[0];
// Read a cell value
string value = sheet["B1"].StringValue;
Console.WriteLine(value);
using IronXL;
// Load any Excel file
WorkBook workBook = WorkBook.Load("ProductData.xlsx");
// Access the first worksheet
WorkSheet sheet = workBook.WorkSheets[0];
// Read a cell value
string value = sheet["B1"].StringValue;
Console.WriteLine(value);
Imports IronXL
' Load any Excel file
Dim workBook As WorkBook = WorkBook.Load("ProductData.xlsx")
' Access the first worksheet
Dim sheet As WorkSheet = workBook.WorkSheets(0)
' Read a cell value
Dim value As String = sheet("B1").StringValue
Console.WriteLine(value)
此程式碼演示了核心工作流程:載入工作簿、存取工作表和讀取單元格值。 WorkBook.Load()方法會自動檢測文件格式 - 無論是XLS、XLSX還是CSV。直觀的索引器語法sheet["B1"]使得存取單元格就像操作陣列一樣自然。 有關可用成員和過載的完整參考資料,請參閱IronXL API文件。
範例輸入

輸出

如何將Excel資料讀入C#物件?
實際應用程式需要的不僅僅是單個單元格值。 IronXL在導入整個資料集並將其轉換為可用的C#物件方面表現優異。 當您需要導入結構化的Excel資料時,該程式庫提供多種方法直接對應到您的域模型。
下面的範例從工作表中讀取行,並將每一行映射到一個型別化的Product物件:
using IronXL;
// Load the Excel file
WorkBook workBook = WorkBook.Load("ProductData.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;
// Map rows to typed objects
var products = new List<Product>();
foreach (var row in sheet.Rows)
{
var product = new Product
{
Id = row.Columns[0].IntValue,
Name = row.Columns[1].StringValue,
Price = row.Columns[2].DecimalValue,
IsAvailable = row.Columns[3].BoolValue
};
products.Add(product);
}
foreach (var product in products)
{
Console.WriteLine(
$"Id: {product.Id}, Name: {product.Name}, " +
$"Price: {product.Price}, Available: {product.IsAvailable}"
);
}
using IronXL;
// Load the Excel file
WorkBook workBook = WorkBook.Load("ProductData.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;
// Map rows to typed objects
var products = new List<Product>();
foreach (var row in sheet.Rows)
{
var product = new Product
{
Id = row.Columns[0].IntValue,
Name = row.Columns[1].StringValue,
Price = row.Columns[2].DecimalValue,
IsAvailable = row.Columns[3].BoolValue
};
products.Add(product);
}
foreach (var product in products)
{
Console.WriteLine(
$"Id: {product.Id}, Name: {product.Name}, " +
$"Price: {product.Price}, Available: {product.IsAvailable}"
);
}
Imports IronXL
' Load the Excel file
Dim workBook As WorkBook = WorkBook.Load("ProductData.xlsx")
Dim sheet As WorkSheet = workBook.DefaultWorkSheet
' Map rows to typed objects
Dim products As New List(Of Product)()
For Each row In sheet.Rows
Dim product As New Product With {
.Id = row.Columns(0).IntValue,
.Name = row.Columns(1).StringValue,
.Price = row.Columns(2).DecimalValue,
.IsAvailable = row.Columns(3).BoolValue
}
products.Add(product)
Next
For Each product In products
Console.WriteLine(
$"Id: {product.Id}, Name: {product.Name}, " &
$"Price: {product.Price}, Available: {product.IsAvailable}"
)
Next
型別化的屬性 -- IntValue, StringValue, BoolValue -- 自動處理型別轉換。 這種方法消除了手動解析,並在處理混合資料型別的列時減少了錯誤。在Stack Overflow上的許多開發者都讚賞這種對Excel資料導入的型別安全方法。
輸出

如何使用單元格範圍和LINQ?
對於聚合計算和過濾查詢,IronXL支援與LINQ相容的範圍操作:
using IronXL;
WorkBook workBook = WorkBook.Load("ProductData.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;
// Read a named cell range
Range dataRange = sheet["A1:D5"];
// Calculate aggregates directly on a range
decimal sum = sheet["C1:C5"].Sum();
Console.WriteLine($"Sum of C1:C5: {sum}");
decimal max = sheet["C1:C5"].Max(c => c.DecimalValue);
Console.WriteLine($"Max of C1:C5: {max}");
// Filter using LINQ
var highValueOrders = dataRange
.Where(cell => cell.DecimalValue > 100)
.Select(cell => cell.Value)
.ToList();
Console.WriteLine("Orders above 100:");
foreach (var order in highValueOrders)
{
Console.WriteLine(order);
}
using IronXL;
WorkBook workBook = WorkBook.Load("ProductData.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;
// Read a named cell range
Range dataRange = sheet["A1:D5"];
// Calculate aggregates directly on a range
decimal sum = sheet["C1:C5"].Sum();
Console.WriteLine($"Sum of C1:C5: {sum}");
decimal max = sheet["C1:C5"].Max(c => c.DecimalValue);
Console.WriteLine($"Max of C1:C5: {max}");
// Filter using LINQ
var highValueOrders = dataRange
.Where(cell => cell.DecimalValue > 100)
.Select(cell => cell.Value)
.ToList();
Console.WriteLine("Orders above 100:");
foreach (var order in highValueOrders)
{
Console.WriteLine(order);
}
Imports IronXL
Dim workBook As WorkBook = WorkBook.Load("ProductData.xlsx")
Dim sheet As WorkSheet = workBook.DefaultWorkSheet
' Read a named cell range
Dim dataRange As Range = sheet("A1:D5")
' Calculate aggregates directly on a range
Dim sum As Decimal = sheet("C1:C5").Sum()
Console.WriteLine($"Sum of C1:C5: {sum}")
Dim max As Decimal = sheet("C1:C5").Max(Function(c) c.DecimalValue)
Console.WriteLine($"Max of C1:C5: {max}")
' Filter using LINQ
Dim highValueOrders = dataRange _
.Where(Function(cell) cell.DecimalValue > 100) _
.Select(Function(cell) cell.Value) _
.ToList()
Console.WriteLine("Orders above 100:")
For Each order In highValueOrders
Console.WriteLine(order)
Next
Range類提供類似於集合的存取,允許同時存取多個單元格。 LINQ的相容性意味著您可以使用熟悉的C#模式過濾、轉換和聚合Excel資料,而無需先轉換為中介集合。內建聚合方法如Max()直接在單元格範圍上操作。 有關讀取工作簿資料的詳情,請參閱IronXL讀取Excel文件指南。
輸出

如何在C#中將Excel轉換為DataTable?
DataTable轉換對於資料庫操作和資料綁定場景至關重要。 IronXL提供內建方法,從Excel轉換為DataSet或DataTable。 此功能在需要將Excel電子表格匯入SQL Server或其他關聯資料庫時特別有用。 由於結果物件是標準的System.Data.DataTable,它可與任何ADO.NET相容的程式碼路徑協作,而不需要更改您的資料存取層。
using IronXL;
using System.Data;
using System.Data.SqlClient;
// Load Excel file
WorkBook workBook = WorkBook.Load("inventory.xlsx");
// Select the first worksheet
WorkSheet sheet = workBook.WorkSheets.First();
// Convert to DataTable -- first row becomes column headers
DataTable dataTable = sheet.ToDataTable(true);
// Use SqlBulkCopy to insert directly into SQL Server
string connectionString = "Data Source=.;Initial Catalog=InventoryDB;Integrated Security=True;";
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionString))
{
bulkCopy.DestinationTableName = "Inventory";
bulkCopy.WriteToServer(dataTable);
}
using IronXL;
using System.Data;
using System.Data.SqlClient;
// Load Excel file
WorkBook workBook = WorkBook.Load("inventory.xlsx");
// Select the first worksheet
WorkSheet sheet = workBook.WorkSheets.First();
// Convert to DataTable -- first row becomes column headers
DataTable dataTable = sheet.ToDataTable(true);
// Use SqlBulkCopy to insert directly into SQL Server
string connectionString = "Data Source=.;Initial Catalog=InventoryDB;Integrated Security=True;";
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionString))
{
bulkCopy.DestinationTableName = "Inventory";
bulkCopy.WriteToServer(dataTable);
}
Imports IronXL
Imports System.Data
Imports System.Data.SqlClient
' Load Excel file
Dim workBook As WorkBook = WorkBook.Load("inventory.xlsx")
' Select the first worksheet
Dim sheet As WorkSheet = workBook.WorkSheets.First()
' Convert to DataTable -- first row becomes column headers
Dim dataTable As DataTable = sheet.ToDataTable(True)
' Use SqlBulkCopy to insert directly into SQL Server
Dim connectionString As String = "Data Source=.;Initial Catalog=InventoryDB;Integrated Security=True;"
Using bulkCopy As New SqlBulkCopy(connectionString)
bulkCopy.DestinationTableName = "Inventory"
bulkCopy.WriteToServer(dataTable)
End Using
ToDataTable()方法接受一個布林參數以指示第一行是否包含標題。 設置為true時,IronXL自動將第一行的值用作列名。 結果DataTable可與ADO.NET、Entity Framework和資料綁定控制項整合,而無需額外配置。
為了在轉換過程中獲得更多控制,您可以手動構建DataTable:
using IronXL;
using System.Data;
WorkBook workBook = WorkBook.Load("inventory.xlsx");
WorkSheet sheet = workBook.WorkSheets.First();
// Build DataTable manually for custom column types or validation
DataTable customTable = new DataTable();
for (int col = 0; col < sheet.ColumnCount; col++)
{
customTable.Columns.Add($"Column{col + 1}", typeof(string));
}
foreach (var row in sheet.Rows)
{
var dataRow = customTable.NewRow();
for (int col = 0; col < sheet.ColumnCount; col++)
{
dataRow[col] = row.Columns[col].Value ?? DBNull.Value;
}
customTable.Rows.Add(dataRow);
}
// Print headers
foreach (DataColumn column in customTable.Columns)
{
Console.Write($"{column.ColumnName}\t");
}
Console.WriteLine();
// Print data rows
foreach (DataRow row in customTable.Rows)
{
foreach (var item in row.ItemArray)
{
Console.Write($"{item}\t");
}
Console.WriteLine();
}
using IronXL;
using System.Data;
WorkBook workBook = WorkBook.Load("inventory.xlsx");
WorkSheet sheet = workBook.WorkSheets.First();
// Build DataTable manually for custom column types or validation
DataTable customTable = new DataTable();
for (int col = 0; col < sheet.ColumnCount; col++)
{
customTable.Columns.Add($"Column{col + 1}", typeof(string));
}
foreach (var row in sheet.Rows)
{
var dataRow = customTable.NewRow();
for (int col = 0; col < sheet.ColumnCount; col++)
{
dataRow[col] = row.Columns[col].Value ?? DBNull.Value;
}
customTable.Rows.Add(dataRow);
}
// Print headers
foreach (DataColumn column in customTable.Columns)
{
Console.Write($"{column.ColumnName}\t");
}
Console.WriteLine();
// Print data rows
foreach (DataRow row in customTable.Rows)
{
foreach (var item in row.ItemArray)
{
Console.Write($"{item}\t");
}
Console.WriteLine();
}
Imports IronXL
Imports System.Data
Dim workBook As WorkBook = WorkBook.Load("inventory.xlsx")
Dim sheet As WorkSheet = workBook.WorkSheets.First()
' Build DataTable manually for custom column types or validation
Dim customTable As New DataTable()
For col As Integer = 0 To sheet.ColumnCount - 1
customTable.Columns.Add($"Column{col + 1}", GetType(String))
Next
For Each row In sheet.Rows
Dim dataRow = customTable.NewRow()
For col As Integer = 0 To sheet.ColumnCount - 1
dataRow(col) = If(row.Columns(col).Value, DBNull.Value)
Next
customTable.Rows.Add(dataRow)
Next
' Print headers
For Each column As DataColumn In customTable.Columns
Console.Write($"{column.ColumnName}" & vbTab)
Next
Console.WriteLine()
' Print data rows
For Each row As DataRow In customTable.Rows
For Each item In row.ItemArray
Console.Write($"{item}" & vbTab)
Next
Console.WriteLine()
Next
此方法在導入過程中提供了完全的靈活性。 空值被優雅地處理,轉換為DBNull.Value,確保與資料庫列限制相容。 欲了解將資料寫回文件的更多指導,請參閱IronXL寫入Excel文件指南。
輸出

如何使用公式、多表工作簿和Entity Framework?
IronXL超越了基本的讀取功能,擁有應對複雜真實場景的功能。 該程式庫保存Excel公式,使得計算可以動態評估。 對於處理複雜Excel工作簿的開發人員,這在整個導入過程中保持資料完整性。

讀取公式和計算值
using IronXL;
WorkBook workBook = WorkBook.Load("FinancialReport.xlsx");
WorkSheet sheet = workBook.GetWorkSheet("Reports");
// Read the evaluated result of a formula cell
decimal calculatedTotal = sheet["E10"].DecimalValue;
Console.WriteLine($"Total: {calculatedTotal}");
// Read the formula string itself
string formula = sheet["E10"].Formula;
Console.WriteLine($"Formula: {formula}"); // e.g. "=SUM(E2:E9)"
using IronXL;
WorkBook workBook = WorkBook.Load("FinancialReport.xlsx");
WorkSheet sheet = workBook.GetWorkSheet("Reports");
// Read the evaluated result of a formula cell
decimal calculatedTotal = sheet["E10"].DecimalValue;
Console.WriteLine($"Total: {calculatedTotal}");
// Read the formula string itself
string formula = sheet["E10"].Formula;
Console.WriteLine($"Formula: {formula}"); // e.g. "=SUM(E2:E9)"
Imports IronXL
Dim workBook As WorkBook = WorkBook.Load("FinancialReport.xlsx")
Dim sheet As WorkSheet = workBook.GetWorkSheet("Reports")
' Read the evaluated result of a formula cell
Dim calculatedTotal As Decimal = sheet("E10").DecimalValue
Console.WriteLine($"Total: {calculatedTotal}")
' Read the formula string itself
Dim formula As String = sheet("E10").Formula
Console.WriteLine($"Formula: {formula}") ' e.g. "=SUM(E2:E9)"
公式支援意味著導入具有複雜計算的Excel文件無需在程式碼中重建業務邏輯。 該程式庫自動評估公式,提供計算值同時保留原始公式字串。 這在人力資源模型或報告模板中導入包含巢狀公式的時間證明了價值。
跨平台相容性確保在Windows、Linux、macOS和容器環境中的行為一致。 這使得IronXL非常適合用於雲端部署和不適合安裝Office的微服務。 .NET Foundation的文件突出顯示了現代.NET應用程式如何從平台獨立性中受益。
將Excel資料整合到Entity Framework中
Entity Framework整合建立了直接的Excel到資料庫管道。 以下模式在.NET 10高級語句中清晰地工作:
using IronXL;
WorkBook workBook = WorkBook.Load("ProductData.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;
// Skip the header row, map remaining rows to entity objects
var products = sheet.Rows
.Skip(1)
.Select(row => new Product
{
Name = row.Columns[0].StringValue,
Price = row.Columns[1].DecimalValue
})
.ToList();
using var context = new AppDbContext();
await context.Products.AddRangeAsync(products);
await context.SaveChangesAsync();
Console.WriteLine($"Imported {products.Count} products.");
using IronXL;
WorkBook workBook = WorkBook.Load("ProductData.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;
// Skip the header row, map remaining rows to entity objects
var products = sheet.Rows
.Skip(1)
.Select(row => new Product
{
Name = row.Columns[0].StringValue,
Price = row.Columns[1].DecimalValue
})
.ToList();
using var context = new AppDbContext();
await context.Products.AddRangeAsync(products);
await context.SaveChangesAsync();
Console.WriteLine($"Imported {products.Count} products.");
Imports IronXL
Dim workBook As WorkBook = WorkBook.Load("ProductData.xlsx")
Dim sheet As WorkSheet = workBook.DefaultWorkSheet
' Skip the header row, map remaining rows to entity objects
Dim products = sheet.Rows _
.Skip(1) _
.Select(Function(row) New Product With {
.Name = row.Columns(0).StringValue,
.Price = row.Columns(1).DecimalValue
}) _
.ToList()
Using context As New AppDbContext()
Await context.Products.AddRangeAsync(products)
Await context.SaveChangesAsync()
End Using
Console.WriteLine($"Imported {products.Count} products.")
這種模式使得Excel到資料庫的遷移簡潔且程式碼最小,非常適合ETL流程、一次性資料遷移和計劃的匯入工作。 由於LINQ投影在上下文保存之前在記憶體中運行,您可以在同一步驟中應用驗證或轉換邏輯。若要從C#資料建立新的Excel文件,請參見IronXL建立Excel文件指南。
支援的文件格式
IronXL處理各種電子表格格式,而無需其他程式庫或Office安裝。 下表摘要了支援的格式及其使用情況:
| 格式 | 擴展名 | 備註 |
|---|---|---|
| Excel工作簿 | .xlsx | Excel 2007及以後的預設格式 |
| 舊版Excel工作簿 | .xls | 與舊版Excel版本相容 |
| 逗號分隔值 | .csv | 普遍支援的純文字表格資料 |
| 制表符分隔值 | .tsv | 適用於包含嵌入逗號的資料 |
| Excel二進制工作簿 | .xlsb | 針對大文件的緊湊二進制格式 |
若要將資料再匯出為這些格式,請參見IronXL匯出Excel指南。
如何在匯入過程中處理單元格格式?
在導入Excel文件時,保持或檢查單元格格式經常和讀取原始值一樣重要。 IronXL將字體、顏色、對齊和邊框屬性暴露給每個單元格,因此您可以應用驗證規則或以程式方式再現樣式。 這對於報告中特別有用,在這些報告中,視覺格式攜帶語義意義 - 例如,設顏色的單元格表示風險級別,或者加粗的行用於標記總計。
例如,您可能希望檢查單元格是否包含加粗文字 - 這通常意味著一行是摘要或總計行 - 在決定是否將其包含在導入資料集之前:
using IronXL;
WorkBook workBook = WorkBook.Load("StyledReport.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;
foreach (var row in sheet.Rows)
{
var firstCell = row.Columns[0];
// Skip rows where the first cell is bold (typically header or total rows)
if (firstCell.Style.Font.Bold)
{
continue;
}
Console.WriteLine($"Data row: {firstCell.StringValue}");
}
using IronXL;
WorkBook workBook = WorkBook.Load("StyledReport.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;
foreach (var row in sheet.Rows)
{
var firstCell = row.Columns[0];
// Skip rows where the first cell is bold (typically header or total rows)
if (firstCell.Style.Font.Bold)
{
continue;
}
Console.WriteLine($"Data row: {firstCell.StringValue}");
}
Imports IronXL
Dim workBook As WorkBook = WorkBook.Load("StyledReport.xlsx")
Dim sheet As WorkSheet = workBook.DefaultWorkSheet
For Each row In sheet.Rows
Dim firstCell = row.Columns(0)
' Skip rows where the first cell is bold (typically header or total rows)
If firstCell.Style.Font.Bold Then
Continue For
End If
Console.WriteLine($"Data row: {firstCell.StringValue}")
Next
有關單元格和範圍格式的完整參考,包括數字格式字串和背景顏色存取,請參見IronXL單元格格式指南。 您還可以在處理後對輸出文件應用合併操作 - 請參見IronXL合併單元格指南。
如何為您的專案選擇合適的IronXL授權?
IronXL提供靈活的授權選項,以配合您的專案規模。 免費試用授權可供評估,它使您在開發期間存取所有功能而不受時間限制。 試用版會在輸出文件上新增水印,這會在使用有效的生產授權後移除。

對於建立生產應用的團隊,IronXL授權 包括針對個人開發者、團隊和組織部署的選項。 所有生產授權都包括:
- 免版稅再分發權
- IronXL開發團隊的優先支援
- 在授權期間存取所有當前和小版本更新
如果您在與其他Excel程式庫一起評估IronXL,IronXL功能總覽提供了每個層級中所包含內容的詳細剖析。
要立即在專案中開始使用IronXL,請存取IronXL產品頁面或直接從IronXL文件開始,以獲取安裝指南、指南文章和涵蓋程式庫中每個功能的API參考。
常見問題
我如何在C#中導入Excel資料?
您可以使用IronXL輕鬆地在C#中導入Excel資料,無需在您的系統上安裝Microsoft Excel。
使用IronXL進行Excel文件操作的好處是什麼?
IronXL允許開發者在C#中讀取、寫入和操作Excel文件,無需複雜的依賴,並且可以跨不同平台工作。
我需要安裝Microsoft Office來使用IronXL嗎?
不,IronXL消除了安裝Microsoft Office的需求,允許您直接在C#應用中操作Excel文件。
IronXL能否處理XLSX和CSV格式文件?
是的,IronXL支持多種Excel文件格式,包括XLSX和CSV,使其能夠適應不同的資料處理需求。
IronXL是否適合處理大型Excel文件?
是的,IronXL被設計為可以有效地處理大型Excel文件,使開發者可以在沒有性能問題的情況下處理龐大資料集。
IronXL支持哪些平台?
IronXL相容多個平台,支持跨平台的開發和部署應用程式,處理Excel文件。
IronXL如何簡化Excel到資料庫的資料遷移?
IronXL提供了簡單的方法來讀取和導出Excel表中的資料,使將資料轉移到資料庫的工作變得更容易,無需複雜的編碼。
我可以使用IronXL自動生成Excel報告嗎?
是的,IronXL允許自動化Excel報告生成,使您能夠在C#中程式化地建立和操作Excel文件。
IronXL是否適合小規模和企業級應用?
IronXL是多功能且可擴展的,適合需要Excel文件操作的小型專案和大型企業級應用程式。




