如何在 C# 中讀取帶有逗號的 CSV 文件
為什麼 .NET 開發者需要更好的 CSV 解決方案?
CSV 檔案在無數 .NET 應用程式中推動了資料交換。 從財務報表到庫存系統,您只需幾行程式碼即可程式化地建立 CSV 檔案。 雖然像CsvHelper這樣的程式庫涵蓋了基本的 CSV 操作,現代開發者面臨著複雜的情境:轉換帶公式的 Excel 活頁簿,保留匯出期間的資料型別,處理企業級試算表工作流程。 IronXL通過結合強大的 CSV 寫入和全面的Excel 功能來解決這些挑戰,在單一程式庫中輕鬆管理多欄位,無需依賴其他程式庫,遵循RFC 4180 標準。
這使得它對於構建自定義 .NET CSV writer 或支持多欄位的 .NET CSV parser 且具備僅影響處理中的列的功能行,並且能自動推斷分隔符的開發人員非常理想。
開始使用 IronXL
安裝 IronXL 只需透過 NuGet Package Manager 點擊幾下即可完成:
Install-Package IronXL.Excel
安裝完成後,新增 IronXL 命名空間即可開始編寫 CSV 檔案並有效地處理分隔數值:
using IronXL;
class Program
{
static void Main(string[] args)
{
// Create a new workbook and worksheet
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("data");
// Add headers
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Quantity";
workSheet["C1"].Value = "Price";
// Add data
workSheet["A2"].Value = "Widget";
workSheet["B2"].Value = 100;
workSheet["C2"].Value = 19.99;
// Save as CSV with comma delimiter
workBook.SaveAsCsv("inventory.csv", ",");
}
}
using IronXL;
class Program
{
static void Main(string[] args)
{
// Create a new workbook and worksheet
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("data");
// Add headers
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Quantity";
workSheet["C1"].Value = "Price";
// Add data
workSheet["A2"].Value = "Widget";
workSheet["B2"].Value = 100;
workSheet["C2"].Value = 19.99;
// Save as CSV with comma delimiter
workBook.SaveAsCsv("inventory.csv", ",");
}
}
Imports IronXL
Class Program
Shared Sub Main(args As String())
' Create a new workbook and worksheet
Dim workBook As WorkBook = WorkBook.Create()
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("data")
' Add headers
workSheet("A1").Value = "Product"
workSheet("B1").Value = "Quantity"
workSheet("C1").Value = "Price"
' Add data
workSheet("A2").Value = "Widget"
workSheet("B2").Value = 100
workSheet("C2").Value = 19.99
' Save as CSV with comma delimiter
workBook.SaveAsCsv("inventory.csv", ",")
End Sub
End Class
此簡單的控制台測試程式展示了如何直接從您的 C# 程式碼寫入 CSV 內容,建立包含我們資料的Workbook物件。 此SaveAsCsv 方法使用預設分隔符(逗號),但允許您根據不同區域可選地定義 sep; 這在處理小數點分隔符或替代欄位分隔符字元時特別有用。 在內部,sep 為輸出緩衝區的陣列分配進行處理。 之前提到的 sep 參數允許您定義此字元。
我們還展示了如何提供靜態進入點,並展示如何使用靜態定義的資源池進行有效的記憶體管理,從而即使在多行中也能達到高效的效能。
進階 CSV 檔案建立技術

進階 CSV 檔案建立技術
將 Excel 活頁簿轉換為 CSV
IronXL 出色地將現有Excel 檔案轉換為 CSV,計算公式並保留資料完整性。 在編寫同時包含表頭行和動態生成資料的 CSV 檔案時這是必要的。
// Load an Excel file with formulas and formatting
WorkBook workBook = WorkBook.Load("financial_report.xlsx");
// IronXL evaluates formulas before export
workBook.EvaluateAll();
// Export to CSV - each worksheet creates a separate CSV file
workBook.SaveAsCsv("report.csv", ",");
// Creates: report.Sheet1.csv, report.Sheet2.csv, etc.
// Load an Excel file with formulas and formatting
WorkBook workBook = WorkBook.Load("financial_report.xlsx");
// IronXL evaluates formulas before export
workBook.EvaluateAll();
// Export to CSV - each worksheet creates a separate CSV file
workBook.SaveAsCsv("report.csv", ",");
// Creates: report.Sheet1.csv, report.Sheet2.csv, etc.
' Load an Excel file with formulas and formatting
Dim workBook As WorkBook = WorkBook.Load("financial_report.xlsx")
' IronXL evaluates formulas before export
workBook.EvaluateAll()
' Export to CSV - each worksheet creates a separate CSV file
workBook.SaveAsCsv("report.csv", ",")
' Creates: report.Sheet1.csv, report.Sheet2.csv, etc.
在轉換多表活頁簿時,IronXL 自動為每個工作表生成單獨的 CSV 檔案。 公式計算在匯出前執行,以確保最終 CSV 輸出中資料的準確性。 但這不僅僅是唯一的一個功能。 預設自動推斷的分隔符確保了跨區域的相容性,多行或多列能夠無縫處理。
您還可以在預設支持的分隔符各有不同的動態環境中使用可空的 sep。
輸出
首先,在這裡您可以看到從我們的多表 Excel 檔案生成的 CSV 檔案:

這是一個 Excel 表格與相應 CSV 檔案的範例比較:

將資料表(Datatable)匯出為 CSV
對於資料庫驅動的應用程式,IronXL 簡化了DataTable 匯出。 我們將 var 設置為 Datarow,而不是典型的引用 var v,以便更加清晰。
// Assume dataTable contains query results
DataTable dataTable = GetSalesData();
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("sales");
// Import DataTable directly
var row = 1;
foreach (var dataRow in dataTable.Rows)
{
for (var col = 0; col < dataTable.Columns.Count; col++)
{
workSheet.SetCellValue(row, col, dataRow[col].ToString());
}
row++;
}
// Export with custom delimiter if needed
workBook.SaveAsCsv("sales_data.csv", ";");
// Assume dataTable contains query results
DataTable dataTable = GetSalesData();
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("sales");
// Import DataTable directly
var row = 1;
foreach (var dataRow in dataTable.Rows)
{
for (var col = 0; col < dataTable.Columns.Count; col++)
{
workSheet.SetCellValue(row, col, dataRow[col].ToString());
}
row++;
}
// Export with custom delimiter if needed
workBook.SaveAsCsv("sales_data.csv", ";");
Imports System.Data
' Assume dataTable contains query results
Dim dataTable As DataTable = GetSalesData()
Dim workBook As WorkBook = WorkBook.Create()
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("sales")
' Import DataTable directly
Dim row As Integer = 1
For Each dataRow As DataRow In dataTable.Rows
For col As Integer = 0 To dataTable.Columns.Count - 1
workSheet.SetCellValue(row, col, dataRow(col).ToString())
Next
row += 1
Next
' Export with custom delimiter if needed
workBook.SaveAsCsv("sales_data.csv", ";")
在匯入過程中,從 dataTable.Rows 集合中每一行的水平資料集變為工作表中的新列。 IronXL 在轉換過程中保留資料型別,這意味著數字保持數值,日期保持格式,而文字則能正確處理特殊字元而不需額外配置。
輸出
在這裡,您可以看到我們的模擬資料源旁邊的輸出 CSV 檔案:

IronXL 與 CsvHelper:CSV 檔案撰寫的全面比較
考慮這個顯示 CSV 解析和撰寫工作流的員工資料匯出情境。
CsvHelper 實現:
using (var writer = new StreamWriter("employees.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(employees);
}
using (var writer = new StreamWriter("employees.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(employees);
}
Imports System.Globalization
Imports System.IO
Imports CsvHelper
Using writer As New StreamWriter("employees.csv")
Using csv As New CsvWriter(writer, CultureInfo.InvariantCulture)
csv.WriteRecords(employees)
End Using
End Using
IronXL 實現:
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("employees");
// Add data with automatic type handling
int rowIndex = 1;
foreach (var emp in employees)
{
workSheet[$"A{rowIndex}"].Value = emp.Name;
workSheet[$"B{rowIndex}"].Value = emp.Salary;
workSheet[$"C{rowIndex}"].Value = emp.StartDate;
rowIndex++;
}
workBook.SaveAsCsv("employees.csv", ",");
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("employees");
// Add data with automatic type handling
int rowIndex = 1;
foreach (var emp in employees)
{
workSheet[$"A{rowIndex}"].Value = emp.Name;
workSheet[$"B{rowIndex}"].Value = emp.Salary;
workSheet[$"C{rowIndex}"].Value = emp.StartDate;
rowIndex++;
}
workBook.SaveAsCsv("employees.csv", ",");
Dim workBook As WorkBook = WorkBook.Create()
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("employees")
' Add data with automatic type handling
Dim rowIndex As Integer = 1
For Each emp In employees
workSheet($"A{rowIndex}").Value = emp.Name
workSheet($"B{rowIndex}").Value = emp.Salary
workSheet($"C{rowIndex}").Value = emp.StartDate
rowIndex += 1
Next
workBook.SaveAsCsv("employees.csv", ",")
|
功能 |
CsvHelper |
IronXL |
|---|---|---|
|
基本 CSV 撰寫 |
✓ |
✓ |
|
Excel 到 CSV 轉換 |
✗ |
✓ |
|
公式計算 |
✗ |
✓ |
|
多表處理 |
✗ |
✓ |
|
資料型別保留 |
手動 |
自動 |
|
Excel 格式支持 |
✗ |
XLSX, XLS, XLSM |
|
不需 Microsoft Office |
✓ |
✓ |
雖然 CsvHelper 高效地處理了簡單的撰寫欄位操作,IronXL 提供了在多行、插值字串和動態程式碼生成場景中工作的靈活性,甚至允許使用 ref 結構連結等結構進行低層次優化。
開發人員可以枚舉符合特定標準的行,管理預設自動推斷的分隔符,甚至使用簡單的控制台程式進行測試,這些程式揭示了行特定功能,並僅顯示每個條目的鍵以便於除錯。
企業級功能與最佳實踐
IronXL 的 SaveAsCsv 方法包括企業級功能:
- 自定義分隔符:支持逗號、分號、製表符或任何字元(可以用分隔符 sep 覆蓋預設分隔符)
- 編碼選項:UTF-8、UTF-16 和自定義編碼
- 公式計算:在匯出前計算 Excel 公式
- 跨平台支持:相容 Windows、Linux 和 macOS
開發人員還可以應用擴展方法來存取多欄,以便於高效處理,或者在需要文字換行時撰寫跨多行的 CSV 行。
常見問題與解決方案
在處理 CSV 匯出時,開發人員經常遇到這些挑戰:
- 資料中的特殊字元:IronXL 自動轉義號碼、逗點和換行符
- 大檔案處理:使用工作表範圍將資料分塊處理,
- 編碼問題:為國際字元指定 UTF-8 編碼
- 缺少資料型別:IronXL 預設保留數字和日期格式
如需詳細的故障排查,請存取IronXL 的 CSV 文件、API 參考和支援資源。
立即開始構建您的 CSV 寫入器
IronXL 將 CSV 撰寫從解析挑戰轉變為一項簡單的操作。 通過將 CSV 功能與 Excel 活頁簿支持、公式計算和自動型別處理相結合,消除了管理多個程式庫或手動資料轉換的複雜性。
準備簡化您的 CSV 工作流程了嗎? 開始您的免費試用從 $liteLicense 開始。
常見問題
.NET 開發者為何需要更好的 CSV 解決方案?
.NET 開發者在處理包含嵌入逗號或特殊字元的 CSV 文件時經常遇到挑戰。IronXL 提供先進的功能來輕鬆處理這些複雜情況,提高資料解析的準確性和效率。
IronXL如何處理CSV文件中的帶引號字段?
IronXL 設計用來準確解析帶有引用字段的 CSV 文件,確保包含逗號或其他特殊字元的資料被正確解讀和處理,無誤。
在 C# 中使用 IronXL 進行 CSV 解析的好處是什麼?
IronXL 提供強大的 CSV 文件解析功能,包括支援特殊字元、引用字段和大資料集。這增強了可靠性並減少開發者在除錯 CSV 相關問題上花費的時間。
IronXL 能夠處理帶有特殊字元的 CSV 文件嗎?
可以,IronXL 能夠處理帶有各種特殊字元的 CSV 文件,確保所有資料被準確讀取和處理,無解析錯誤或資料遺失。
IronXL與其他CSV解析庫有何不同?
IronXL 擅長處理複雜的 CSV 情境,例如嵌入逗號和引用字段,容易處理。其使用者友好的 API 和全面的功能使其成為使用 C# 處理 CSV 資料的開發者的首選。
是否可以使用 IronXL 處理大型 CSV 文件?
IronXL 經過性能優化,能夠高效處理大型 CSV 文件,適合處理龐大資料集的應用程式。
IronXL 如何提高 CSV 資料處理的可靠性?
IronXL 通過準確處理嵌入逗號和特殊字元的 CSV 文件來提高可靠性,減少資料解析過程中的錯誤可能性,確保資料完整性。




