在企业级开发中,Excel 与数据库 / 内存数据集的互转是高频需求,DataTable 作为.NET 中通用的内存数据结构,常被用于承接 Excel 数据进行后续处理(如数据验证、入库、展示)。本文将分享如何使用免费库 Free Spire.XLS for .NET 实现 Excel 文件到 DataTable 的高效转换。
一、免费库介绍与安装
1. Free Spire.XLS for .NET 核心优势
- 内置
ExportDataTable方法,无需手动遍历单元格,代码量减少80%; - 无需依赖 Microsoft Office/Excel 客户端,跨平台部署更便捷;
- 支持 .xls、.xlsx 等主流 Excel 格式,API封装直观,新手易上手。
注意: 免费版有一定数据量限制,适合小型项目
2. 安装 Free Spire.XLS
推荐通过NuGet快速安装,步骤如下:
- 右键项目 → 管理NuGet程序包;
- 搜索"Free Spire.XLS"并安装最新稳定版;
- 或在 Package Manager Console 执行命令:
bash
Install-Package FreeSpire.XLS
二、核心实现:Excel 转 DataTable
1. 将指定工作表转换为 DataTable 内存数据集
以下代码实现最核心的转换逻辑,包含 "加载 Excel→选取目标工作表→核心数据转DataTable→验证并输出结果" 完整流程:
csharp
using Spire.Xls;
using System;
using System.Data;
namespace ExcelToDataTableDemo
{
class Program
{
static void Main()
{
// 定义Excel文件路径
string excelFilePath = "Sample.xlsx";
// 1. 初始化Workbook并加载Excel文件
Workbook workbook = new Workbook();
workbook.LoadFromFile(excelFilePath);
// 2. 获取第一个工作表(索引从0开始)
Worksheet sheet = workbook.Worksheets[0];
// 3. 核心:调用内置ExportDataTable方法转换
// 参数1:要导出的单元格范围(AllocatedRange表示工作表的有效数据范围)
// 参数2:是否将第一行作为DataTable的列名
DataTable dataTable = sheet.ExportDataTable(sheet.AllocatedRange, true);
// 4. 验证转换结果:输出数据信息
Console.WriteLine("=== Excel转DataTable结果 ===");
// 输出总行数(排除表头)
Console.WriteLine($"数据总行数:{dataTable.Rows.Count}");
// 输出列名
Console.Write("列名:");
foreach (DataColumn col in dataTable.Columns)
{
Console.Write(col.ColumnName + "\t");
}
Console.WriteLine("\n=== 数据内容 ===");
// 输出所有行数据
foreach (DataRow row in dataTable.Rows)
{
foreach (var cellValue in row.ItemArray)
{
Console.Write(cellValue + "\t");
}
Console.WriteLine();
}
}
}
}
2. 进阶用法:自定义转换范围与参数
ExportDataTable 提供了多个重载方法,可满足"指定转换范围、是否导出空值"等个性化需求,以下是常用进阶场景:
场景1:只转换指定行/列范围(如第2-10行、第1-3列)
csharp
// 获取指定范围的单元格(行/列索引均从1开始)
CellRange targetRange = sheet.Range["A2:C10"];
// 转换指定范围,且不将第一行作为列名(因范围从第2行开始)
DataTable dataTable = sheet.ExportDataTable(targetRange, false);
场景2:导出时计算公式值
csharp
// 重载方法:第三个参数控制是否计算公式值。
// 参数说明:
// range:转换范围
// exportColumnNames:是否将第一行作为列名
// computedFormulaValue:是否计算公式值
DataTable dataTable = sheet.ExportDataTable(
sheet.AllocatedRange,
true,
true
);
通过本文的 ExportDataTable 方法,一行代码即可完成核心Excel 到 DataTable 的转换,无需手动遍历单元格。