C# 中 Excel 转 DataTable 的技术实现
<p>在企业级 .NET 开发场景中,Excel 文件与内存数据集(如 DataTable)的格式互转是高频技术需求。DataTable 作为 .NET 框架中通用的内存数据结构,常被用于承接 Excel 数据并完成后续的数据验证、持久化、展示等操作。本文聚焦于 .NET 环境下,如何通过第三方类库实现 Excel 文件到 DataTable 的高效转换,核心讲解数据转换的技术实现逻辑与关键方法的使用。</p><p>在开始前可通过NuGet包管理器快速安装 Free Spire.XLS for .NET 免费库,具体步骤如下:</p>
<ol>
<li>右键项目 → 管理 NuGet 程序包;</li>
<li>搜索对应类库名称并安装最新稳定版;</li>
<li>或在 Package Manager Console 执行命令:</li>
</ol>
<pre><code class="language-bash">Install-Package FreeSpire.XLS
</code></pre>
<blockquote>
<p>注意:该类库的免费版本存在数据量使用限制,适用于小规模数据处理场景。</p>
</blockquote>
<hr>
<h2 id="核心实现excel-转-datatable">核心实现:Excel 转 DataTable</h2>
<h3 id="1-基础实现完整转换流程">1. 基础实现:完整转换流程</h3>
<p>以下代码实现 Excel 文件到 DataTable 的核心转换逻辑,覆盖 “加载 Excel 文件 → 选取目标工作表 → 调用封装方法完成数据转换 → 验证转换结果” 全流程,可直接用于基础转换场景:</p>
<pre><code class="language-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;
// 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();
}
}
}
}
</code></pre>
<h3 id="2-进阶用法自定义转换范围与参数">2. 进阶用法:自定义转换范围与参数</h3>
<p><code>ExportDataTable</code> 提供多个重载方法,可满足“指定转换范围、是否导出计算公式值”等个性化开发需求,以下是两类典型的进阶使用场景:</p>
<h4 id="场景1指定行列范围转换如第2-10行第1-3列">场景1:指定行/列范围转换(如第2-10行、第1-3列)</h4>
<pre><code class="language-csharp">// 获取指定范围的单元格(行/列索引均从1开始)
CellRange targetRange = sheet.Range["A2:C10"];
// 转换指定范围,且不将第一行作为列名(因范围从第2行开始)
DataTable dataTable = sheet.ExportDataTable(targetRange, false);
</code></pre>
<h4 id="场景2转换时计算公式值">场景2:转换时计算公式值</h4>
<pre><code class="language-csharp">// 重载方法:第三个参数控制是否计算公式值。
// 参数说明:
// range:转换范围
// exportColumnNames:是否将第一行作为列名
// computedFormulaValue:是否计算公式值
DataTable dataTable = sheet.ExportDataTable(
sheet.AllocatedRange,
true,
true
);
</code></pre>
<hr>
<p>在.NET开发中,通过 <code>ExportDataTable</code> 方法可实现 Excel 数据到 DataTable 的批量转换,该方法通过封装底层的单元格遍历、数据类型映射逻辑,替代了手动逐单元格读取数据的方式,是 Excel 与 DataTable 互转场景下的高效实现方案。</p><br><br>
来源:https://www.cnblogs.com/jazz-z/p/19690580
頁:
[1]