C#实现将Excel表格转换为DataTable

 更新时间:2026年01月21日 15:29:11   作者:m5655bj  
在企业级开发中,Excel 与数据库 / 内存数据集的互转是高频需求,DataTable 作为.NET 中通用的内存数据结构,常被用于承接 Excel 数据进行后续处理,下面我们就来看看如何使用C#实现二者间的转换吧

在企业级开发中,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 执行命令:

Install-Package FreeSpire.XLS

二、核心实现:Excel 转 DataTable

1. 将指定工作表转换为 DataTable 内存数据集

以下代码实现最核心的转换逻辑,包含 “加载 Excel→选取目标工作表→核心数据转DataTable→验证并输出结果” 完整流程:

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列)

// 获取指定范围的单元格(行/列索引均从1开始)
CellRange targetRange = sheet.Range["A2:C10"];
// 转换指定范围,且不将第一行作为列名(因范围从第2行开始)
DataTable dataTable = sheet.ExportDataTable(targetRange, false);

场景2:导出时计算公式值

// 重载方法:第三个参数控制是否计算公式值。
// 参数说明:
// range:转换范围
// exportColumnNames:是否将第一行作为列名
// computedFormulaValue:是否计算公式值
DataTable dataTable = sheet.ExportDataTable(
    sheet.AllocatedRange, 
    true,  
    true
);

通过本文的 ExportDataTable 方法,一行代码即可完成核心Excel 到 DataTable 的转换,无需手动遍历单元格。

到此这篇关于C#实现将Excel表格转换为DataTable的文章就介绍到这了,更多相关C# Excel转DataTable内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#开发Windows UWP系列之对话框MessageDialog和ContentDialog

    C#开发Windows UWP系列之对话框MessageDialog和ContentDialog

    这篇文章介绍了C#开发Windows UWP系列之对话框MessageDialog和ContentDialog,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • C#获取DICOM图像像素的像素值的代码详解

    C#获取DICOM图像像素的像素值的代码详解

    DICOM即医学数字成像和通信,是医学图像和相关信息的国际标准(ISO 12052),它定义了质量能满足临床需要的可用于数据交换的医学图像格式,这篇文章主要介绍了C#获取DICOM图像像素的像素值的方法,需要的朋友可以参考下
    2024-07-07
  • C# 7.0 使用下划线忽略使用的变量的原因分析

    C# 7.0 使用下划线忽略使用的变量的原因分析

    这篇文章主要介绍了C# 7.0 使用下划线忽略使用的变量的原因浅析,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-10-10
  • C#程序启动项的设置方法

    C#程序启动项的设置方法

    这篇文章主要为大家详细介绍了C#程序启动项的设置方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • C#中闭包概念讲解

    C#中闭包概念讲解

    这篇文章主要介绍了C#中闭包概念讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C#控制台实现飞行棋小游戏

    C#控制台实现飞行棋小游戏

    这篇文章主要为大家详细介绍了C#控制台实现飞行棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C#反射机制介绍

    C#反射机制介绍

    这篇文章介绍了C#的反射机制,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • unity实现鼠标跟随(ITween)

    unity实现鼠标跟随(ITween)

    这篇文章主要为大家详细介绍了unity实现鼠标跟随,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C# 判断字符为空的6种方法的效率实测对比

    C# 判断字符为空的6种方法的效率实测对比

    本文主要介绍了C#中判断字符是否为空的方法,并实测对比各种方法的执行效率,最后推荐大家使用IsNullOrEmpty,效率和易用性比较均衡。
    2016-05-05
  • C#中流的使用和分类

    C#中流的使用和分类

    这篇文章介绍了C#中流的使用和分类,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07

最新评论