使用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));
}
}
}
Imports IronXL
Imports System
Imports System.Data
Module Program
Sub Main(args As String())
' Load the Excel file from the specified path
Dim filePath As String = "sales-data.xlsx"
Dim workbook As WorkBook = WorkBook.Load(filePath)
' Access the first worksheet in the workbook
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
' Convert worksheet to DataTable with first row as column headers
Dim dt As DataTable = worksheet.ToDataTable(True)
' Display the imported data
For Each row As DataRow In dt.Rows
Console.WriteLine(String.Join(" | ", row.ItemArray))
Next
End Sub
End Module
输出

WorkBook.Load 方法从字符串 filePath 位置读取 Excel 文件,并创建一个包含所有 Excel 工作表数据的工作簿对象。 ToDataTable(true)参数表示第一行包含列标题,它们将自动用作DataTable列名。
将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();
}
Imports IronXL
Imports System.Data
' Load workbook from file path
Dim filePath As String = "C:\Data\inventory.xlsx"
Dim workbook As WorkBook = WorkBook.Load(filePath)
Dim worksheet As WorkSheet = workbook.WorkSheets(0)
' First row as headers (true) or as data (false)
Dim dataTableWithHeaders As DataTable = worksheet.ToDataTable(True)
Dim dataTableWithoutHeaders As DataTable = worksheet.ToDataTable(False)
' Process each row in the DataTable
For Each row As DataRow In dataTableWithHeaders.Rows
For i As Integer = 0 To dataTableWithHeaders.Columns.Count - 1
Dim value As Object = row(i)
Console.Write($"{value}" & vbTab)
Next
Console.WriteLine()
Next
输出

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));
}
}
Imports IronXL
Imports System
Imports System.Data
' Load multi-sheet workbook
Dim workbook As WorkBook = WorkBook.Load("quarterly-reports.xlsx")
' Convert entire workbook to DataSet (each sheet becomes a DataTable)
Dim dataset As DataSet = workbook.ToDataSet()
' Iterate through all tables in the DataSet
For Each table As DataTable In dataset.Tables
Console.WriteLine($"Sheet: {table.TableName}")
Console.WriteLine($"Rows: {table.Rows.Count}, Columns: {table.Columns.Count}")
For Each row As DataRow In table.Rows
Console.WriteLine(String.Join(", ", row.ItemArray))
Next
Next
输出

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");
Imports IronXL
Imports System.Data
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim filePath As String = "C:\imports\customer-data.xlsx"
Dim workbook As WorkBook = WorkBook.Load(filePath)
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
' Convert Excel data to DataTable
Dim dt As DataTable = worksheet.ToDataTable(True)
' Validate data before database insert
If dt Is Nothing OrElse dt.Rows.Count = 0 Then
Console.WriteLine("No data to import")
Return
End If
' Insert into database using SqlBulkCopy
Dim connectionString As String = "Server=.;Database=Sales;Trusted_Connection=True;"
Using connection As New SqlConnection(connectionString)
connection.Open()
Using bulkCopy As New SqlBulkCopy(connection)
bulkCopy.DestinationTableName = "Customers"
bulkCopy.WriteToServer(dt)
End Using
End Using
Console.WriteLine($"Imported {dt.Rows.Count} records successfully")
End Sub
End Module
这段代码演示了如何加载 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");
Imports IronXL
Imports System.Data
' Create sample DataTable
Dim dt As New DataTable("Products")
dt.Columns.Add("ProductID", GetType(Integer))
dt.Columns.Add("Name", GetType(String))
dt.Columns.Add("Price", GetType(Decimal))
dt.Rows.Add(1, "Widget", 29.99D)
dt.Rows.Add(2, "Gadget", 49.99D)
' Create new workbook and load DataTable
Dim workbook As WorkBook = WorkBook.Create()
workbook.LoadWorkSheetsFromDataSet(New DataSet With {.Tables = {dt}})
' Save as Excel file
workbook.SaveAs("exported-products.xlsx")
输出

LoadWorkSheetsFromDataSet 方法接受一个包含 DataTable 对象的 DataSet,并创建相应的工作表。 请参阅文档,了解有关将数据表导出到 Excel 的更多信息。
结论
IronXL将 Excel 到 DataTable 转换的复杂性转化为简单的方法调用。 无论是导入单个 Excel 工作表还是将多工作表工作簿处理成完整的数据集,该库都能高效地处理 XLSX 文件、数据类型转换和基于流的加载。
DataTable 的灵活性与 IronXL 直观的 API 相结合,为数据库集成、报表系统和应用程序数据绑定提供了强大的数据工作流。 下载IronXL以简化您的 Excel 数据处理,或购买许可证以进行生产部署。
常见问题解答
如何使用 C# 将 Excel 文件导入到 DataTable 中?
您可以使用IronXL轻松地将 Excel 文件导入到 C# 中的 DataTable 中。IronXL 提供了一个简单的 API 来加载 Excel 文件并将其转换为 DataTable ,以便进行进一步的操作。
在 C# 中使用 IronXL 操作 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对其进行编辑?
是的,即使将 Excel 文件导入到数据表中, IronXL也允许您编辑和更新 Excel 文件,从而为修改和保存更改提供无缝的体验。
使用IronXL需要怎样的编程经验?
IronXL 的设计宗旨是易于使用,它拥有用户友好的 API,各种经验水平的开发人员都可以使用它,因此初学者和高级用户都可以轻松上手。




