與其他組件比較

EPPlus讀取 Excel 到 Datatable 的C# (IronXL 教程)

發佈 2023年5月16日
分享:

尋找 Excel 函式庫將 Excel 數據讀入 C# 中的 DataTable

將 Excel 文件讀入 C# 的 DataTable 在各個行業和領域中有許多實際應用,例如數據分析和報告、數據庫導入、數據遷移、數據驗證和清理、與其他系統的集成、自動化和批量處理。

在本文中,我們將探討和比較兩種不同的 .NET Core 中的 Excel 函式庫,這些函式庫提供將 Excel 數據和 Excel 文件讀入 DataTable 的功能。這些函式庫是:

  1. EPPlus

  2. IronXL

1. EPPlus 庫

EPPlus 是一個強大的開源庫,用於在 C# 中創建和操作 Excel 文件。它提供了一個簡單直觀的 API,使開發人員能夠以編程方式生成、閱讀和修改 Excel 試算表,而無需在伺服器或客戶端機器上安裝 Microsoft Office 或 Excel。使用 EPPlus,您可以輕鬆地創建工作表、添加數據、應用格式、創建圖表,並執行其他 Excel 文件上的操作。它支持舊版的 .xls 格式和新版的 .xlsx 格式,並提供高效的性能和內存管理。不論您需要生成動態報告、導入/導出數據,或自動化與 Excel 相關的任務,EPPlus 都為您提供了一套全面的功能和能力,以簡化在 C# 應用程序中的 Excel 文件處理。

2. IronXL

IronXL 是一個強大且多功能的程式庫,使開發人員能夠在其 .NET 應用程式中輕鬆讀取、寫入和操作 Excel 文件。透過其直覺且全面的 API,IronXL 簡化了處理電子表格這一複雜的過程,使開發人員能夠流暢地提取數據、執行計算、創建圖表並生成報告。不論是自動化數據導入/導出任務、進行數據分析,還是創建動態 Excel 範本,IronXL 都提供了一個強大的解決方案,節省開發人員寶貴的時間和精力,同時確保在處理 Excel 數據時的準確性和可靠性。憑藉其無縫的整合、詳盡的文件和廣泛的功能,IronXL 成為尋求可靠且高效工具來解決 .NET 框架中與 Excel 文件操作相關挑戰的開發人員的首選。

3. 安裝EPPlus庫

要在您的C#專案中安裝EPPlus庫,首先需要在Visual Studio中創建一個新的控制台專案。之後,您可以使用NuGet套件管理器輕鬆安裝它。

創建新專案後,轉到工具並將滑鼠懸停在NuGet套件管理器上,然後選擇「管理解決方案的NuGet套件」。

EPPlus 使用 IronXL 將 Excel 讀取為 DataTable 的 C# 教程 圖1

一個新窗口會出現。在這個新窗口中,轉到 "瀏覽" 選項並搜索 "EPPlus"。會出現一個列表,您應該選擇最新的穩定版本。然後,點擊右側的 "安裝" 按鈕來安裝 EPPlus 庫。

EPPlus 讀取 Excel 到 DataTable C# (IronXL 教程) 圖 2

就這樣,EPPlus 就會被添加到您的專案中。

4. 安裝 IronXL

有很多方法可以安裝 IronXL,但在本節中,我們只討論使用 NuGet 套件管理器安裝 IronXL。

就像在第 3 節中一樣,創建一個新項目並進入“工具”,然後打開解決方案的 NuGet 套件管理器。

在新窗口中,在搜索欄中輸入關鍵字“IronXL”。會出現一個列表,你可以選擇要安裝的 IronXL 套件。然後,點擊“安裝”按鈕即可在項目中安裝 IronXL。

EPPlus 讀取 Excel 到 DataTable C# (IronXL 教程) 圖 3

現在 IronXL 可以使用了。

5. 使用 EPPlus 庫讀取Excel文件和數據到 DataTable

在本節中,我們將研究使用 C# EPPlus 套件 Excel庫將 Excel 作為 DataTable 讀取的代碼。

我們需要一個樣本 Excel 文件以作為 DataTable 讀取。為此,我們將生成一個樣本 Excel 文件。

EPPlus 讀取 Excel 到 DataTable C# (IronXL 教程) 圖 4

以下是將 Excel 文件讀取為 DataTable 的程式碼。


    using OfficeOpenXml;
    using System;
    using System.Data;
    using System.IO;

    class Program
    {
        static void Main(string [] args)
        {
            var path = @"sample.xlsx";
            var data = ExcelDataToDataTable(path, "Table");
            foreach (DataRow row in data.Rows)
            {
                foreach (var wsrow in row.ItemArray)
                {
                    Console.Write(wsrow);
                }
                Console.WriteLine();
            }

        }
        public static DataTable ExcelDataToDataTable(string filePath, string sheetName, bool hasHeader = true)
        {
            DataTable dt = new DataTable();
            var fi = new FileInfo(filePath);
            // Check if the file exists
            if (!fi.Exists)
                throw new Exception("File " + filePath + " Does Not Exists");

            ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
            var xlPackage = new ExcelPackage(fi);
            // get the first worksheet in the workbook
            var worksheet = xlPackage.Workbook.Worksheets [sheetName];

            dt = worksheet.Cells [1, 1, worksheet.Dimension.End.Row, worksheet.Dimension.End.Column].ToDataTable(c =>
            {
                c.FirstRowIsColumnNames = true;
            });

            return dt;
        }
    }

    using OfficeOpenXml;
    using System;
    using System.Data;
    using System.IO;

    class Program
    {
        static void Main(string [] args)
        {
            var path = @"sample.xlsx";
            var data = ExcelDataToDataTable(path, "Table");
            foreach (DataRow row in data.Rows)
            {
                foreach (var wsrow in row.ItemArray)
                {
                    Console.Write(wsrow);
                }
                Console.WriteLine();
            }

        }
        public static DataTable ExcelDataToDataTable(string filePath, string sheetName, bool hasHeader = true)
        {
            DataTable dt = new DataTable();
            var fi = new FileInfo(filePath);
            // Check if the file exists
            if (!fi.Exists)
                throw new Exception("File " + filePath + " Does Not Exists");

            ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
            var xlPackage = new ExcelPackage(fi);
            // get the first worksheet in the workbook
            var worksheet = xlPackage.Workbook.Worksheets [sheetName];

            dt = worksheet.Cells [1, 1, worksheet.Dimension.End.Row, worksheet.Dimension.End.Column].ToDataTable(c =>
            {
                c.FirstRowIsColumnNames = true;
            });

            return dt;
        }
    }
Imports OfficeOpenXml
	Imports System
	Imports System.Data
	Imports System.IO

	Friend Class Program
		Shared Sub Main(ByVal args() As String)
			Dim path = "sample.xlsx"
			Dim data = ExcelDataToDataTable(path, "Table")
			For Each row As DataRow In data.Rows
				For Each wsrow In row.ItemArray
					Console.Write(wsrow)
				Next wsrow
				Console.WriteLine()
			Next row

		End Sub
		Public Shared Function ExcelDataToDataTable(ByVal filePath As String, ByVal sheetName As String, Optional ByVal hasHeader As Boolean = True) As DataTable
			Dim dt As New DataTable()
			Dim fi = New FileInfo(filePath)
			' Check if the file exists
			If Not fi.Exists Then
				Throw New Exception("File " & filePath & " Does Not Exists")
			End If

			ExcelPackage.LicenseContext = LicenseContext.NonCommercial
			Dim xlPackage = New ExcelPackage(fi)
			' get the first worksheet in the workbook
			Dim worksheet = xlPackage.Workbook.Worksheets (sheetName)

			dt = worksheet.Cells (1, 1, worksheet.Dimension.End.Row, worksheet.Dimension.End.Column).ToDataTable(Sub(c)
				c.FirstRowIsColumnNames = True
			End Sub)

			Return dt
		End Function
	End Class
VB   C#

上述程式碼呼叫了一個方法,該方法接收輸入參數,例如檔案路徑和工作表名稱,並返回一個 DataTable 作為輸出。

5.1. 輸出

EPPlus讀取Excel到DataTable C# (IronXL教程) 圖5

6. 使用 IronXL 將 Excel 文件讀取為 DataTable

使用 IronXL 將 Excel 工作表轉換並讀取為 DataTable 非常簡單,只需要幾行代碼。此外,我們將使用前面提到的 Excel 文件作為輸入。

以下代碼示例執行與上述代碼相同的功能,但使用 IronXL。


    using IronXL;
    using System;
    using System.Data;

    WorkBook workBook = WorkBook.Load("sample.xlsx");

    WorkSheet workSheet = workBook.DefaultWorkSheet;

    DataTable Table = workSheet.ToDataTable(true);

    foreach (DataRow row in Table.Rows)
    {
        for (int row = 0; row  < dataTable.Columns.Count; row ++)
        {
            Console.Write(row [row ] + " ");
        }
        Console.WriteLine();
    }

    using IronXL;
    using System;
    using System.Data;

    WorkBook workBook = WorkBook.Load("sample.xlsx");

    WorkSheet workSheet = workBook.DefaultWorkSheet;

    DataTable Table = workSheet.ToDataTable(true);

    foreach (DataRow row in Table.Rows)
    {
        for (int row = 0; row  < dataTable.Columns.Count; row ++)
        {
            Console.Write(row [row ] + " ");
        }
        Console.WriteLine();
    }
Imports IronXL
	Imports System
	Imports System.Data

	Private workBook As WorkBook = WorkBook.Load("sample.xlsx")

	Private workSheet As WorkSheet = workBook.DefaultWorkSheet

	Private Table As DataTable = workSheet.ToDataTable(True)

	For Each row As DataRow In Table.Rows
		For row As Integer = 0 To dataTable.Columns.Count - 1
			Console.Write(row (row) & " ")
		Next row
		Console.WriteLine()
	Next row
VB   C#

在上面的程式碼範例中,我們只是加載 Excel 檔案並使用 workSheet.ToDataTable 將其轉換為 DataTable。(真)` 方法。

6.1 輸出

EPPlus 讀取 Excel 轉 DataTable C#(IronXL 教程)圖 6

7. 結論

總而言之,當涉及讀取 Excel 文件並將其轉換為 C# 中的 DataTable 時,EPPlus 和 IronXL 都是提供強大功能並簡化過程的優秀庫。

EPPlus 是一個開源的庫,提供簡單明瞭的 API 以程式化地生成、讀取和修改 Excel 試算表。它支援 .xls 和 .xlsx 格式,並提供高效的性能和內存管理。

另一方面, IronXL 是一個多功能的庫,使開發者能夠在 .NET 應用程式中輕鬆處理 Excel 文件。它提供直觀的 API 和全面的功能,用於提取數據、執行計算、創建圖表和生成報告。IronXL 簡化了複雜的 Excel 文件操作任務,例如數據匯入/匯出、數據分析和動態範本創建。

在比較 IronXL 和 EPPlus 的代碼示例時,我們發現 EPPlus 的代碼相當冗長、複雜且難以閱讀。另一方面,IronXL 的代碼相當簡單且易於閱讀。IronXL 使用默認工作表,但在 EPPlus 中,你需要指定工作表名稱,否則將會出錯。

總之,我會推薦使用 IronXL 來操作 Excel 文件及將 Excel 文件讀取為 DataTable。此外,IronXL 提供了比 EPPlus 更多的功能來處理 Excel 文件,且代碼簡單。欲了解更多 IronXL 的教程,請訪問以下網址。 連結.

< 上一頁
Zip Archive C# (開發人員教程)
下一個 >
IronXL 與 FastExcel for .NET 的比較

準備開始了嗎? 版本: 2024.10 剛剛發布

免費 NuGet 下載 總下載次數: 1,023,839 查看許可證 >