跳過到頁腳內容
使用 IRONXL

如何在 C# 中讀取帶有逗號的 CSV 文件

為什麼.NET開發人員需要更好的CSV解決方案?

CSV文件驅動無數.NET應用程序之間的數據交換。 從財務報告到庫存系統,您可以通過編程方式在幾行代碼中創建CSV文件。 雖然像 CsvHelper 這樣的程式庫涵盖了基本的CSV操作,現代開發人員面臨更複雜的情境:如轉換帶有公式的Excel工作簿、在導出時保留數據類型,以及處理企業級電子表格工作流程。 IronXL 通過將強大的CSV寫入功能與全面的Excel功能相結合來解決這些挑戰,這是一個符合 RFC 4180標準、易於處理多列的、无依赖的程式庫。

這使其成為開發多列支援的自訂.NET CSV寫入器或.NET CSV解析器,行特定功能僅影響正在處理的行以及自動推斷分隔符的理想選擇。

開始使用IronXL

通過NuGet Package Manager安裝IronXL只需幾秒鐘:

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", ",");
    }
}
$vbLabelText   $csharpLabel

這個簡單的控制台測試程式展示如何從您的C#代碼直接寫入CSV內容,創建一個包含我們數據的Workbook對象。 SaveAsCsv方法使用默認分隔符(逗號),但允許您為不同地區選擇性地定義分隔符; 這在處理小數分隔符或替代列分隔符字元時特別有用。 內部的分隔符處理輸出緩衝區的數組分配。 之前提到的分隔符參數允許您定義此字元。

我們還展示了如何提供靜態入口點,並展示了如何使用靜態定義的資源池進行高效的記憶體管理,以便在多行中提供高性能。

高級CSV文件創建技巧

圖1 - 使用IronXL的CSV輸出範例

如何用C#讀取逗號分隔的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.
$vbLabelText   $csharpLabel

在轉換多頁工作簿時,IronXL會自動為每個工作表生成單獨的CSV文件。 公式計算在導出前執行,確保最終CSV輸出中的數據準確。 但這不是唯一的功能。 默認的自動推斷分隔符確保了跨地區的兼容性,並且可以無縫處理多行或多列。

您還可以在默認支援的分隔符變化的動態環境中使用nullable分隔符。

輸出

首先,您可以看到從我們的多頁Excel文件生成的CSV文件:

圖2 - CSV文件

如何用C#讀取逗號分隔的CSV文件

這是一個Excel工作表與對應CSV文件的示例比較:

圖3 - 輸出範例

如何用C#讀取逗號分隔的CSV文件

將DataTable導出為CSV

對於數據庫驅動的應用程序,IronXL簡化了DataTable導出。 我們將var設置為Datarow而不是典型的ref 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", ";");
$vbLabelText   $csharpLabel

在導入時,來自dataTable.Rows集合的每行橫向數據集都會成為工作表中的新行。 IronXL在轉換過程中保留數據類型,這意味著數字保持數值,日期保留格式,文本正確處理特殊字符而不需要額外配置。

輸出

在此,您可以看到我們的模擬數據源及其旁的輸出CSV文件:

圖4 - 將DataTable導出為CSV的輸出

如何用C#讀取逗號分隔的CSV文件

IronXL vs 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);
}
$vbLabelText   $csharpLabel

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", ",");
$vbLabelText   $csharpLabel

功能

CsvHelper

IronXL

基本的CSV寫入

Excel轉換為CSV

公式評估

多頁處理

數據類型保留

手動

自動

Excel格式支援

XLSX, XLS, XLSM

無需MS Office

雖然CsvHelper可以有效地處理簡單的寫列操作,IronXL提供靈活性來處理多行、插值字符串和動態代碼生成場景,甚至允許使用ref struct link這樣的構造進行低層次優化。

開發人員可以枚舉符合特定標準的行,管理默認自動推斷的分隔符,或甚至使用簡單的控制台程序來測試,這些程式展示行特定功能及用於調試的每個條目的關鍵。

企業功能和最佳實踐

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 文件,提高了可靠性,減少了數據解析中出錯的可能性,並確保數據整合性。

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担產品测测试,產品開發和研究的责任時,Jordi 為持续的產品改進增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我