使用 C# 导出 Excel 数据表 | 转换 Excel 数据
将 Excel 数据导出到 DataTable 可让您以结构化的方式在内存中访问电子表格内容,从而自然地与数据库、UI 控件和 LINQ 查询配合使用。 反向操作——将 DataTable 写回 Excel 文件——对于报表生成和数据存储工作流程同样重要。 IronXL 完全基于 .NET 实现双向处理,无需依赖 Microsoft Office,也无需配置 COM 互操作。
在运行以下任何示例之前,请先安装 IronXL:
Install-Package IronXL
dotnet add package IronXL
Install-Package IronXL
dotnet add package IronXL
安装完成后,WorkBook 和 WorkSheet 类型会公开 ToDataTable 和 ToDataSet 方法,这些方法直接映射到 System.Data 结构。 您还可以通过将 DataRow 值写回工作表并将文件保存为 XLSX 或 XLS 格式来逆转此过程。
如何将整个工作表转换为 DataTable?
ToDataTable 方法将整个工作表或命名区域转换为 System.Data.DataTable。 传递 true 将第一行视为列标题,这样生成的表格的列名就与电子表格的标题完全匹配。
using IronXL;
using System.Data;
// Load the workbook from disk
WorkBook workbook = WorkBook.Load("customers.xlsx");
// Grab the default (first) worksheet
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Convert the entire sheet; first row becomes column headers
DataTable dataTable = worksheet.ToDataTable(true);
// Iterate every row and print each cell value
foreach (DataRow row in dataTable.Rows)
{
for (int i = 0; i < dataTable.Columns.Count; i++)
{
Console.Write(row[i] + "\t");
}
Console.WriteLine();
}
using IronXL;
using System.Data;
// Load the workbook from disk
WorkBook workbook = WorkBook.Load("customers.xlsx");
// Grab the default (first) worksheet
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Convert the entire sheet; first row becomes column headers
DataTable dataTable = worksheet.ToDataTable(true);
// Iterate every row and print each cell value
foreach (DataRow row in dataTable.Rows)
{
for (int i = 0; i < dataTable.Columns.Count; i++)
{
Console.Write(row[i] + "\t");
}
Console.WriteLine();
}
Imports IronXL
Imports System.Data
' Load the workbook from disk
Dim workbook As WorkBook = WorkBook.Load("customers.xlsx")
' Grab the default (first) worksheet
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
' Convert the entire sheet; first row becomes column headers
Dim dataTable As DataTable = worksheet.ToDataTable(True)
' Iterate every row and print each cell value
For Each row As DataRow In dataTable.Rows
For i As Integer = 0 To dataTable.Columns.Count - 1
Console.Write(row(i) & vbTab)
Next
Console.WriteLine()
Next
代码功能说明
WorkBook.Load 无需任何 Office 自动化即可读取 XLSX 文件。 worksheet.ToDataTable(true) 遍历工作表中的每个单元格,并将其映射到 DataRow,使用第一行作为 DataColumn 名称。 生成的 DataTable 是一个标准的 System.Data 对象 -- 您可以将其绑定到 DataGridView,将其传递给 SqlBulkCopy,或立即对其运行 LINQ 查询。
ToDataTable 调用同时支持 XLS 和 XLSX 格式,因此相同的代码无需修改即可用于旧版电子表格。 完整的 API 参考请参阅 IronXL DataTable 和 DataSet 文档。
如何将特定的单元格范围导出到 DataTable 中?
当工作表包含多个数据区域,或者您只需要部分行和列时,可以导出特定的单元格范围,而非整个工作表。 对于大型文件,这种方法更为高效,因为 IronXL 仅处理选定的单元格。
using IronXL;
using System.Data;
WorkBook workbook = WorkBook.Load("financial_report.xlsx");
// Access a named worksheet
WorkSheet worksheet = workbook.GetWorkSheet("Summary");
// Select only the region A1:D20 and convert it
DataTable dt = worksheet["A1:D20"].ToDataTable(true);
Console.WriteLine($"Rows: {dt.Rows.Count}, Columns: {dt.Columns.Count}");
foreach (DataRow row in dt.Rows)
{
foreach (var item in row.ItemArray)
{
Console.Write(item + "\t");
}
Console.WriteLine();
}
using IronXL;
using System.Data;
WorkBook workbook = WorkBook.Load("financial_report.xlsx");
// Access a named worksheet
WorkSheet worksheet = workbook.GetWorkSheet("Summary");
// Select only the region A1:D20 and convert it
DataTable dt = worksheet["A1:D20"].ToDataTable(true);
Console.WriteLine($"Rows: {dt.Rows.Count}, Columns: {dt.Columns.Count}");
foreach (DataRow row in dt.Rows)
{
foreach (var item in row.ItemArray)
{
Console.Write(item + "\t");
}
Console.WriteLine();
}
Imports IronXL
Imports System.Data
Dim workbook As WorkBook = WorkBook.Load("financial_report.xlsx")
' Access a named worksheet
Dim worksheet As WorkSheet = workbook.GetWorkSheet("Summary")
' Select only the region A1:D20 and convert it
Dim dt As DataTable = worksheet("A1:D20").ToDataTable(True)
Console.WriteLine($"Rows: {dt.Rows.Count}, Columns: {dt.Columns.Count}")
For Each row As DataRow In dt.Rows
For Each item In row.ItemArray
Console.Write(item & vbTab)
Next
Console.WriteLine()
Next
为何范围选择至关重要
方括号语法 worksheet["A1:D20"] 返回一个 IronXL.Range 对象。 对该范围调用 ToDataTable 可将处理限制在这些单元格内,这意味着当源文件有数万行时,执行速度更快,内存占用更小。
您还可以指定命名范围,或在运行时动态构建范围字符串——例如,$"A1:D{lastRow}"——使该方法能够灵活地导出可变长度的数据。 Range 类 API 参考文档记录了所有可用的选择和查询方法。
如何将多工作表工作簿转换为 DataSet?
具有多个工作表的日记本自然地映射到 System.Data.DataSet,其中每个工作表都成为一个单独的 DataTable。 ToDataSet 方法只需一次调用即可完成此转换。
using IronXL;
using System.Data;
WorkBook workbook = WorkBook.Load("multi_sheet.xlsx");
// Each worksheet becomes a DataTable inside the DataSet
DataSet dataSet = workbook.ToDataSet();
foreach (DataTable table in dataSet.Tables)
{
Console.WriteLine($"Sheet: {table.TableName}");
Console.WriteLine($"Rows: {table.Rows.Count}");
Console.WriteLine();
}
using IronXL;
using System.Data;
WorkBook workbook = WorkBook.Load("multi_sheet.xlsx");
// Each worksheet becomes a DataTable inside the DataSet
DataSet dataSet = workbook.ToDataSet();
foreach (DataTable table in dataSet.Tables)
{
Console.WriteLine($"Sheet: {table.TableName}");
Console.WriteLine($"Rows: {table.Rows.Count}");
Console.WriteLine();
}
Imports IronXL
Imports System.Data
Dim workbook As WorkBook = WorkBook.Load("multi_sheet.xlsx")
' Each worksheet becomes a DataTable inside the DataSet
Dim dataSet As DataSet = workbook.ToDataSet()
For Each table As DataTable In dataSet.Tables
Console.WriteLine($"Sheet: {table.TableName}")
Console.WriteLine($"Rows: {table.Rows.Count}")
Console.WriteLine()
Next
按名称访问工作表
返回的每个 DataTable 都使用原始工作表名称作为其 TableName 属性,因此您可以使用 dataSet.Tables["Summary"] 检索特定工作表,而无需遍历集合。 这使得构建多工作表报表逻辑或在将结果写入数据库前合并多个工作表的数据变得轻而易举。
有关处理多个工作表和浏览工作簿结构的更多方法,请参阅如何打开和管理 Excel 工作表。
如何将 DataTable 导出回 Excel 文件?
导入到 DataTable 只是其中一半。 当您需要将结构化数据写回电子表格时(用于报告、下载或存档),您可以创建一个新的工作簿,从 DataTable 填充单元格,然后保存。
using IronXL;
using System.Data;
// Build a sample DataTable
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ProductID", typeof(int)));
dt.Columns.Add(new DataColumn("ProductName", typeof(string)));
dt.Columns.Add(new DataColumn("UnitPrice", typeof(decimal)));
dt.Rows.Add(1, "Widget Pro", 29.99m);
dt.Rows.Add(2, "Gadget Max", 49.99m);
dt.Rows.Add(3, "Sensor Kit", 14.50m);
// Create a new workbook and worksheet
WorkBook workbook = WorkBook.Create();
WorkSheet worksheet = workbook.CreateWorkSheet("Products");
// Write column headers from DataTable.Columns
for (int col = 0; col < dt.Columns.Count; col++)
{
worksheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
}
// Write data rows
for (int row = 0; row < dt.Rows.Count; row++)
{
for (int col = 0; col < dt.Columns.Count; col++)
{
worksheet.SetCellValue(row + 1, col, dt.Rows[row][col]);
}
}
// Save as XLSX
workbook.SaveAs("products_export.xlsx");
Console.WriteLine("Export complete.");
using IronXL;
using System.Data;
// Build a sample DataTable
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ProductID", typeof(int)));
dt.Columns.Add(new DataColumn("ProductName", typeof(string)));
dt.Columns.Add(new DataColumn("UnitPrice", typeof(decimal)));
dt.Rows.Add(1, "Widget Pro", 29.99m);
dt.Rows.Add(2, "Gadget Max", 49.99m);
dt.Rows.Add(3, "Sensor Kit", 14.50m);
// Create a new workbook and worksheet
WorkBook workbook = WorkBook.Create();
WorkSheet worksheet = workbook.CreateWorkSheet("Products");
// Write column headers from DataTable.Columns
for (int col = 0; col < dt.Columns.Count; col++)
{
worksheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
}
// Write data rows
for (int row = 0; row < dt.Rows.Count; row++)
{
for (int col = 0; col < dt.Columns.Count; col++)
{
worksheet.SetCellValue(row + 1, col, dt.Rows[row][col]);
}
}
// Save as XLSX
workbook.SaveAs("products_export.xlsx");
Console.WriteLine("Export complete.");
Imports IronXL
Imports System.Data
' Build a sample DataTable
Dim dt As New DataTable()
dt.Columns.Add(New DataColumn("ProductID", GetType(Integer)))
dt.Columns.Add(New DataColumn("ProductName", GetType(String)))
dt.Columns.Add(New DataColumn("UnitPrice", GetType(Decimal)))
dt.Rows.Add(1, "Widget Pro", 29.99D)
dt.Rows.Add(2, "Gadget Max", 49.99D)
dt.Rows.Add(3, "Sensor Kit", 14.50D)
' Create a new workbook and worksheet
Dim workbook As WorkBook = WorkBook.Create()
Dim worksheet As WorkSheet = workbook.CreateWorkSheet("Products")
' Write column headers from DataTable.Columns
For col As Integer = 0 To dt.Columns.Count - 1
worksheet.SetCellValue(0, col, dt.Columns(col).ColumnName)
Next
' Write data rows
For row As Integer = 0 To dt.Rows.Count - 1
For col As Integer = 0 To dt.Columns.Count - 1
worksheet.SetCellValue(row + 1, col, dt.Rows(row)(col))
Next
Next
' Save as XLSX
workbook.SaveAs("products_export.xlsx")
Console.WriteLine("Export complete.")
单元写入循环的工作原理
SetCellValue(rowIndex, columnIndex, value) 接受 object 值,因此您可以传递标题行的列名和数据行的原始单元格值,而无需进行任何类型转换。 row + 1 的行偏移量为第 0 行保留标题。 生成的 XLSX 文件是一个完全有效的电子表格——不含占位符,也不含临时文件。
对于较大的 DataTables,建议在写入数据后启用列自动调整大小功能,以便内容能清晰显示,无需手动格式化。
如何将 DataTable 绑定到 DataGridView?
将 Excel 表格导出到 DataTable 的最常见原因之一是将其显示在 Windows 窗体 DataGridView 中。 一旦你有了 DataTable,绑定就只需要一行代码。
using IronXL;
using System.Data;
using System.Windows.Forms;
WorkBook workbook = WorkBook.Load("inventory.xlsx");
WorkSheet worksheet = workbook.DefaultWorkSheet;
DataTable dataTable = worksheet.ToDataTable(true);
// Bind directly to a DataGridView
dataGridViewInventory.DataSource = dataTable;
using IronXL;
using System.Data;
using System.Windows.Forms;
WorkBook workbook = WorkBook.Load("inventory.xlsx");
WorkSheet worksheet = workbook.DefaultWorkSheet;
DataTable dataTable = worksheet.ToDataTable(true);
// Bind directly to a DataGridView
dataGridViewInventory.DataSource = dataTable;
Imports IronXL
Imports System.Data
Imports System.Windows.Forms
Dim workbook As WorkBook = WorkBook.Load("inventory.xlsx")
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
Dim dataTable As DataTable = worksheet.ToDataTable(True)
' Bind directly to a DataGridView
dataGridViewInventory.DataSource = dataTable
绑定时发生什么
设置 DataSource 会触发 DataGridView 从 DataTable 读取列名和行数据。 每个 DataColumn 都变成一个网格列,每个 DataRow 都变成一个可见行。 您无需编写额外代码,即可通过网格的内置控件实现排序、筛选和选择功能。
此模式同样适用于 WPF DataGrid、ASP.NET GridView 和任何其他 .NET 数据绑定基础结构。 如需分步指南,请参阅如何将 DataGridView 导出到 Excel(反向操作)。
如何在导出的 DataTable 上使用 LINQ 查询?
将工作表转换为 DataTable 后,您可以使用 AsEnumerable() 扩展方法运行 LINQ 查询,该方法将每个 DataRow 转换为可查询元素。
using IronXL;
using System.Data;
using System.Linq;
WorkBook workbook = WorkBook.Load("sales.xlsx");
DataTable dt = workbook.DefaultWorkSheet.ToDataTable(true);
// Filter rows where the "Revenue" column exceeds 10000
var highRevenue = dt.AsEnumerable()
.Where(row => row.Field<double>("Revenue") > 10000)
.OrderByDescending(row => row.Field<double>("Revenue"))
.ToList();
Console.WriteLine($"High-revenue records: {highRevenue.Count}");
foreach (var row in highRevenue)
{
Console.WriteLine($"{row["Product"]}: {row["Revenue"]:C}");
}
using IronXL;
using System.Data;
using System.Linq;
WorkBook workbook = WorkBook.Load("sales.xlsx");
DataTable dt = workbook.DefaultWorkSheet.ToDataTable(true);
// Filter rows where the "Revenue" column exceeds 10000
var highRevenue = dt.AsEnumerable()
.Where(row => row.Field<double>("Revenue") > 10000)
.OrderByDescending(row => row.Field<double>("Revenue"))
.ToList();
Console.WriteLine($"High-revenue records: {highRevenue.Count}");
foreach (var row in highRevenue)
{
Console.WriteLine($"{row["Product"]}: {row["Revenue"]:C}");
}
Imports IronXL
Imports System.Data
Imports System.Linq
Dim workbook As WorkBook = WorkBook.Load("sales.xlsx")
Dim dt As DataTable = workbook.DefaultWorkSheet.ToDataTable(True)
' Filter rows where the "Revenue" column exceeds 10000
Dim highRevenue = dt.AsEnumerable() _
.Where(Function(row) row.Field(Of Double)("Revenue") > 10000) _
.OrderByDescending(Function(row) row.Field(Of Double)("Revenue")) _
.ToList()
Console.WriteLine($"High-revenue records: {highRevenue.Count}")
For Each row In highRevenue
Console.WriteLine($"{row("Product")}: {row("Revenue"):C}")
Next
为何在 DataTable 上使用 LINQ 很有用
LINQ 查询为您提供了一种可读性强且强类型化的方式,用于过滤、排序、分组以及从转换后的工作表中投影数据。 row.Field<t>(columnName) 能够干净利落地处理类型强制转换,如果值无法转换,则会抛出 InvalidCastException 异常,而不是返回静默的 null。 这有助于更早地发现数据质量问题。
将此方法与前文所述的基于范围的导出功能结合使用,可查询特定的工作表区域而非整个工作表,从而在处理大文件时保持较低的内存占用。
导出时如何处理空值和空单元格?
Excel 电子表格中常存在空白区域——如空单元格、合并区域或占位符文本。 IronXL 将空单元格映射到导出的 DBNull.Value,与标准的 ADO.NET 行为相匹配,因此您现有的空处理代码无需修改即可工作。
| Excel 单元格状态 | DataTable 值 | 注意事项 |
|---|---|---|
| 文本内容 | 字符串 | 按原样返回 |
| 数值 | 双精度或十进制 | 取决于单元格格式 |
| 日期值 | 日期时间 | 根据序列号解析 |
| 布尔值 | 布尔 | Excel 中的 TRUE/FALSE |
| 空单元格 | DBNull.Value | 标准 ADO.NET null |
| 公式单元格 | 计算结果 | IronXL 会先评估公式 |
当将 DataTable 写回 Excel 时,DBNull.Value 字段会生成空单元格,从而保持往返的准确性。 如果您需要为空字段设置默认字符串,请在调用 SetCellValue 之前,将 DBNull.Value 替换为您的占位符。
如需更多数据准备指南,请参阅 Microsoft 的 DataTable 类文档,其中深入介绍了空值处理、约束管理以及行状态。
导出大型工作表时如何节省内存?
对于包含数千行数据的电子表格,一次性导出整个表格会将所有数据同时加载到内存中。 IronXL 的两种模式可降低峰值内存占用:
-范围导出:使用 worksheet["A1:D5000"].ToDataTable(true) 处理有界区域而不是整个工作表。
-批量处理:使用 worksheet.RowCount 计算最后使用的行,然后循环处理固定大小的范围(例如一次 1,000 行),并在处理完每个批次后再进行下一个批次。
worksheet.RowCount 和 worksheet.ColumnCount 属性允许您构建动态范围字符串,而无需硬编码维度:
using IronXL;
using System.Data;
WorkBook workbook = WorkBook.Load("large_dataset.xlsx");
WorkSheet worksheet = workbook.DefaultWorkSheet;
int batchSize = 1000;
int totalRows = worksheet.RowCount;
for (int startRow = 1; startRow <= totalRows; startRow += batchSize)
{
int endRow = Math.Min(startRow + batchSize - 1, totalRows);
string rangeAddress = $"A{startRow}:Z{endRow}";
DataTable batch = worksheet[rangeAddress].ToDataTable(false);
// Process each batch -- write to database, transform, etc.
Console.WriteLine($"Processed rows {startRow} to {endRow}");
}
using IronXL;
using System.Data;
WorkBook workbook = WorkBook.Load("large_dataset.xlsx");
WorkSheet worksheet = workbook.DefaultWorkSheet;
int batchSize = 1000;
int totalRows = worksheet.RowCount;
for (int startRow = 1; startRow <= totalRows; startRow += batchSize)
{
int endRow = Math.Min(startRow + batchSize - 1, totalRows);
string rangeAddress = $"A{startRow}:Z{endRow}";
DataTable batch = worksheet[rangeAddress].ToDataTable(false);
// Process each batch -- write to database, transform, etc.
Console.WriteLine($"Processed rows {startRow} to {endRow}");
}
Imports IronXL
Imports System.Data
Dim workbook As WorkBook = WorkBook.Load("large_dataset.xlsx")
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
Dim batchSize As Integer = 1000
Dim totalRows As Integer = worksheet.RowCount
For startRow As Integer = 1 To totalRows Step batchSize
Dim endRow As Integer = Math.Min(startRow + batchSize - 1, totalRows)
Dim rangeAddress As String = $"A{startRow}:Z{endRow}"
Dim batch As DataTable = worksheet(rangeAddress).ToDataTable(False)
' Process each batch -- write to database, transform, etc.
Console.WriteLine($"Processed rows {startRow} to {endRow}")
Next
此模式特别适用于在存在内存限制的 C# 环境中读取大型 Excel 文件。
如何将 DataTable 写入数据库?
一旦你有了 DataTable,通过 SqlBulkCopy 将其插入 SQL Server 是处理大型数据集的最快途径。 SqlBulkCopy 直接接受 DataTable 并批量处理行,而无需构建单独的 INSERT 语句。
using IronXL;
using System.Data;
using Microsoft.Data.SqlClient;
WorkBook workbook = WorkBook.Load("orders.xlsx");
DataTable dataTable = workbook.DefaultWorkSheet.ToDataTable(true);
string connection字符串 = "Server=.;Database=OrdersDB;Trusted_Connection=True;";
using SqlConnection connection = new(connection字符串);
connection.Open();
using SqlBulkCopy bulkCopy = new(connection);
bulkCopy.DestinationTableName = "dbo.Orders";
bulkCopy.BatchSize = 500;
bulkCopy.BulkCopyTimeout = 60;
// Map DataTable columns to database columns
bulkCopy.ColumnMappings.Add("OrderID", "OrderID");
bulkCopy.ColumnMappings.Add("CustomerName", "CustomerName");
bulkCopy.ColumnMappings.Add("TotalAmount", "TotalAmount");
bulkCopy.WriteToServer(dataTable);
Console.WriteLine("Bulk insert complete.");
using IronXL;
using System.Data;
using Microsoft.Data.SqlClient;
WorkBook workbook = WorkBook.Load("orders.xlsx");
DataTable dataTable = workbook.DefaultWorkSheet.ToDataTable(true);
string connection字符串 = "Server=.;Database=OrdersDB;Trusted_Connection=True;";
using SqlConnection connection = new(connection字符串);
connection.Open();
using SqlBulkCopy bulkCopy = new(connection);
bulkCopy.DestinationTableName = "dbo.Orders";
bulkCopy.BatchSize = 500;
bulkCopy.BulkCopyTimeout = 60;
// Map DataTable columns to database columns
bulkCopy.ColumnMappings.Add("OrderID", "OrderID");
bulkCopy.ColumnMappings.Add("CustomerName", "CustomerName");
bulkCopy.ColumnMappings.Add("TotalAmount", "TotalAmount");
bulkCopy.WriteToServer(dataTable);
Console.WriteLine("Bulk insert complete.");
Imports IronXL
Imports System.Data
Imports Microsoft.Data.SqlClient
Dim workbook As WorkBook = WorkBook.Load("orders.xlsx")
Dim dataTable As DataTable = workbook.DefaultWorkSheet.ToDataTable(True)
Dim connection字符串 As String = "Server=.;Database=OrdersDB;Trusted_Connection=True;"
Using connection As New SqlConnection(connection字符串)
connection.Open()
Using bulkCopy As New SqlBulkCopy(connection)
bulkCopy.DestinationTableName = "dbo.Orders"
bulkCopy.BatchSize = 500
bulkCopy.BulkCopyTimeout = 60
' Map DataTable columns to database columns
bulkCopy.ColumnMappings.Add("OrderID", "OrderID")
bulkCopy.ColumnMappings.Add("CustomerName", "CustomerName")
bulkCopy.ColumnMappings.Add("TotalAmount", "TotalAmount")
bulkCopy.WriteToServer(dataTable)
End Using
End Using
Console.WriteLine("Bulk insert complete.")
列映射注意事项
ColumnMappings 集合将 DataTable 列名与数据库列名进行匹配。 如果两个名称相同,则可以省略个别映射,SqlBulkCopy 将按名称自动匹配。 当电子表格的列顺序与数据库模式不一致时,显式映射更为稳妥。
有关将 IronXL 与数据库工作流结合使用的更多信息,请参阅 C# Excel 导入指南,其中涵盖了包括插入前验证在内的其他导入场景。
对于基于 Entity Framework 的项目,请先将 DataTable 行转换为类型化的模型对象,然后使用EFCore.BulkExtensions等库中的 DbContext.BulkInsert 进行 ORM 感知的批量插入。 微软的 SqlBulkCopy 文档详细说明了批处理选项和事务支持。
下一步计划是什么?
现在,您可以使用 IronXL 在 Excel 和 DataTable 之间双向传输数据,拥有一套完整的工具包:
- 使用
worksheet.ToDataTable(true)转换整个工作表,以便导出带标题的文档 使用worksheet["A1:D20"].ToDataTable(true)语法导出特定单元格区域 - 使用
workbook.ToDataSet()转换多工作表工作簿,以获得完整的DataSet访问权限 - 通过迭代
DataRow的值,将SetCellValue的内容写回 XLSX - 使用单个
DataSource赋值将DataTable绑定到 UI 控件,例如DataGridView。 - 直接从
DataTable获取SqlBulkCopy,以实现高吞吐量的数据库插入
若想深入掌握 IronXL 技能,请探索以下相关主题:
- 导出 DataSet 和 DataTable -- 完整 API 参考
- 在 C# 中不使用 OleDb 将 Excel 转换为 DataTable
- C# DataTable 导出到 Excel 教程
- 从 ASP.NET 将 DataTable 导出到 Excel
- 将 DataTable 导出到 Excel 的最快方法
- 在 C# 中加载和读取 Excel 文件
- 导出带格式设置的 Excel 文件
- 使用 C# 读取 Excel 文件——最佳实践
- C# Excel 区域选择与操作
- 将 Excel 数据导入 C# 应用程序
立即获取 IronXL 免费试用许可证,在您的项目中运行这些示例。 当您准备部署时,请购买生产版许可证,或与团队联系以获取许可指导。
常见问题解答
如何使用IronXL将 Excel 数据导出到 C# 中的 DataTable?
您可以使用IronXL将 Excel 数据导出到 C# 中的 DataTable,方法是将 Excel 文件加载到IronXL中,选择工作表或范围,然后使用 ExportToDataTable 方法将数据转换为 DataTable 对象。
将 Excel 数据转换为 DataTable 有什么好处?
将 Excel 数据转换为 DataTable 可以提供结构化数据,非常适合数据库操作、与 UI 控件的数据绑定以及与.NET 的无缝集成。它还有助于在 C# 应用程序中轻松操作和处理数据。
IronXL能否处理 Excel 和 DataTable 之间的数据导入和导出?
是的, IronXL可以高效地处理从 Excel 导入数据到 DataTable 以及从 DataTable 导出数据到 Excel 的操作,使其成为管理 C# 应用程序中数据交换的多功能工具。
是否可以使用IronXL将 Excel 工作表中的特定区域转换为 DataTable?
是的, IronXL允许您选择 Excel 工作表中的特定范围并将其转换为数据表,从而让您在数据操作和提取方面拥有更大的灵活性。
我是否需要安装 Microsoft Office 才能使用IronXL进行 Excel 数据转换?
不,您无需在计算机上安装 Microsoft Office 即可使用IronXL将 Excel 数据转换为 DataTable 或反之亦然。IronXL的运行独立于 Microsoft Office。
IronXL可以将 Excel 中的哪些数据类型转换为 DataTable?
IronXL可以将 Excel 中的各种数据类型(包括数字、文本、日期和公式)转换为 DataTable 格式,同时保持数据的完整性和结构。
IronXL能否将DataTable导出回Excel文件?
是的, IronXL可以将 DataTable 导出回 Excel 文件,从而允许您直接从 C# 应用程序生成报告或创建数据存储解决方案。


