在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
正在尋找可以將 Excel 數據讀取到 C# 中的 DataTable
的 Excel 庫嗎?
在 C# 中將 Excel 文件讀取到 DataTable
在各行各業和領域中具有多種實用應用,例如數據分析和報告、將數據導入資料庫、數據遷移、數據驗證和清理、與其他系統集成、自動化和批次處理。
在本文中,我們將討論並比較兩個不同的用於 .NET Core 中的 C# Excel 庫,這些庫提供將 Excel 數據和 Excel 文件讀入 DataTable
的功能。 這些庫是
EPPlus
EPPlus是一個強大的開源庫,用於在 C# 中創建和操作 Excel 文件。 它提供了一個簡單直觀的 API,允許開發人員以程式化方式生成、讀取和修改 Excel 試算表,無需在伺服器或客戶端機器上安裝 Microsoft Office 或 Excel。 使用EPPlus,您可以輕鬆建立工作表、添加數據、應用格式、創建圖表,並對Excel文件執行其他操作。 它支援較舊的 .xls 格式和較新的 .xlsx 格式,並提供高效執行效能和記憶體管理。 無論您需要生成動態報告、匯入/匯出數據,還是自動化 Excel 相關任務,EPPlus 都提供了一整套功能和能力,簡化您在 C# 應用程式中處理 Excel 文件的過程。
IronXL是一個強大且多功能的庫,使開發者能夠輕鬆地在其 .NET 應用程式中讀取、寫入和操作 Excel 文件。 IronXL 具有直觀且全面的 API,簡化了原本複雜的電子表格處理過程,使開發人員能夠輕鬆提取數據、執行計算、創建圖表並生成報告。 無論是自動化資料匯入/匯出任務、執行資料分析,或是創建動態 Excel 範本,IronXL 提供了一個強大的解決方案,可以為開發者節省寶貴的時間和精力,同時確保在處理 Excel 資料時的精確性和可靠性。 憑藉其無縫整合、詳盡的文檔以及廣泛的功能,IronXL 成為開發人員在 .NET 框架中征服與 Excel 文件操作相關挑戰時可靠且高效的工具首選。
要在您的 C# 專案中安裝 EPPlus 庫,首先需要在 Visual Studio 中創建一個新的基於控制台的專案。 之後,您可以使用 NuGet 套件管理器輕鬆安裝它。
創建新項目後,前往工具並將游標懸停在NuGet Package Manager上,然後選擇「管理解決方案的NuGet套件」。
將會出現一個新視窗。 在這個新視窗中,前往「瀏覽」選項並搜尋「EPPlus」。 一個軟體包列表將出現,您應該選擇最新的穩定版本。 然後,點擊右側的“Install”按鈕以安裝 EPPlus 庫。
這樣,EPPlus就會被添加到您的專案中。
有多種方法可以安裝IronXL,但在本節中,我們將僅討論使用NuGet包管理器安裝IronXL的方法。
就像在第 3 節中一樣,創建一個新專案,然後進入「工具」,打開解決方案的 NuGet 套件管理器。
在新視窗中,在搜索欄中輸入關鍵字「IronXL」。 將會出現一個清單,您可以選擇要安裝的IronXL套件。 然後,點擊「Install」按鈕將 IronXL 安裝到您的專案中。
現在 IronXL 已準備就緒。
在本節中,我們將使用 C# 的 EPPlus 套件 Excel 庫來檢視將 Excel 讀取為 DataTable
的程式碼。
我們需要一個範例 Excel 檔案來讀取為 DataTable
。 為此,我們將生成一個範例 Excel 文件。
以下是將 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
上述程式碼呼叫了一個方法,該方法接收輸入參數,例如檔案路徑和工作表名稱,並返回一個 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
在上面的程式碼範例中,我們只是加載 Excel 檔案並使用 workSheet.ToDataTable
將其轉換為 DataTable
。(真)` 方法。
總之,當涉及到在 C# 中讀取 Excel 文件並將其轉換為 DataTable 時,EPPlus 和 IronXL 都是提供強大功能並簡化過程的優秀庫。
EPPlus是一個開源庫,提供簡單的 API,以程式化產生、讀取和修改 Excel 試算表。 它支持 .xls 和 .xlsx 格式,並提供高效的性能和內存管理。
另一方面,IronXL是一個多功能的程式庫,使開發人員能夠在 .NET 應用程式中輕鬆處理 Excel 文件。 它提供直觀的 API 和全面的功能,用於提取數據、執行計算、創建圖表和生成報告。 IronXL 簡化了複雜的 Excel 文件操作任務,比如數據導入/導出、數據分析和動態模板創建。
在比較 IronXL 和 EPPlus 的代碼範例時,我們發現 EPPlus 的代碼相當冗長、複雜且不易閱讀。 另一方面,IronXL 代碼相當簡單且易於閱讀。 IronXL使用預設工作表,但在EPPlus中,您需要提供工作表的名稱,否則將會出錯。
總結來說,我建議選擇IronXL而非EPPlus來操作Excel文件並將Excel文件讀取為DataTable
。 此外,IronXL 提供了比 EPPlus 更多的功能,能以簡單的代碼處理 Excel 文件。 如需更多有關 IronXL 的教程,請訪問以下網站連結.