使用 C# 高效读取 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文件读取结果


二、进阶 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 验证结果:
CSV转DataTable

场景 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();
        }
    }
}

控制台输出效果:
读取CSV指定行/列


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

==============================================

相关资源:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值