C#实现高效读取CSV文件的完整指南

 更新时间:2025年12月07日 09:05:13   作者:Eiceblue  
CSV文件作为一种轻量级的数据交换格式,在数据处理和导入导出场景中广泛应用,下面我们就来看看如何使用Free Spire.XLS for .NET轻松处理 CSV吧

CSV(逗号分隔值)文件作为一种轻量级的数据交换格式,在数据处理和导入导出场景中广泛应用。虽然 .NET Framework 提供了多种原生处理 CSV 的方式,但使用专门的库可以简化代码并提高开发效率。Free Spire.XLS for .NET 是一个强大的免费库,不仅支持 Excel 文件操作,还能轻松处理 CSV 文件。

一、基本 CSV 读取操作

1. 准备 CSV 文件

假设我们有 students.csv 文件,内容如下:

学号,姓名,语文,数学,英语
1001,张三,85,90,88
1002,李四,92,85,90
1003,王五,78,88,85

2. 安装 Free Spire.XLS

推荐通过 NuGet 包管理器安装:

Install-Package FreeSpire.XLS

或在 Visual Studio 中右键项目 → 管理 NuGet 程序包 → 搜索 FreeSpire.XLS → 安装。

需注意,免费版有篇幅限制,适用于个人或小型项目

3. C# 示例代码:读取整个 CSV 文件

using Spire.Xls;
class Program
{
    static void Main(string[] args)
    {
        // 创建 Workbook 实例
        Workbook workbook = new Workbook();

        // 加载 CSV 文件
        // 参数说明:文件名,分隔符,起始行,起始列
        workbook.LoadFromFile("student.csv", ",", 1, 1);

        // 获取第一个工作表
        Worksheet sheet = workbook.Worksheets[0];

        // 获取使用的行数和列数
        int rowCount = sheet.LastRow;
        int colCount = sheet.LastColumn;

        Console.WriteLine($"文件包含 {rowCount} 行,{colCount} 列数据");
        Console.WriteLine("==============================");

        // 遍历所有数据并输出
        for (int row = 1; row <= rowCount; row++)
        {
            for (int col = 1; col <= colCount; col++)
            {
                Console.Write(sheet.Range[row, col].Value + "\t");
            }
            Console.WriteLine();
        }
    }
}

关键说明: 除逗号外,支持制表符(\t)、分号(;)等分隔符,只需修改 LoadFromFile 方法中的第二个 separator 参数。

CSV 读取结果:

二、进阶 CSV 读取技巧

场景 1:读取为 DataTable

将 CSV 文件完整读取到 DataTable,方便后续数据处理(如筛选、入库、展示)。

using System.Data;
using Spire.Xls;

namespace CsvReadDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1. 创建Workbook实例(Free Spire.XLS将CSV视为特殊的Excel工作簿)
            Workbook workbook = new Workbook();

            // 2. 加载CSV文件
            workbook.LoadFromFile("student.csv", ",", 1, 1);

            // 3. 获取第一个工作表(CSV文件对应一个工作表)
            Worksheet worksheet = workbook.Worksheets[0];

            // 4. 将工作表数据导出到DataTable
            DataTable dataTable = worksheet.ExportDataTable();

            // 5. 遍历输出数据(验证读取结果)
            Console.WriteLine("CSV文件内容:");
            // 输出列名
            foreach (DataColumn column in dataTable.Columns)
            {
                Console.Write(column.ColumnName + "\t");
            }
            Console.WriteLine();

            // 输出行数据
            foreach (DataRow row in dataTable.Rows)
            {
                foreach (var cellValue in row.ItemArray)
                {
                    Console.Write(cellValue.ToString() + "\t");
                }
                Console.WriteLine();
            }

            // 释放资源
            workbook.Dispose();
        }
    }
}

代码说明:

  • CSV 文件会被解析为 Excel 工作表,通过 ExportDataTable() 可直接转为 DataTable,无需手动解析每行每列;
  • 若 CSV 第一行是列名,ExportDataTable() 默认将第一行作为列名,后续行作为数据行。

Datable 验证结果:

场景 2:读取特定行和列

若只需读取 CSV 的部分数据(如第 5 行、第 3 列,或指定行列范围),可直接通过工作表的 Range[] 属性定位。

using Spire.Xls;

namespace CsvReadDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Workbook workbook = new Workbook();
            workbook.LoadFromFile("student.csv", ",", 1, 1);
            Worksheet worksheet = workbook.Worksheets[0];

            // 1. 读取指定单元格(第3行第2列,注意:行/列索引从1开始)
            string cellValue = worksheet.Range[3, 2].Text;
            Console.WriteLine("第3行第2列的值:" + cellValue);

            // 2. 读取指定行(第4行所有数据)
            Console.WriteLine("\n第4行所有数据:");
            for (int col = 1; col <= worksheet.LastColumn; col++)
            {
                Console.Write(worksheet.Range[4, col].Text + "\t");
            }

            // 3. 读取指定列(第1列所有数据)
            Console.WriteLine("\n\n第1列所有数据:");
            for (int row = 1; row <= worksheet.LastRow; row++)
            {
                Console.WriteLine(worksheet.Range[row, 1].Text);
            }

            workbook.Dispose();
        }
    }
}

控制台输出效果:

Free Spire.XLS for .NET 通过封装好的 API,让 CSV 读取变得简单高效。本文覆盖了基础读取、DataTable转换、指定行列读取等核心场景,满足大部分业务需求。除了读取,Free Spire.XLS 还支持 CSV 文件的写入、格式修改、转为 Excel 等多种操作。

到此这篇关于C#实现高效读取CSV文件的完整指南的文章就介绍到这了,更多相关C#读取CSV内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解C#如何控制多线程同步执行

    详解C#如何控制多线程同步执行

    使用Task类来控制多线程的同步执行,可应用于多任务分发执行后,这篇文章主要为大家详细介绍了C#如何通过Task类控制多线程同步执行,感兴趣的小伙伴可以了解下
    2023-12-12
  • C#子窗体获取父窗体TextBox框的值实现方式

    C#子窗体获取父窗体TextBox框的值实现方式

    文章描述了在C#中通过构造函数和公共属性两种方法实现窗体间传递数据的过程,父窗体通过按钮点击事件获取子窗体的文本框值,并通过构造函数或公共属性将值传递给子窗体,子窗体在加载时接收并处理传递的值,显示在文本框中
    2025-10-10
  • WPF实现背景灯光随鼠标闪动效果

    WPF实现背景灯光随鼠标闪动效果

    这篇文章主要为大家详细介绍了WPF实现背景灯光随鼠标闪动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • C#对桌面应用程序自定义鼠标光标

    C#对桌面应用程序自定义鼠标光标

    这篇文章介绍了C#对桌面应用程序自定义鼠标光标的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • C#中parallel.foreach实现多线程处理

    C#中parallel.foreach实现多线程处理

    Parallel.ForEach方法是C#中的一个并行循环方法,它可以并行地对一个集合进行迭代操作,本文主要介绍了C#中parallel.foreach实现多线程处理,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • C#获取文件相关信息的方法

    C#获取文件相关信息的方法

    这篇文章主要介绍了C#获取文件相关信息的方法,涉及C#中FileInfo类的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • C#使用FolderBrowserDialog类实现选择打开文件夹方法详解

    C#使用FolderBrowserDialog类实现选择打开文件夹方法详解

    这篇文章主要介绍了C#选择文件夹/打开文件夹/浏览文件夹等代码方法,大家参考使用
    2013-11-11
  • 浅析依赖注入框架Autofac的使用

    浅析依赖注入框架Autofac的使用

    Autofac是一款IOC框架,比起Spring.NET,Unity,Castle等等框架,它很轻量级且性能也很高,下面小编给大家介绍下依赖注入框架Autofac的使用。
    2015-07-07
  • C# Newtonsoft.Json用法详解

    C# Newtonsoft.Json用法详解

    本文主要介绍了C# Newtonsoft.Json用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • C#中面向对象编程机制之继承学习笔记

    C#中面向对象编程机制之继承学习笔记

    这篇文章主要介绍了C#中面向对象编程机制之继承学习笔记,本文给出一个简单子实例讲解C#中的继承,并讲解了一些C#继承的知识技巧,需要的朋友可以参考下
    2015-01-01

最新评论