跳過到頁腳內容
使用 IRONXL

使用IronXL將Excel文件匯入DataTable

使用IronXL將 C# Excel 檔案匯入到 DataTable 中

手動解析 Excel 檔案很少是開發人員一天中最令人愉快的事情,這已不是什麼秘密。 我們都經歷過這種情況:與遺留的 OLEDB 連接字串作鬥爭,或者試圖將非結構化的電子表格資料映射到.NET應用程式實際能夠理解的內容。

C# 中的 DataTable 是一個強大的均衡器。 它就像一座完美的橋樑,將這些行和列轉換成熟悉的結構,以便進行 LINQ 查詢、DataGrid 綁定或快速存取 SQL 資料庫。

IronXL讓這個過程變得輕鬆許多。 它不使用複雜的配置,而是使用直覺的 ToDataTable 方法來處理轉換。 無論您是在建立報表工具還是資料移轉腳本,以下是如何輕鬆匯入 Excel 資料的方法。

想跟著一起做嗎? 使用IronXL免費試用版親自體驗這款強大的庫。

How Can You Import an Excel File into a DataTable in C#?

若要將 Excel 檔案匯入 C# 資料表中,請使用 WorkBook.Load 載入工作簿,存取目標工作表,然後呼叫 ToDataTable 方法。 這種方法適用於 XLSX 檔案、XLS 檔案、XLSM 檔案和 CSV 檔案格式。 請務必引用以下命名空間以存取必要的類別。

使用NuGet套件管理器在 Visual Studio 中安裝IronXL ,指令如下:

Install-Package IronXl.Excel

然後,使用以下簡潔的程式碼片段來傳輸資料:

using IronXL;
using System;
using System.Data;
class Program
{
    static void Main(string[] args)
    {
        // Load the Excel file from the specified path
        string filePath = "sales-data.xlsx";
        WorkBook workbook = WorkBook.Load(filePath);
        // Access the first worksheet in the workbook
        WorkSheet worksheet = workbook.DefaultWorkSheet;
        // Convert worksheet to DataTable with first row as column headers
        DataTable dt = worksheet.ToDataTable(true);
        // Display the imported data
        foreach (DataRow row in dt.Rows)
        {
            Console.WriteLine(string.Join(" | ", row.ItemArray));
        }
    }
}
using IronXL;
using System;
using System.Data;
class Program
{
    static void Main(string[] args)
    {
        // Load the Excel file from the specified path
        string filePath = "sales-data.xlsx";
        WorkBook workbook = WorkBook.Load(filePath);
        // Access the first worksheet in the workbook
        WorkSheet worksheet = workbook.DefaultWorkSheet;
        // Convert worksheet to DataTable with first row as column headers
        DataTable dt = worksheet.ToDataTable(true);
        // Display the imported data
        foreach (DataRow row in dt.Rows)
        {
            Console.WriteLine(string.Join(" | ", row.ItemArray));
        }
    }
}
$vbLabelText   $csharpLabel

輸出

使用IronXL將 Excel 檔案匯入 DataTable:圖 1 - 匯入到 DataTable 的 Excel 文件

WorkBook.Load 方法從字串 filePath 位置讀取 Excel 文件,並建立一個包含所有 Excel 工作表資料的工作簿物件。 ToDataTable(true) 參數表示第一行包含列標題,這些列標題將自動用作資料表的列名。

將Excel檔案資料讀入DataTable的最佳方法是什麼?

有效率地讀取Excel檔案內容需要同時處理標題行和原始資料兩種情況。 IronXL 的 ToDataTable 方法接受一個布林參數,該參數決定第一行是作為列名還是作為資料。 請注意,處理擴充屬性或轉換複雜單元格類型可能需要額外的配置,但預設方法可以穩健地處理大多數情況。

using IronXL;
using System.Data;
// Load workbook from file path
string filePath = @"C:\Data\inventory.xlsx";
WorkBook workbook = WorkBook.Load(filePath);
WorkSheet worksheet = workbook.WorkSheets[0];
// First row as headers (true) or as data (false)
DataTable dataTableWithHeaders = worksheet.ToDataTable(true);
DataTable dataTableWithoutHeaders = worksheet.ToDataTable(false);
// Process each row in the DataTable
foreach (DataRow row in dataTableWithHeaders.Rows)
{
    for (int i = 0; i < dataTableWithHeaders.Columns.Count; i++)
    {
        object value = row[i];
        Console.Write($"{value}\t");
    }
    Console.WriteLine();
}
using IronXL;
using System.Data;
// Load workbook from file path
string filePath = @"C:\Data\inventory.xlsx";
WorkBook workbook = WorkBook.Load(filePath);
WorkSheet worksheet = workbook.WorkSheets[0];
// First row as headers (true) or as data (false)
DataTable dataTableWithHeaders = worksheet.ToDataTable(true);
DataTable dataTableWithoutHeaders = worksheet.ToDataTable(false);
// Process each row in the DataTable
foreach (DataRow row in dataTableWithHeaders.Rows)
{
    for (int i = 0; i < dataTableWithHeaders.Columns.Count; i++)
    {
        object value = row[i];
        Console.Write($"{value}\t");
    }
    Console.WriteLine();
}
$vbLabelText   $csharpLabel

輸出

使用IronXL將 Excel 檔案匯入 DataTable:圖 2 - 將 Excel 檔案匯入 DataTable 的輸出結果

IronXL 的這種靈活性使其成為處理 Excel 電子表格檔案的理想選擇,無論其結構如何。 與 EPPlus 套件或需要建立新的 OleDbDataAdapter 實例的傳統方法不同, IronXL只需一次方法呼叫即可處理轉換。 此程式庫支援.NET Core、 .NET Framework和跨平台部署,無需安裝 Microsoft Excel。

如何將多個Excel工作表轉換為一個資料集?

當您的 Excel 工作簿包含多個工作表時,轉換為 DataSet 會將每個 Excel 工作表保留為集合中單獨的 DataTable。 這種方法對於報表應用和多表資料處理至關重要。

using IronXL;
using System;
using System.Data;
// Load multi-sheet workbook
WorkBook workbook = WorkBook.Load("quarterly-reports.xlsx");
// Convert entire workbook to DataSet (each sheet becomes a DataTable)
DataSet dataset = workbook.ToDataSet();
// Iterate through all tables in the DataSet
foreach (DataTable table in dataset.Tables)
{
    Console.WriteLine($"Sheet: {table.TableName}");
    Console.WriteLine($"Rows: {table.Rows.Count}, Columns: {table.Columns.Count}");
    foreach (DataRow row in table.Rows)
    {
        Console.WriteLine(string.Join(", ", row.ItemArray));
    }
}
using IronXL;
using System;
using System.Data;
// Load multi-sheet workbook
WorkBook workbook = WorkBook.Load("quarterly-reports.xlsx");
// Convert entire workbook to DataSet (each sheet becomes a DataTable)
DataSet dataset = workbook.ToDataSet();
// Iterate through all tables in the DataSet
foreach (DataTable table in dataset.Tables)
{
    Console.WriteLine($"Sheet: {table.TableName}");
    Console.WriteLine($"Rows: {table.Rows.Count}, Columns: {table.Columns.Count}");
    foreach (DataRow row in table.Rows)
    {
        Console.WriteLine(string.Join(", ", row.ItemArray));
    }
}
$vbLabelText   $csharpLabel

輸出

使用IronXL將 Excel 檔案匯入 DataTable:圖 3 - 將多工作表 Excel 檔案匯入 DataSet 的輸出結果

ToDataSet 方法會建立一個新的 DataSet,其中包含每個工作表的 DataTable 物件。 每個表的 TableName 屬性反映了原始 Excel 工作表名稱,以便在處理過程中引用特定資料。

如何將Excel資料匯入資料庫?

常見的工作流程包括讀取 Excel 檔案資料並將其插入資料庫系統。 DataTable 結構與.NET無縫集成,用於資料庫操作。

using IronXL;
using System.Data;
using System.Data.SqlClient;
string filePath = @"C:\imports\customer-data.xlsx";
WorkBook workbook = WorkBook.Load(filePath);
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Convert Excel data to DataTable
DataTable dt = worksheet.ToDataTable(true);
// Validate data before database insert
if (dt == null || dt.Rows.Count == 0)
{
    Console.WriteLine("No data to import");
    return;
}
// Insert into database using SqlBulkCopy
string connectionString = "Server=.;Database=Sales;Trusted_Connection=True;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
    {
        bulkCopy.DestinationTableName = "Customers";
        bulkCopy.WriteToServer(dt);
    }
}
Console.WriteLine($"Imported {dt.Rows.Count} records successfully");
using IronXL;
using System.Data;
using System.Data.SqlClient;
string filePath = @"C:\imports\customer-data.xlsx";
WorkBook workbook = WorkBook.Load(filePath);
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Convert Excel data to DataTable
DataTable dt = worksheet.ToDataTable(true);
// Validate data before database insert
if (dt == null || dt.Rows.Count == 0)
{
    Console.WriteLine("No data to import");
    return;
}
// Insert into database using SqlBulkCopy
string connectionString = "Server=.;Database=Sales;Trusted_Connection=True;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
    {
        bulkCopy.DestinationTableName = "Customers";
        bulkCopy.WriteToServer(dt);
    }
}
Console.WriteLine($"Imported {dt.Rows.Count} records successfully");
$vbLabelText   $csharpLabel

這段程式碼示範如何載入 Excel 文件,將其轉換為 DataTable,並執行批次資料庫插入操作。 空值檢查可確保在嘗試匯入操作之前資料的完整性。

如何將資料表匯出回 Excel?

IronXL支援雙向資料流,可讓您從 DataTable 物件建立 Excel 文件,以用於報表和資料匯出場景。

using IronXL;
using System.Data;
// Create sample DataTable
DataTable dt = new DataTable("Products");
dt.Columns.Add("ProductID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Price", typeof(decimal));
dt.Rows.Add(1, "Widget", 29.99m);
dt.Rows.Add(2, "Gadget", 49.99m);
// Create new workbook and load DataTable
WorkBook workbook = WorkBook.Create();
workbook.LoadWorkSheetsFromDataSet(new DataSet { Tables = { dt } });
// Save as Excel file
workbook.SaveAs("exported-products.xlsx");
using IronXL;
using System.Data;
// Create sample DataTable
DataTable dt = new DataTable("Products");
dt.Columns.Add("ProductID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Price", typeof(decimal));
dt.Rows.Add(1, "Widget", 29.99m);
dt.Rows.Add(2, "Gadget", 49.99m);
// Create new workbook and load DataTable
WorkBook workbook = WorkBook.Create();
workbook.LoadWorkSheetsFromDataSet(new DataSet { Tables = { dt } });
// Save as Excel file
workbook.SaveAs("exported-products.xlsx");
$vbLabelText   $csharpLabel

輸出

使用IronXL將 Excel 檔案匯入 DataTable:圖 4 - 匯出到 Excel 的 DataTable

LoadWorkSheetsFromDataSet 方法接受一個包含 DataTable 物件的 DataSet,並建立對應的工作表。 請參閱文檔,以了解有關將資料表匯出到 Excel 的更多資訊。

結論

IronXL將 Excel 到 DataTable 轉換的複雜性轉換為簡單的方法呼叫。 無論是匯入單一 Excel 工作表還是將多工作表工作簿處理成完整的資料集,該庫都能有效率地處理 XLSX 檔案、資料類型轉換和基於流的載入。

DataTable 的靈活性與 IronXL 直覺的 API 相結合,為資料庫整合、報表系統和應用程式資料綁定提供了強大的資料工作流程。 下載IronXL以簡化您的 Excel 資料處理,或購買許可證以進行生產部署。

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

第一步:
green arrow pointer

常見問題解答

如何使用 C# 將 Excel 檔案匯入 DataTable?

您可以使用 IronXL 輕鬆將 Excel 檔案匯入 C# 中的 DataTable。IronXL 提供一個簡單的 API,用於載入 Excel 檔案並將其轉換為 DataTable,以便進行後續處理。

使用 IronXL 在 C# 中操作 Excel 文件有哪些好處?

IronXL 提供了一套強大的解決方案,用於在 C# 中操作 Excel 檔案,包括讀取、寫入以及將 Excel 資料轉換為 DataTables 等各種格式。它支援所有主要的 Excel 檔案類型,並具備高效能與易用性。

IronXL 是否兼容 .NET Core?

是的,IronXL 完全相容於 .NET Core,可支援需要處理 Excel 檔案的應用程式進行跨平台開發與部署。

我可以使用 IronXL 讀取不同格式的 Excel 檔案嗎?

IronXL 支援讀取多種格式的 Excel 檔案,包括 XLSX、XLS、CSV 和 TSV,提供處理不同類型 Excel 資料的靈活性。

IronXL 是否支援 Excel 檔案的安全功能?

是的,IronXL 支援受密碼保護的 Excel 檔案,讓您能在 C# 應用程式中載入並處理受保護的 Excel 文件。

如何使用 IronXL 將 Excel 檔案轉換為 DataTable?

透過 IronXL,您可以透過載入工作簿、選取工作表,並利用內建方法將工作表資料匯出至 DataTable,將 Excel 檔案轉換為 DataTable。

哪些類型的應用程式能從使用 IronXL 中受益?

IronXL 非常適合任何需要處理 Excel 資料的應用程式,例如資料分析工具、報表系統,或任何需要匯入、匯出或修改 Excel 資料的軟體。

將 Excel 檔案匯入 DataTable 後,能否使用 IronXL 進行編輯?

是的,IronXL 允許您在將 Excel 檔案匯入 DataTable 之後,仍可進行編輯與更新,提供流暢的修改與儲存變更體驗。

使用 IronXL 需要具備何種程度的程式設計經驗?

IronXL 專為易用性而設計,具備直觀的 API,無論開發者經驗深淺皆可輕鬆上手,無論是初學者或進階使用者都能輕鬆運用。

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

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me