如何在 C# | IronXL 中导入和导出为数据集

如何在 C# 中导入和导出数据集/数据表

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronXL 通过调用单个方法在 Excel 工作簿和数据集之间进行转换--使用 LoadWorkSheetsFromDataSet() 将数据集导入工作簿,以及使用 ToDataSet() 将工作簿导出为数据集,并自动进行工作表到表格的映射。

DataSet 是包含多个相关表、关系和约束的数据的内存表示。 用于处理数据库、XML 和其他来源的数据。 当在 C# 中处理 Excel 文件时,DataSet 提供了一种熟悉的 .NET 结构,可与数据驱动型应用程序集成。

DataTable 表示 DataSet 中具有行和列的单个表格。 IronXL.Excel 会自动将每个 Excel 工作表映射到相应的 DataTable 中,并在转换过程中保留列标题和数据类型。

快速入门:立即将工作簿导出为 System.Data.DataSet

将工作簿转换为 DataSet 只需调用一个方法。 本示例使用 ToDataSet 导出您的整个工作簿--每张工作表作为 DataTable 并可选择识别第一行标题。


开始使用 IronXL


如何将数据集加载到工作簿中?

使用静态 LoadWorkSheetsFromDataSet 方法将 DataSet 导入工作簿。 此方法需要 DataSetWorkbook 对象。 首先使用 Create 方法创建工作簿。 将 DataSet 对象和 workbook 对象传递给方法。

:path=/static-assets/excel-content-code-examples/how-to/export-dataset-datatable-load.cs
// 该代码片段不可用!
' 该代码片段不可用!
$vbLabelText   $csharpLabel

DataSet 中的每个 DataTable 都将成为一个单独的工作表。 表格名称变为工作表名称,以保持数据的条理性。 对于多个数据源,请将其与创建新电子表格管理现有工作表相结合。

下面是一个加载包含多个表的 DataSet 的综合示例:

using IronXL;
using System.Data;

// Create a DataSet with multiple tables
DataSet salesData = new DataSet("CompanySales");

// Create and populate a products table
DataTable productsTable = new DataTable("Products");
productsTable.Columns.Add("ProductID", typeof(int));
productsTable.Columns.Add("ProductName", typeof(string));
productsTable.Columns.Add("Price", typeof(decimal));

// Add sample data
productsTable.Rows.Add(1, "Laptop", 999.99m);
productsTable.Rows.Add(2, "Mouse", 19.99m);
productsTable.Rows.Add(3, "Keyboard", 49.99m);

// Create and populate a sales table
DataTable salesTable = new DataTable("Sales");
salesTable.Columns.Add("SaleID", typeof(int));
salesTable.Columns.Add("ProductID", typeof(int));
salesTable.Columns.Add("Quantity", typeof(int));
salesTable.Columns.Add("Date", typeof(DateTime));

// Add sample sales data
salesTable.Rows.Add(1, 1, 5, DateTime.Now);
salesTable.Rows.Add(2, 2, 25, DateTime.Now.AddDays(-1));
salesTable.Rows.Add(3, 3, 10, DateTime.Now.AddDays(-2));

// Add tables to DataSet
salesData.Tables.Add(productsTable);
salesData.Tables.Add(salesTable);

// Create workbook and load DataSet
WorkBook workBook = WorkBook.Create();
WorkBook.LoadWorkSheetsFromDataSet(salesData, workBook);

// Save the workbook with all imported data
workBook.SaveAs("SalesReport.xlsx");
using IronXL;
using System.Data;

// Create a DataSet with multiple tables
DataSet salesData = new DataSet("CompanySales");

// Create and populate a products table
DataTable productsTable = new DataTable("Products");
productsTable.Columns.Add("ProductID", typeof(int));
productsTable.Columns.Add("ProductName", typeof(string));
productsTable.Columns.Add("Price", typeof(decimal));

// Add sample data
productsTable.Rows.Add(1, "Laptop", 999.99m);
productsTable.Rows.Add(2, "Mouse", 19.99m);
productsTable.Rows.Add(3, "Keyboard", 49.99m);

// Create and populate a sales table
DataTable salesTable = new DataTable("Sales");
salesTable.Columns.Add("SaleID", typeof(int));
salesTable.Columns.Add("ProductID", typeof(int));
salesTable.Columns.Add("Quantity", typeof(int));
salesTable.Columns.Add("Date", typeof(DateTime));

// Add sample sales data
salesTable.Rows.Add(1, 1, 5, DateTime.Now);
salesTable.Rows.Add(2, 2, 25, DateTime.Now.AddDays(-1));
salesTable.Rows.Add(3, 3, 10, DateTime.Now.AddDays(-2));

// Add tables to DataSet
salesData.Tables.Add(productsTable);
salesData.Tables.Add(salesTable);

// Create workbook and load DataSet
WorkBook workBook = WorkBook.Create();
WorkBook.LoadWorkSheetsFromDataSet(salesData, workBook);

// Save the workbook with all imported data
workBook.SaveAs("SalesReport.xlsx");
Imports IronXL
Imports System.Data

' Create a DataSet with multiple tables
Dim salesData As New DataSet("CompanySales")

' Create and populate a products table
Dim productsTable As New DataTable("Products")
productsTable.Columns.Add("ProductID", GetType(Integer))
productsTable.Columns.Add("ProductName", GetType(String))
productsTable.Columns.Add("Price", GetType(Decimal))

' Add sample data
productsTable.Rows.Add(1, "Laptop", 999.99D)
productsTable.Rows.Add(2, "Mouse", 19.99D)
productsTable.Rows.Add(3, "Keyboard", 49.99D)

' Create and populate a sales table
Dim salesTable As New DataTable("Sales")
salesTable.Columns.Add("SaleID", GetType(Integer))
salesTable.Columns.Add("ProductID", GetType(Integer))
salesTable.Columns.Add("Quantity", GetType(Integer))
salesTable.Columns.Add("Date", GetType(DateTime))

' Add sample sales data
salesTable.Rows.Add(1, 1, 5, DateTime.Now)
salesTable.Rows.Add(2, 2, 25, DateTime.Now.AddDays(-1))
salesTable.Rows.Add(3, 3, 10, DateTime.Now.AddDays(-2))

' Add tables to DataSet
salesData.Tables.Add(productsTable)
salesData.Tables.Add(salesTable)

' Create workbook and load DataSet
Dim workBook As WorkBook = WorkBook.Create()
WorkBook.LoadWorkSheetsFromDataSet(salesData, workBook)

' Save the workbook with all imported data
workBook.SaveAs("SalesReport.xlsx")
$vbLabelText   $csharpLabel

从 SQL 数据库导出数据或将多个来源的数据合并为 Excel 格式时,这种方法非常有效。

请访问 如何加载现有电子表格,了解从各种文件格式导入电子表格的方法。


如何将工作簿导出为数据集?

ToDataSet 方法将工作簿转换为 System.Data.DataSet,其中每个工作表都将成为 System.Data.DataTable。 在 Excel 工作簿上调用此方法可将其转换为 DataSet 对象。 useFirstRowAsColumnNames 参数决定是否将第一行用作列名。

:path=/static-assets/excel-content-code-examples/how-to/export-dataset-datatable-export.cs
// 该代码片段不可用!
' 该代码片段不可用!
$vbLabelText   $csharpLabel

IronXL 可自动处理数据类型转换,并在导出到 DataSets 时保持电子表格结构。 这有助于将 Excel 数据与 SQL 数据库集成或在其他 .NET 应用程序中使用数据。

演示工作簿导出和数据集处理的高级示例:

using IronXL;
using System;
using System.Data;

// Load an existing Excel file
WorkBook workBook = WorkBook.Load("FinancialData.xlsx");

// Export to DataSet with column headers from first row
DataSet financialDataSet = workBook.ToDataSet(useFirstRowAsColumnNames: true);

// Process each DataTable in the DataSet
foreach (DataTable table in financialDataSet.Tables)
{
    Console.WriteLine($"Processing table: {table.TableName}");
    Console.WriteLine($"Columns: {table.Columns.Count}, Rows: {table.Rows.Count}");

    // Iterate through columns
    foreach (DataColumn column in table.Columns)
    {
        Console.WriteLine($"  Column: {column.ColumnName} ({column.DataType})");
    }

    // Process first 5 rows as example
    int rowCount = 0;
    foreach (DataRow row in table.Rows)
    {
        if (rowCount++ >= 5) break;

        // Access data by column name
        foreach (DataColumn col in table.Columns)
        {
            Console.WriteLine($"    {col.ColumnName}: {row[col]}");
        }
    }
}

// You can also export specific worksheets as DataTables
WorkSheet specificSheet = workBook.WorkSheets["Q1Sales"];
DataTable q1Data = specificSheet.ToDataTable(useFirstRowAsColumnNames: true);

// Use the DataTable with other .NET components
// For example, bind to a DataGridView or save to database
using IronXL;
using System;
using System.Data;

// Load an existing Excel file
WorkBook workBook = WorkBook.Load("FinancialData.xlsx");

// Export to DataSet with column headers from first row
DataSet financialDataSet = workBook.ToDataSet(useFirstRowAsColumnNames: true);

// Process each DataTable in the DataSet
foreach (DataTable table in financialDataSet.Tables)
{
    Console.WriteLine($"Processing table: {table.TableName}");
    Console.WriteLine($"Columns: {table.Columns.Count}, Rows: {table.Rows.Count}");

    // Iterate through columns
    foreach (DataColumn column in table.Columns)
    {
        Console.WriteLine($"  Column: {column.ColumnName} ({column.DataType})");
    }

    // Process first 5 rows as example
    int rowCount = 0;
    foreach (DataRow row in table.Rows)
    {
        if (rowCount++ >= 5) break;

        // Access data by column name
        foreach (DataColumn col in table.Columns)
        {
            Console.WriteLine($"    {col.ColumnName}: {row[col]}");
        }
    }
}

// You can also export specific worksheets as DataTables
WorkSheet specificSheet = workBook.WorkSheets["Q1Sales"];
DataTable q1Data = specificSheet.ToDataTable(useFirstRowAsColumnNames: true);

// Use the DataTable with other .NET components
// For example, bind to a DataGridView or save to database
Imports IronXL
Imports System
Imports System.Data

' Load an existing Excel file
Dim workBook As WorkBook = WorkBook.Load("FinancialData.xlsx")

' Export to DataSet with column headers from first row
Dim financialDataSet As DataSet = workBook.ToDataSet(useFirstRowAsColumnNames:=True)

' Process each DataTable in the DataSet
For Each table As DataTable In financialDataSet.Tables
    Console.WriteLine($"Processing table: {table.TableName}")
    Console.WriteLine($"Columns: {table.Columns.Count}, Rows: {table.Rows.Count}")

    ' Iterate through columns
    For Each column As DataColumn In table.Columns
        Console.WriteLine($"  Column: {column.ColumnName} ({column.DataType})")
    Next

    ' Process first 5 rows as example
    Dim rowCount As Integer = 0
    For Each row As DataRow In table.Rows
        If rowCount >= 5 Then Exit For
        rowCount += 1

        ' Access data by column name
        For Each col As DataColumn In table.Columns
            Console.WriteLine($"    {col.ColumnName}: {row(col)}")
        Next
    Next
Next

' You can also export specific worksheets as DataTables
Dim specificSheet As WorkSheet = workBook.WorkSheets("Q1Sales")
Dim q1Data As DataTable = specificSheet.ToDataTable(useFirstRowAsColumnNames:=True)

' Use the DataTable with other .NET components
' For example, bind to a DataGridView or save to database
$vbLabelText   $csharpLabel

导出的DataSet集保留了在 Excel 中定义的关系和约束,非常适合处理复杂的 Excel 数据结构,而无需依赖 Excel Interop。

额外的 DataSet/DataTable 功能

IronXL 在使用 DataSetDataTable 时提供了高级功能:

处理数据类型

IronXL.Excel 可在 Excel-DataSet 转换过程中智能映射数据类型。 数字单元格变为适当的数字类型(int, decimal, double ),日期单元格变为 DateTime 对象,文本单元格变为 strings 。 在转换之前,通过 设置单元格数据格式进行自定义。

性能优化

IronXL 可优化内存使用和大型数据集的处理速度。 该库能有效地将数据流而不是将所有内容加载到内存中。 适用于处理大量数据的企业应用程序

与其他功能集成

DataSet/DataTable 功能与 IronXL 的其他功能集成:

请访问 如何保存或导出电子表格,了解如何将电子表格导出为各种文件格式。

常见问题解答

如何在 C# 中将 Excel 工作簿转换为数据集?

通过 IronXL,您可以使用 ToDataSet() 方法将 Excel 工作簿转换为数据集。只需调用 WorkBook.ToDataSet(useFirstRowAsColumnNames:true),即可导出整个工作簿,其中每个工作表都将成为生成的数据集中的一个数据表。

能否以编程方式将数据集导入 Excel 工作簿?

是的,IronXL 提供了 LoadWorkSheetsFromDataSet() 方法,用于将 DataSet 导入工作簿。使用 WorkBook.Create()创建工作簿,然后将数据集和工作簿传递给此静态方法。每个 DataTable 都将成为一个单独的工作表。

导入 Excel 时,DataTable 名称会发生什么变化?

使用 IronXL.Excel 的 LoadWorkSheetsFromDataSet() 方法时,每个 DataTable 名称都会自动变成 Excel 中的工作表名称,从而维护您的数据组织,并方便识别不同的数据源。

在数据集转换过程中,库是否保留列头?

是的,IronXL.Excel 和 DataSets 之间转换时会保留列标题和数据类型。当使用 ToDataSet() 并将 useFirstRowAsColumnNames 设为 true 时,每个工作表的第一行都会被识别为列标题。

在 Excel 和 DataSets 之间转换时,如何处理多个表格?

IronXL.Excel 在转换为 DataSet 时会自动将每个 Excel 工作表映射到相应的 DataTable,反之亦然。导入包含多个表格的 DataSet 时,每个 DataTable 都会在工作簿中创建一个单独的工作表。

将 Excel 导出到 DataSet 所需的最少代码是什么?

使用 IronXL.Excel 将 Excel 工作簿导出为 DataSet 的最小代码只有一行:DataSet ds = WorkBook.Create().ToDataSet(useFirstRowAsColumnNames:true);这将通过自动工作表到表格映射转换整个工作簿。

Curtis Chau
技术作家

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

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

准备开始了吗?
Nuget 下载 1,846,091 | 版本: 2026.2 刚刚发布