跳至页脚内容
使用 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 ,以便进行进一步的操作。

在 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,各种经验水平的开发人员都可以使用它,因此初学者和高级用户都可以轻松上手。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

Iron Support Team

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