如何在 C# 中匯入與匯出 DataTable
IronXL 透過單一方法呼叫,即可在 Excel 工作簿與 DataSet 之間進行轉換——使用 LoadWorkSheetsFromDataSet() 將 DataSet 匯入工作簿,並使用 ToDataSet() 將工作簿匯出為 DataSet 檔案,並自動執行工作表對應至表格的映射。
DataSet 是一種記憶體中的資料表示形式,其中包含多個相關的資料表、關聯關係及約束條件。 用於處理來自資料庫、XML 及其他來源的資料。 在 C# 中處理 Excel 檔案時,DataSet 提供了一種熟悉的 .NET 結構,可與資料驅動型應用程式無縫整合。
DataTable 代表 DataSet 內含行與列的單一表格。 IronXL 會自動將每個 Excel 工作表映射至對應的 DataTable,並在轉換過程中保留欄位標題與資料類型。
快速入門:立即將工作簿匯出為 System.Data.DataSet
將工作簿轉換為 DataSet 只需一次方法呼叫。 此範例會將整個工作簿匯出——每個工作表以 DataTable 格式呈現——並使用 ToDataSet 功能,同時支援可選的第一行標題識別。
簡化工作流程(5 個步驟)
- 下載 C# 函式庫,用於以 DataSet 格式匯入及匯出資料
- 準備
DataSet以匯入至試算表物件 - 請使用
LoadWorkSheetsFromDataSet方法將DataSet至工作簿中 - 請使用
ToDataSet方法將工作簿匯出為DataSet - 檢查轉換結果
如何將 DataSet 載入工作簿?
請使用靜態 LoadWorkSheetsFromDataSet 方法,將 DataSet 匯入工作簿中。 此方法需要同時使用 DataSet 和 Workbook 物件。 它亦支援透過 DataSet 進行可選設定。 請先使用 Create 方法建立工作簿。 將 DataSet 物件和 workbook 物件傳遞給該方法。
:path=/static-assets/excel/content-code-examples/how-to/export-dataset-datatable-load.cs
using IronXL;
using System.Data;
// Create dataset
DataSet dataSet = new DataSet();
// Create workbook
WorkBook workBook = WorkBook.Create();
// Load DataSet to workBook
WorkBook.LoadWorkSheetsFromDataSet(dataSet, workBook);
Imports IronXL
Imports System.Data
' Create dataset
Private dataSet As New DataSet()
' Create workbook
Private workBook As WorkBook = WorkBook.Create()
' Load DataSet to workBook
WorkBook.LoadWorkSheetsFromDataSet(dataSet, workBook)
DataTable 內的每個 DataSet 將成為獨立的工作表。 表格名稱將轉為工作表名稱,以維持資料的組織結構。 若涉及多個資料來源,請將此功能與建立新試算表或管理現有工作表結合使用。
以下是一個載入包含多個表格的 DataSet 的完整範例:
using IronXL;
using System.Data;
// Create a DataSet with multiple tables
DataSet salesData = new DataSet("CompanySales");
// Create and populate a products table
DataTable productsTable = new DataTable("Products");
productsTable.Co/lumns.Add("ProductID", typeof(int));
productsTable.Co/lumns.Add("ProductName", typeof(string));
productsTable.Co/lumns.Add("Price", typeof(decimal));
// Add sample data
productsTable.Rows.Add(1, "Laptop", 999.99m);
productsTable.Rows.Add(2, "Mouse", 19.99m);
productsTable.Rows.Add(3, "Keyboard", 49.99m);
// Create and populate a sales table
DataTable salesTable = new DataTable("Sales");
salesTable.Co/lumns.Add("SaleID", typeof(int));
salesTable.Co/lumns.Add("ProductID", typeof(int));
salesTable.Co/lumns.Add("Quantity", typeof(int));
salesTable.Co/lumns.Add("Date", typeof(DateTime));
// Add sample sales data
salesTable.Rows.Add(1, 1, 5, DateTime.Now);
salesTable.Rows.Add(2, 2, 25, DateTime.Now.AddDays(-1));
salesTable.Rows.Add(3, 3, 10, DateTime.Now.AddDays(-2));
// Add tables to DataSet
salesData.Tables.Add(productsTable);
salesData.Tables.Add(salesTable);
// Create workbook and load DataSet
WorkBook workBook = WorkBook.Create();
WorkBook.LoadWorkSheetsFromDataSet(salesData, workBook);
// Save the workbook with all imported data
workBook.SaveAs("SalesReport.xlsx");
using IronXL;
using System.Data;
// Create a DataSet with multiple tables
DataSet salesData = new DataSet("CompanySales");
// Create and populate a products table
DataTable productsTable = new DataTable("Products");
productsTable.Co/lumns.Add("ProductID", typeof(int));
productsTable.Co/lumns.Add("ProductName", typeof(string));
productsTable.Co/lumns.Add("Price", typeof(decimal));
// Add sample data
productsTable.Rows.Add(1, "Laptop", 999.99m);
productsTable.Rows.Add(2, "Mouse", 19.99m);
productsTable.Rows.Add(3, "Keyboard", 49.99m);
// Create and populate a sales table
DataTable salesTable = new DataTable("Sales");
salesTable.Co/lumns.Add("SaleID", typeof(int));
salesTable.Co/lumns.Add("ProductID", typeof(int));
salesTable.Co/lumns.Add("Quantity", typeof(int));
salesTable.Co/lumns.Add("Date", typeof(DateTime));
// Add sample sales data
salesTable.Rows.Add(1, 1, 5, DateTime.Now);
salesTable.Rows.Add(2, 2, 25, DateTime.Now.AddDays(-1));
salesTable.Rows.Add(3, 3, 10, DateTime.Now.AddDays(-2));
// Add tables to DataSet
salesData.Tables.Add(productsTable);
salesData.Tables.Add(salesTable);
// Create workbook and load DataSet
WorkBook workBook = WorkBook.Create();
WorkBook.LoadWorkSheetsFromDataSet(salesData, workBook);
// Save the workbook with all imported data
workBook.SaveAs("SalesReport.xlsx");
Imports IronXL
Imports System.Data
' Create a DataSet with multiple tables
Dim salesData As New DataSet("CompanySales")
' Create and populate a products table
Dim productsTable As New DataTable("Products")
productsTable.Columns.Add("ProductID", GetType(Integer))
productsTable.Columns.Add("ProductName", GetType(String))
productsTable.Columns.Add("Price", GetType(Decimal))
' Add sample data
productsTable.Rows.Add(1, "Laptop", 999.99D)
productsTable.Rows.Add(2, "Mouse", 19.99D)
productsTable.Rows.Add(3, "Keyboard", 49.99D)
' Create and populate a sales table
Dim salesTable As New DataTable("Sales")
salesTable.Columns.Add("SaleID", GetType(Integer))
salesTable.Columns.Add("ProductID", GetType(Integer))
salesTable.Columns.Add("Quantity", GetType(Integer))
salesTable.Columns.Add("Date", GetType(DateTime))
' Add sample sales data
salesTable.Rows.Add(1, 1, 5, DateTime.Now)
salesTable.Rows.Add(2, 2, 25, DateTime.Now.AddDays(-1))
salesTable.Rows.Add(3, 3, 10, DateTime.Now.AddDays(-2))
' Add tables to DataSet
salesData.Tables.Add(productsTable)
salesData.Tables.Add(salesTable)
' Create workbook and load DataSet
Dim workBook As WorkBook = WorkBook.Create()
WorkBook.LoadWorkSheetsFromDataSet(salesData, workBook)
' Save the workbook with all imported data
workBook.SaveAs("SalesReport.xlsx")
此方法在從 SQL 資料庫匯出資料,或將來自多個來源的資料整合為 Excel 格式時,效果極佳。
請參閱《如何載入現有試算表》,了解如何從各種檔案格式匯入試算表。
如何將工作簿匯出為 DataSet?
ToDataSet 方法會將工作簿轉換為 System.Data.DataSet,其中每個工作表將成為 System.Data.DataTable。 在 Excel 工作簿上呼叫此方法,即可將其轉換為 DataSet 物件。 useFirstRowAsColumnNames 參數決定是否將第一行用作欄位名稱。
:path=/static-assets/excel-content-code-examples/how-to/export-dataset-datatable-export.cs
// 此程式碼片段無法顯示!
' 此程式碼片段無法顯示!
IronXL 在匯出至 DataSets 時,會自動處理資料型別轉換並維持試算表結構。 這有助於將 Excel 資料與 SQL 資料庫整合,或在其他 .NET 應用程式中使用這些資料。
展示工作簿匯出與 DataSet 處理的高階範例:
using IronXL;
using System;
using System.Data;
// Load an existing Excel file
WorkBook workBook = WorkBook.Load("FinancialData.xlsx");
// Export to DataSet with column headers from first row
DataSet financialDataSet = workBook.ToDataSet(useFirstRowAsColumnNames: true);
// Process each DataTable in the DataSet
foreach (DataTable table in financialDataSet.Tables)
{
Console.WriteLine($"Processing table: {table.TableName}");
Console.WriteLine($"Columns: {table.Co/lumns.Count}, Rows: {table.Rows.Co/unt}");
// Iterate through columns
foreach (DataColumn column in table.Co/lumns)
{
Console.WriteLine($" Column: {column.Co/lumnName} ({column.DataType})");
}
// Process first 5 rows as example
int rowCount = 0;
foreach (DataRow row in table.Rows)
{
if (rowCount++ >= 5) break;
// Access data by column name
foreach (DataColumn col in table.Co/lumns)
{
Console.WriteLine($" {col.Co/lumnName}: {row[col]}");
}
}
}
// You can also export specific worksheets as DataTables
WorkSheet specificSheet = workBook.WorkSheets["Q1Sales"];
DataTable q1Data = specificSheet.ToDataTable(useFirstRowAsColumnNames: true);
// Use the DataTable with other .NET components
// For example, bind to a DataGridView or save to database
using IronXL;
using System;
using System.Data;
// Load an existing Excel file
WorkBook workBook = WorkBook.Load("FinancialData.xlsx");
// Export to DataSet with column headers from first row
DataSet financialDataSet = workBook.ToDataSet(useFirstRowAsColumnNames: true);
// Process each DataTable in the DataSet
foreach (DataTable table in financialDataSet.Tables)
{
Console.WriteLine($"Processing table: {table.TableName}");
Console.WriteLine($"Columns: {table.Co/lumns.Count}, Rows: {table.Rows.Co/unt}");
// Iterate through columns
foreach (DataColumn column in table.Co/lumns)
{
Console.WriteLine($" Column: {column.Co/lumnName} ({column.DataType})");
}
// Process first 5 rows as example
int rowCount = 0;
foreach (DataRow row in table.Rows)
{
if (rowCount++ >= 5) break;
// Access data by column name
foreach (DataColumn col in table.Co/lumns)
{
Console.WriteLine($" {col.Co/lumnName}: {row[col]}");
}
}
}
// You can also export specific worksheets as DataTables
WorkSheet specificSheet = workBook.WorkSheets["Q1Sales"];
DataTable q1Data = specificSheet.ToDataTable(useFirstRowAsColumnNames: true);
// Use the DataTable with other .NET components
// For example, bind to a DataGridView or save to database
Imports IronXL
Imports System
Imports System.Data
' Load an existing Excel file
Dim workBook As WorkBook = WorkBook.Load("FinancialData.xlsx")
' Export to DataSet with column headers from first row
Dim financialDataSet As DataSet = workBook.ToDataSet(useFirstRowAsColumnNames:=True)
' Process each DataTable in the DataSet
For Each table As DataTable In financialDataSet.Tables
Console.WriteLine($"Processing table: {table.TableName}")
Console.WriteLine($"Columns: {table.Columns.Count}, Rows: {table.Rows.Count}")
' Iterate through columns
For Each column As DataColumn In table.Columns
Console.WriteLine($" Column: {column.ColumnName} ({column.DataType})")
Next
' Process first 5 rows as example
Dim rowCount As Integer = 0
For Each row As DataRow In table.Rows
If rowCount >= 5 Then Exit For
rowCount += 1
' Access data by column name
For Each col As DataColumn In table.Columns
Console.WriteLine($" {col.ColumnName}: {row(col)}")
Next
Next
Next
' You can also export specific worksheets as DataTables
Dim specificSheet As WorkSheet = workBook.WorkSheets("Q1Sales")
Dim q1Data As DataTable = specificSheet.ToDataTable(useFirstRowAsColumnNames:=True)
' Use the DataTable with other .NET components
' For example, bind to a DataGridView or save to database
匯出的 DataSet 能維持 Excel 中定義的關聯性與限制條件,非常適合處理複雜的 Excel 資料結構,且無需依賴 Excel Interop。
DataSet/DataTables 的其他功能
IronXL 在處理 DataSet 和 DataTable 時提供進階功能:
資料型別的處理
IronXL 在 Excel 與 DataSet 轉換過程中,能智慧地映射資料類型。 數字儲存格將轉換為相應的數字類型(Decimal),日期儲存格將轉換為 DateTime 物件,文字儲存格將轉換為 String。 請在轉換前設定儲存格資料格式以進行客製化。
效能優化
IronXL 針對大型資料集優化了記憶體使用與處理速度。 該函式庫能高效地串流資料,而非將所有資料載入記憶體中。 適用於處理大量資料的Enterprise級應用程式。
與其他功能的整合
DataSet/DataTables 功能與其他 IronXL 功能整合:
- 在匯出至
DataSet之前,請先套用公式與計算 - 在轉換前使用條件格式化來標示資料
- 結合圖表製作功能,實現視覺化報表
- 支援使用
int進行自訂序列化 - 透過
decimal包含資料驗證規則 - 處理缺失值時請使用
double - 透過
DateTime管理工作表元資料 - 使用
string保留儲存格格式類型
請參閱《如何儲存或匯出試算表》,了解如何將試算表匯出為各種檔案格式。
常見問題
如何在 C# 中將 Excel 工作簿轉換為 DataSet?
透過 IronXL,您可以使用 ToDataSet() 方法將 Excel 工作簿轉換為 DataSet。只需呼叫 WorkBook.ToDataSet(useFirstRowAsColumnNames: true),即可匯出整個工作簿,此時每個工作表都會在生成的 DataSet 中轉為一個 DataTable。
我可以透過程式設計將 DataSet 匯入 Excel 工作簿嗎?
是的,IronXL 提供了 LoadWorkSheetsFromDataSet() 方法,用於將 DataSet 匯入工作簿。請先使用 WorkBook.Create() 建立工作簿,然後將 DataSet 和工作簿一併傳入此靜態方法。每個 DataTable 都會成為獨立的工作表。
將 DataTable 匯入 Excel 時,其名稱會發生什麼變化?
using IronXL 的 LoadWorkSheetsFromDataSet() 方法時,每個 DataTable 的名稱會自動轉為 Excel 中的工作表名稱,藉此維持資料的組織結構,並便於辨識不同的資料來源。
該函式庫在 DataSet 轉換過程中會保留欄位標題嗎?
是的,IronXL 在 Excel 與 DataSet 之間的轉換過程中會保留欄位標題和資料類型。當使用 ToDataSet() 並將 useFirstRowAsColumnNames 設定為 true 時,每個工作表的第一行將被識別為欄位標題。
在 Excel 與 DataSet 之間轉換時,應如何處理多個資料表?
IronXL 在將 Excel 工作表轉換為 DataSet 時,會自動將每個工作表映射至對應的 DataTable,反之亦然。當匯入包含多個資料表的 DataSet 時,每個 DataTable 都會在工作簿中建立一個獨立的工作表。
將 Excel 匯出至 DataSet 所需的最小程式碼為何?
using IronXL 將 Excel 工作簿匯出至 DataSet 的最簡代碼僅需一行:DataSet ds = WorkBook.Create().ToDataSet(useFirstRowAsColumnNames: true); 此操作會將整個工作簿轉換為 DataSet,並自動將工作表映射為資料表。

