C#實(shí)現(xiàn)高效讀取CSV文件的完整指南
CSV(逗號(hào)分隔值)文件作為一種輕量級(jí)的數(shù)據(jù)交換格式,在數(shù)據(jù)處理和導(dǎo)入導(dǎo)出場(chǎng)景中廣泛應(yīng)用。雖然 .NET Framework 提供了多種原生處理 CSV 的方式,但使用專門的庫(kù)可以簡(jiǎn)化代碼并提高開(kāi)發(fā)效率。Free Spire.XLS for .NET 是一個(gè)強(qiáng)大的免費(fèi)庫(kù),不僅支持 Excel 文件操作,還能輕松處理 CSV 文件。
一、基本 CSV 讀取操作
1. 準(zhǔn)備 CSV 文件
假設(shè)我們有 students.csv 文件,內(nèi)容如下:
學(xué)號(hào),姓名,語(yǔ)文,數(shù)學(xué),英語(yǔ)
1001,張三,85,90,88
1002,李四,92,85,90
1003,王五,78,88,85
2. 安裝 Free Spire.XLS
推薦通過(guò) NuGet 包管理器安裝:
Install-Package FreeSpire.XLS
或在 Visual Studio 中右鍵項(xiàng)目 → 管理 NuGet 程序包 → 搜索 FreeSpire.XLS → 安裝。
需注意,免費(fèi)版有篇幅限制,適用于個(gè)人或小型項(xiàng)目
3. C# 示例代碼:讀取整個(gè) CSV 文件
using Spire.Xls;
class Program
{
static void Main(string[] args)
{
// 創(chuàng)建 Workbook 實(shí)例
Workbook workbook = new Workbook();
// 加載 CSV 文件
// 參數(shù)說(shuō)明:文件名,分隔符,起始行,起始列
workbook.LoadFromFile("student.csv", ",", 1, 1);
// 獲取第一個(gè)工作表
Worksheet sheet = workbook.Worksheets[0];
// 獲取使用的行數(shù)和列數(shù)
int rowCount = sheet.LastRow;
int colCount = sheet.LastColumn;
Console.WriteLine($"文件包含 {rowCount} 行,{colCount} 列數(shù)據(jù)");
Console.WriteLine("==============================");
// 遍歷所有數(shù)據(jù)并輸出
for (int row = 1; row <= rowCount; row++)
{
for (int col = 1; col <= colCount; col++)
{
Console.Write(sheet.Range[row, col].Value + "\t");
}
Console.WriteLine();
}
}
}
關(guān)鍵說(shuō)明: 除逗號(hào)外,支持制表符(\t)、分號(hào)(;)等分隔符,只需修改 LoadFromFile 方法中的第二個(gè) separator 參數(shù)。
CSV 讀取結(jié)果:

二、進(jìn)階 CSV 讀取技巧
場(chǎng)景 1:讀取為 DataTable
將 CSV 文件完整讀取到 DataTable,方便后續(xù)數(shù)據(jù)處理(如篩選、入庫(kù)、展示)。
using System.Data;
using Spire.Xls;
namespace CsvReadDemo
{
class Program
{
static void Main(string[] args)
{
// 1. 創(chuàng)建Workbook實(shí)例(Free Spire.XLS將CSV視為特殊的Excel工作簿)
Workbook workbook = new Workbook();
// 2. 加載CSV文件
workbook.LoadFromFile("student.csv", ",", 1, 1);
// 3. 獲取第一個(gè)工作表(CSV文件對(duì)應(yīng)一個(gè)工作表)
Worksheet worksheet = workbook.Worksheets[0];
// 4. 將工作表數(shù)據(jù)導(dǎo)出到DataTable
DataTable dataTable = worksheet.ExportDataTable();
// 5. 遍歷輸出數(shù)據(jù)(驗(yàn)證讀取結(jié)果)
Console.WriteLine("CSV文件內(nèi)容:");
// 輸出列名
foreach (DataColumn column in dataTable.Columns)
{
Console.Write(column.ColumnName + "\t");
}
Console.WriteLine();
// 輸出行數(shù)據(jù)
foreach (DataRow row in dataTable.Rows)
{
foreach (var cellValue in row.ItemArray)
{
Console.Write(cellValue.ToString() + "\t");
}
Console.WriteLine();
}
// 釋放資源
workbook.Dispose();
}
}
}
代碼說(shuō)明:
- CSV 文件會(huì)被解析為 Excel 工作表,通過(guò)
ExportDataTable()可直接轉(zhuǎn)為 DataTable,無(wú)需手動(dòng)解析每行每列; - 若 CSV 第一行是列名,
ExportDataTable()默認(rèn)將第一行作為列名,后續(xù)行作為數(shù)據(jù)行。
Datable 驗(yàn)證結(jié)果:

場(chǎng)景 2:讀取特定行和列
若只需讀取 CSV 的部分?jǐn)?shù)據(jù)(如第 5 行、第 3 列,或指定行列范圍),可直接通過(guò)工作表的 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開(kāi)始)
string cellValue = worksheet.Range[3, 2].Text;
Console.WriteLine("第3行第2列的值:" + cellValue);
// 2. 讀取指定行(第4行所有數(shù)據(jù))
Console.WriteLine("\n第4行所有數(shù)據(jù):");
for (int col = 1; col <= worksheet.LastColumn; col++)
{
Console.Write(worksheet.Range[4, col].Text + "\t");
}
// 3. 讀取指定列(第1列所有數(shù)據(jù))
Console.WriteLine("\n\n第1列所有數(shù)據(jù):");
for (int row = 1; row <= worksheet.LastRow; row++)
{
Console.WriteLine(worksheet.Range[row, 1].Text);
}
workbook.Dispose();
}
}
}
控制臺(tái)輸出效果:

Free Spire.XLS for .NET 通過(guò)封裝好的 API,讓 CSV 讀取變得簡(jiǎn)單高效。本文覆蓋了基礎(chǔ)讀取、DataTable轉(zhuǎn)換、指定行列讀取等核心場(chǎng)景,滿足大部分業(yè)務(wù)需求。除了讀取,F(xiàn)ree Spire.XLS 還支持 CSV 文件的寫入、格式修改、轉(zhuǎn)為 Excel 等多種操作。
到此這篇關(guān)于C#實(shí)現(xiàn)高效讀取CSV文件的完整指南的文章就介紹到這了,更多相關(guān)C#讀取CSV內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#子窗體獲取父窗體TextBox框的值實(shí)現(xiàn)方式
文章描述了在C#中通過(guò)構(gòu)造函數(shù)和公共屬性兩種方法實(shí)現(xiàn)窗體間傳遞數(shù)據(jù)的過(guò)程,父窗體通過(guò)按鈕點(diǎn)擊事件獲取子窗體的文本框值,并通過(guò)構(gòu)造函數(shù)或公共屬性將值傳遞給子窗體,子窗體在加載時(shí)接收并處理傳遞的值,顯示在文本框中2025-10-10
WPF實(shí)現(xiàn)背景燈光隨鼠標(biāo)閃動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了WPF實(shí)現(xiàn)背景燈光隨鼠標(biāo)閃動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08
C#對(duì)桌面應(yīng)用程序自定義鼠標(biāo)光標(biāo)
這篇文章介紹了C#對(duì)桌面應(yīng)用程序自定義鼠標(biāo)光標(biāo)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
C#中parallel.foreach實(shí)現(xiàn)多線程處理
Parallel.ForEach方法是C#中的一個(gè)并行循環(huán)方法,它可以并行地對(duì)一個(gè)集合進(jìn)行迭代操作,本文主要介紹了C#中parallel.foreach實(shí)現(xiàn)多線程處理,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02
C#使用FolderBrowserDialog類實(shí)現(xiàn)選擇打開(kāi)文件夾方法詳解
這篇文章主要介紹了C#選擇文件夾/打開(kāi)文件夾/瀏覽文件夾等代碼方法,大家參考使用2013-11-11
C#中面向?qū)ο缶幊虣C(jī)制之繼承學(xué)習(xí)筆記
這篇文章主要介紹了C#中面向?qū)ο缶幊虣C(jī)制之繼承學(xué)習(xí)筆記,本文給出一個(gè)簡(jiǎn)單子實(shí)例講解C#中的繼承,并講解了一些C#繼承的知識(shí)技巧,需要的朋友可以參考下2015-01-01

