如何使用 C# 讀取包含逗號資料的 CSV 文件
CSV檔案看起來很簡單,直到您的資料中包含逗號 -- 突然間,"Smith, John"變成兩個不同的字段,地址在每個逗號處分開,並且精心結構的資料變成混亂。 雖然基本的String.Split(',')方法無法用於現實世界的CSV資料,但IronXL提供了一種可靠的解決方案,可以自動處理這些複雜情況。
為什麼逗號會破壞CSV解析?
CSV(逗號分隔值)文件使用逗號作為列之間的分隔符,當資料本身包含逗號時,就會產生固有的衝突。 RFC 4180標準通過要求包含逗號的字段用雙引號括起來來解決這個問題。 如果處理不當,簡單的地址如"123 Main St, Suite 400, New York"會分成三個不同的字段,而不是保持為一個。
傳統的CSV解析方法失敗,因為它們無法識別引號中或字串值中的逗號的上下文。 應用於字串行的基本分割方法無法解釋引號,導致表格資料損壞和資料結構無效。 這個問題影響無數商業場景:客戶地址、產品描述、財務資料和Excel導入都包含常見的逗號資料。 甚至Microsoft的文件也承認帶有特殊字元的CSV解析的複雜性。
當您處理現實世界的資料集時,這個問題尤其明顯。 考慮一個包含產品名稱的CSV文件,如"Hammer, 16oz, Steel-Head"或客戶記錄中有像"Johnson, Jr., Robert A."這樣的名字 -- 這些模式會立即破壞簡單的解析器。 財務資料是另一個常見的陷阱:像"1,234.56"這樣用千分位分隔的貨幣金額,對於簡單的逗號分割例程來說,看起來像是兩個不同的值。
了解為什麼逗號會破壞CSV解析是選擇一個正確處理RFC 4180引號標準的解決方案的第一步。 正確的程式庫消除了需要手動解決方案、正則表達式或自定義狀態機解析器的必要性。
您如何安裝CSV程式庫?
通過NuGet Package Manager安裝IronXL只需幾秒鐘。 您可以使用Package Manager Console或.NET CLI:
Install-Package IronXL.Excel
安裝後,該程式庫立即在您的.NET 10專案中可用。 IronXL獨立運行,無需在主機上安裝Microsoft Office或Excel -- 這在無法獲取Office許可的伺服器端和雲端部署中是一個重要優勢。
安裝後,將IronXL命名空間加入到您的文件中,您就可以準備載入CSV資料了。 該程式庫目標.NET Framework 4.6.2及更高版本,以及所有.NET Core、.NET 5、6、7、8和10版本,使其相容舊系統和現代應用程式堆疊。
驗證安裝
新增套件後,通過在您的專案中運行快速導入測試來驗證安裝是否正常。 NuGet套件包括Windows、Linux和macOS的所有必要的本機二進制文件,因此不需要額外的安裝步驟。 對於基於Docker的部署,該套件在目標平台上自動解析本機依賴項。
程式庫如何讀取含有內嵌逗號的CSV文件?
IronXL處理CSV資料中的特殊字元時,允許您在載入分隔文件時指定文件編碼和分隔符。該程式庫根據RFC 4180標準自動檢測和正確解析帶引號的字串值,免去自訂迴圈邏輯或手動解析程式碼的必要。
讀取CSV資料的核心方法是WorkBook.LoadCSV(),它接受文件路徑以及可選的文件格式、分隔符和編碼參數。 這是讀取具有嵌入逗號的CSV文件的最簡單方法:
using IronXL;
// Load CSV with automatic comma handling
WorkBook workbook = WorkBook.LoadCSV("data.csv",
fileFormat: ExcelFileFormat.XLSX,
listDelimiter: ",");
// Access the parsed data
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Save as Excel if needed
workbook.SaveAs("output.xlsx");
using IronXL;
// Load CSV with automatic comma handling
WorkBook workbook = WorkBook.LoadCSV("data.csv",
fileFormat: ExcelFileFormat.XLSX,
listDelimiter: ",");
// Access the parsed data
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Save as Excel if needed
workbook.SaveAs("output.xlsx");
Imports IronXL
' Load CSV with automatic comma handling
Dim workbook As WorkBook = WorkBook.LoadCSV("data.csv", fileFormat:=ExcelFileFormat.XLSX, listDelimiter:=",")
' Access the parsed data
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
' Save as Excel if needed
workbook.SaveAs("output.xlsx")
LoadCSV 方法智能地處理引號和CSV字串,確保每個欄位值保持完整,無論是否有嵌入的逗號。 有關使用CSV文件的更多詳細資訊,請參閱官方IronXL CSV解析教程。
瞭解輸出
載入後,CSV資料會映射到WorkSheet物件中,每一行和列都對應於原始的CSV結構。 包含逗號的帶引號字段顯示為單一的單元格值 -- 就像在源文件中一樣。
下圖顯示了左側的原始CSV文件與右側的輸出Excel文件的對比:

解析後存取單元格資料
一旦CSV載入到WorkSheet物件存取單元格資料。 每個單元格都提供型別化的存取器如IntValue,因此對於常見的資料型別,您不需要手動型別轉換。
您如何一步一步解析含有逗號的CSV文件?
以下完整範例演示了IronXL在資料字段本身包含逗號時的逗號分隔值處理。 此範例在内存中建立一個範例CSV,將其寫入磁碟,使用IronXL解析,並顯示每個字段值:
using IronXL;
using System;
using System.IO;
// Create sample CSV content with embedded commas
string csvContent = @"Name,Address,Description,Price
""Johnson, Mark"",""123 Main St, Apt 4B"",""High-quality, durable product"",""1,234.56""
""Smith Ltd."",""789 Corporate Blvd, Suite 200"",""Professional, reliable service"",""2,999.00""
""Williams & Co."",""456 Park Ave, Floor 12"",""Lightweight, portable design"",""899.99""";
// Write sample data to a CSV file
File.WriteAllText("sample.csv", csvContent);
// Load CSV with IronXL -- commas inside quoted fields are handled automatically
WorkBook workbook = WorkBook.LoadCSV("sample.csv",
fileFormat: ExcelFileFormat.XLSX,
listDelimiter: ",");
WorkSheet ws = workbook.DefaultWorkSheet;
// Read and display each parsed row
foreach (var row in ws.Rows)
{
if (row.RowNumber == 0) continue; // Skip header row
string name = row.Columns[0].StringValue;
string address = row.Columns[1].StringValue;
string description = row.Columns[2].StringValue;
decimal price = row.Columns[3].DecimalValue;
Console.WriteLine($"Customer: {name}");
Console.WriteLine($"Address: {address}");
Console.WriteLine($"Description: {description}");
Console.WriteLine($"Price: ${price:N2}");
Console.WriteLine();
}
// Export to Excel format for distribution
workbook.SaveAs("parsed_data.xlsx");
Console.WriteLine("Data exported to parsed_data.xlsx");
using IronXL;
using System;
using System.IO;
// Create sample CSV content with embedded commas
string csvContent = @"Name,Address,Description,Price
""Johnson, Mark"",""123 Main St, Apt 4B"",""High-quality, durable product"",""1,234.56""
""Smith Ltd."",""789 Corporate Blvd, Suite 200"",""Professional, reliable service"",""2,999.00""
""Williams & Co."",""456 Park Ave, Floor 12"",""Lightweight, portable design"",""899.99""";
// Write sample data to a CSV file
File.WriteAllText("sample.csv", csvContent);
// Load CSV with IronXL -- commas inside quoted fields are handled automatically
WorkBook workbook = WorkBook.LoadCSV("sample.csv",
fileFormat: ExcelFileFormat.XLSX,
listDelimiter: ",");
WorkSheet ws = workbook.DefaultWorkSheet;
// Read and display each parsed row
foreach (var row in ws.Rows)
{
if (row.RowNumber == 0) continue; // Skip header row
string name = row.Columns[0].StringValue;
string address = row.Columns[1].StringValue;
string description = row.Columns[2].StringValue;
decimal price = row.Columns[3].DecimalValue;
Console.WriteLine($"Customer: {name}");
Console.WriteLine($"Address: {address}");
Console.WriteLine($"Description: {description}");
Console.WriteLine($"Price: ${price:N2}");
Console.WriteLine();
}
// Export to Excel format for distribution
workbook.SaveAs("parsed_data.xlsx");
Console.WriteLine("Data exported to parsed_data.xlsx");
Imports IronXL
Imports System
Imports System.IO
' Create sample CSV content with embedded commas
Dim csvContent As String = "Name,Address,Description,Price" & vbCrLf &
"""Johnson, Mark"",""123 Main St, Apt 4B"",""High-quality, durable product"",""1,234.56""" & vbCrLf &
"""Smith Ltd."",""789 Corporate Blvd, Suite 200"",""Professional, reliable service"",""2,999.00""" & vbCrLf &
"""Williams & Co."",""456 Park Ave, Floor 12"",""Lightweight, portable design"",""899.99"""
' Write sample data to a CSV file
File.WriteAllText("sample.csv", csvContent)
' Load CSV with IronXL -- commas inside quoted fields are handled automatically
Dim workbook As WorkBook = WorkBook.LoadCSV("sample.csv",
fileFormat:=ExcelFileFormat.XLSX,
listDelimiter:=",")
Dim ws As WorkSheet = workbook.DefaultWorkSheet
' Read and display each parsed row
For Each row In ws.Rows
If row.RowNumber = 0 Then Continue For ' Skip header row
Dim name As String = row.Columns(0).StringValue
Dim address As String = row.Columns(1).StringValue
Dim description As String = row.Columns(2).StringValue
Dim price As Decimal = row.Columns(3).DecimalValue
Console.WriteLine($"Customer: {name}")
Console.WriteLine($"Address: {address}")
Console.WriteLine($"Description: {description}")
Console.WriteLine($"Price: ${price:N2}")
Console.WriteLine()
Next
' Export to Excel format for distribution
workbook.SaveAs("parsed_data.xlsx")
Console.WriteLine("Data exported to parsed_data.xlsx")
此範例展示了幾個關鍵功能:
- 自動引號處理: 像
"Johnson, Mark"這樣的字段在CSV資料中包含逗號時保持其完整性。 - 巢狀逗號: IronXL正確解析同一行中的多個含有逗號的字段,避免欄位之間的資料洩漏。
- 型別轉換: 型別化存取器如
DecimalValue簡化了對個別值的存取,無需手動解析。 - Excel導出: 您可以直接在同一工作流程中將CSV轉換為Excel格式以增強功能和共享。
下圖顯示了左側的範例CSV文件與右側的解析Excel輸出之間的對比:

有哪些進階CSV功能?
除了基本的逗號處理外,IronXL還提供了一整套CSV處理功能。 當您需要不同的分隔符、字元編碼或生產就緒的錯誤處理時,該圖書館提供靈活的選擇:
using IronXL;
using System;
using System.Text;
// Custom delimiter support -- semicolon-delimited files common in European locales
WorkBook semicolonData = WorkBook.LoadCSV("data.txt",
fileFormat: ExcelFileFormat.XLSX,
listDelimiter: ";");
// Handle UTF-8 encoding for international CSV files
WorkBook internationalData = WorkBook.LoadCSV("international.csv",
fileFormat: ExcelFileFormat.XLSX,
listDelimiter: ",",
encoding: Encoding.UTF8);
// Tab-delimited files (TSV format)
WorkBook tsvData = WorkBook.LoadCSV("export.tsv",
fileFormat: ExcelFileFormat.XLSX,
listDelimiter: "\t");
// Production-ready error handling for CSV with commas in data
try
{
WorkBook data = WorkBook.LoadCSV("file.csv",
fileFormat: ExcelFileFormat.XLSX,
listDelimiter: ",");
WorkSheet sheet = data.DefaultWorkSheet;
Console.WriteLine($"Loaded {sheet.Rows.Count()} rows successfully.");
}
catch (Exception ex)
{
Console.WriteLine($"CSV parsing error: {ex.Message}");
// Log and implement appropriate recovery logic
}
using IronXL;
using System;
using System.Text;
// Custom delimiter support -- semicolon-delimited files common in European locales
WorkBook semicolonData = WorkBook.LoadCSV("data.txt",
fileFormat: ExcelFileFormat.XLSX,
listDelimiter: ";");
// Handle UTF-8 encoding for international CSV files
WorkBook internationalData = WorkBook.LoadCSV("international.csv",
fileFormat: ExcelFileFormat.XLSX,
listDelimiter: ",",
encoding: Encoding.UTF8);
// Tab-delimited files (TSV format)
WorkBook tsvData = WorkBook.LoadCSV("export.tsv",
fileFormat: ExcelFileFormat.XLSX,
listDelimiter: "\t");
// Production-ready error handling for CSV with commas in data
try
{
WorkBook data = WorkBook.LoadCSV("file.csv",
fileFormat: ExcelFileFormat.XLSX,
listDelimiter: ",");
WorkSheet sheet = data.DefaultWorkSheet;
Console.WriteLine($"Loaded {sheet.Rows.Count()} rows successfully.");
}
catch (Exception ex)
{
Console.WriteLine($"CSV parsing error: {ex.Message}");
// Log and implement appropriate recovery logic
}
Imports IronXL
Imports System
Imports System.Text
' Custom delimiter support -- semicolon-delimited files common in European locales
Dim semicolonData As WorkBook = WorkBook.LoadCSV("data.txt",
fileFormat:=ExcelFileFormat.XLSX,
listDelimiter:=";")
' Handle UTF-8 encoding for international CSV files
Dim internationalData As WorkBook = WorkBook.LoadCSV("international.csv",
fileFormat:=ExcelFileFormat.XLSX,
listDelimiter:=",",
encoding:=Encoding.UTF8)
' Tab-delimited files (TSV format)
Dim tsvData As WorkBook = WorkBook.LoadCSV("export.tsv",
fileFormat:=ExcelFileFormat.XLSX,
listDelimiter:=vbTab)
' Production-ready error handling for CSV with commas in data
Try
Dim data As WorkBook = WorkBook.LoadCSV("file.csv",
fileFormat:=ExcelFileFormat.XLSX,
listDelimiter:=",")
Dim sheet As WorkSheet = data.DefaultWorkSheet
Console.WriteLine($"Loaded {sheet.Rows.Count()} rows successfully.")
Catch ex As Exception
Console.WriteLine($"CSV parsing error: {ex.Message}")
' Log and implement appropriate recovery logic
End Try
IronXL支持多種分隔符 -- 管道符、標籤、分號和任何單個字元 -- 處理多種字元編碼,並高效地處理任何大小的文件。 要處理複雜資料場景,請探索資料操作功能和企業功能,如密碼保護文件處理和公式計算。
使用不同的分隔符格式
許多系統使用逗號以外的分隔符導出資料。 歐洲語言應用程式經常使用分號,因為在這些區域,十進位分隔符本身就是逗號。 管道分隔的文件在舊系統和資料倉庫導出中很常見。 IronXL通過listDelimiter參數處理所有這些格式,您可以通過更改單個字元而不是重寫解析邏輯來在不同格式之間切換。
處理編碼與國際字元
字元編碼問題會導致難以檢測的微妙資料腐敗。 當CSV文件包含非ASCII字元 -- 帶重音的字母、CJK字元或貨幣符號 -- 指定正確的編碼可以防止亂碼輸出。 IronXL接受任何System.Text.Encoding實例,包括UTF-8、UTF-16、Latin-1和平台特定編碼。
為何專用圖書館比手動CSV解析表現更好?
IronXL獨立運行,沒有Microsoft Office依賴,這使得它非常適合於伺服器部署和雲應用程式。 與需要Office Interop的解決方案不同,IronXL可以運行於Windows、Linux和macOS上,並支持.NET Framework 4.6.2+和.NET Core/5/6/7/8/10+。
該圖書館通過智能處理打破簡單解析器的邊界情況來消除常見的CSV解析陷阱。 下表比較常見方法:
| 方法 | 處理含引號逗號 | 編碼支持 | Excel導出 | 生產就緒 |
|---|---|---|---|---|
| String.Split(',') | 否 | 否 | 否 | 否 |
| TextFieldParser (VB) | 是 | 有限的 | 否 | 局部 |
| CsvHelper (OSS) | 是 | 是 | 否 | 是 |
| IronXL | 是 | 是 | 是 | 是 |
無論您是處理具有貨幣格式的財務報告、具有國際字元的客戶資料還是具有特殊字元的系統日誌,IronXL都能在解析過程中維持資料的完整性。 根據Stack Overflow的討論,處理CSV字段中的逗號是最常碰到的解析挑戰之一 -- 而IronXL直接解決了這個問題。
性能特徵
IronXL在不一次載入整個文件進記憶體的情況下流式處理大型CSV文件,這使得它適合處理具有百萬行的文件。 該庫的記憶體效率設計意味著您可以在標準伺服器實例上運行CSV解析作業,而無需為大資料載荷配置額外記憶體。
對於公式計算和單元格樣式,IronXL在將CSV資料轉換為.xlsx格式時,保留完整的Excel相容性。 這很重要,因為下游使用者期望的是格式良好的Excel輸出,而不是原始的表格資料。
部署靈活性
由於IronXL無需依賴Microsoft Office,您可以將其部署到運行.NET的任何環境 -- 包括Linux容器、Azure Functions、AWS Lambda和本地Windows伺服器。 對於生產環境,IronXL提供企業應用需求的可靠性和支持結構,這得到了專業授權和持續更新的支持。
何時選擇全功能的試算表程式庫?
選擇合適的CSV圖書館取決於您的特定要求。 當您需要以下功能組合時,IronXL是最好的選擇:
- 需要轉換為Excel格式以用於報告或分發的CSV文件
- 處理由非ASCII字元或多字節編碼組成的國際CSV文件
- 构建在Windows、Linux和macOS上運行的應用程式,而不需要平台特定的程式碼
- 避免伺服器或雲環境中的Microsoft Office Interop依賴
- 存取其他試算表功能,例如單元格格式化、命名範圍和公式
對於只需要解析CSV的輕量級情況,可能只需一個專門構建的CSV專用庫。 但是,當CSV解析是包括Excel輸出在內的更廣泛資料處理流程中的一步時,IronXL消除了對多個依賴項的需求。
該圖書館的API參考詳細記錄了所有可用的方法和參數,使您容易地發現基本CSV載入之外的能力。 教學部分提供了常見工作流程(包括CSV解析、單元格操作和文件格式轉換)的逐步指南。
如何開始免費試用?
使用C#讀取嵌入逗號的CSV文件並不需要很複雜。 IronXL將這個挑戰轉化為清晰可靠的程式碼。 透過自動處理雙引號、逗號和帶引號的單元格,讓您專注於應用程式邏輯,而不是CSV解析的邊界情況。
開始的步驟簡單明了:
- 用
dotnet add package IronXL安裝NuGet套件 - 使用您的文件路徑和分隔符調用
WorkBook.LoadCSV() - 使用型別化存取器迭代行和列
- 可選的導出到
workbook.SaveAs()
開始免費試用,以便在您的環境中測試IronXL,然後再決定購買許可證。 試用期內,您可以完全存取所有功能30天。 當您準備好新產品部署時,購買符合您部署規模的許可證 -- 有適合個別開發人員、小型團隊和企業範圍使用的選擇。
常見問題
我如何在用 C# 讀取 CSV 文件時處理資料中的逗號?
IronXL 提供了一個強大的解決方案來讀取包含內嵌逗號的 CSV 文件。它自動管理引用欄位和特殊字元,確保您的資料在逗號上不會被拆分。
為什麼 String.Split(',') 在包含逗號的 CSV 文件中失效?
String.Split(',') 方法將每個逗號當作分隔符,這在資料本身包含逗號時會出現問題。IronXL 通過智能解析 CSV 文件,識別引用欄位並維持資料完整性,以解決這個問題。
在 C# 中使用 IronXL 進行 CSV 解析的優勢是什麼?
IronXL 簡化了解析 CSV 文件的過程,自動處理如內嵌逗號和引用欄位的複雜場景,節省了開發人員的時間,並降低了資料處理中可能的錯誤。
IronXL 能處理 CSV 文件中的其他特殊字元嗎?
是的,IronXL 旨在管理特殊字元和引用欄位,確保即使是最複雜的 CSV 文件也能準確解析。
IronXL 適用於大容量 CSV 文件嗎?
IronXL 能夠高效處理大型 CSV 文件,因為其優化的解析能力,能快速且精確地進行處理。




