跳過到頁腳內容
使用 IRONXL

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

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

CSV 文件是無數 .NET 應用程式中資料交換的動力。 從財務報告到庫存系統,您可以用程式碼的方式在幾行代碼中創建 CSV 文件。 雖然像CsvHelper 這樣的庫覆蓋了基本的 CSV 操作,但現代開發者面臨複雜的場景:轉換包含公式的 Excel 工作簿,導出過程中保存數據類型,以及處理企業級電子表格工作流程。 IronXL addresses these challenges by combining robust CSV writing with comprehensive Excel functionality in a single, handling multiple columns with ease in a single,dependency-free library that follows RFC 4180 標準

這使得它非常適合開發者構建自定義的 .NET CSV 編寫器或 .NET CSV 解析器,支持多列、僅影響當前處理的行的行特定功能,以及自動推斷分隔符。

IronXL 的入門步驟

通過 NuGet 套件管理器安裝 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", ",");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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

我們還展示了如何提供靜態進入點,並顯示如何使用靜態定義的資源池進行有效的內存管理,允許在多行中執行高性能操作。

高級 CSV 文件創建技術

如何在 C# 中讀取包含逗號的 CSV 文件:圖 1 - IronXL 的示例 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.
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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

您還可以在動態環境中使用可以為空的 sep,其中默認支持的分隔符有所不同。

輸出

首先,在此您可以看到從我們的多工作表 Excel 文件中生成的 CSV 文件:

如何在 C# 中讀取包含逗號的 CSV 文件:圖 2 - CSV 文件

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

如何在 C# 中讀取包含逗號的 CSV 文件:圖 3 - 示例輸出

導出 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", ";");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

在導入時,來自 dataTable.Rows 集合中的每個水平數據行集變成工作表中的新行。 IronXL 在轉換過程中保持數據類型,意味著數字保持數字格式,日期保持格式,文本正確處理特殊字符而無需額外配置。

輸出

在這裡,您可以看到我們的模擬數據源緊挨著輸出的 CSV 文件:

如何在 C# 中讀取包含逗號的 CSV 文件:圖 4 - 導出 DataTable 到 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);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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", ",");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

功能

CsvHelper

IronXL

基本的 CSV 寫入

Excel 到 CSV 轉換

公式計算

多工作表處理

數據類型保留

手動

自動

Excel 格式支持

XLSX, XLS, XLSM

不需要 MS Office

儘管 CsvHelper 能夠有效地處理簡單的寫入列操作,但 IronXL 提供了在多行、內插字符串及動態代碼生成場景中工作的靈活性,甚至可以允許使用像 ref 結構鏈接這樣的低級優化。

開發人員可以枚舉符合特定標準的行,管理默認的自動推斷分隔符,甚至能夠測試簡單的控制台程序,暴露行特定功能和每個條目的關鍵以供調試。

企業特徵和最佳實踐

IronXL 的 SaveAsCsv 方法包含企業級功能:

  • 自定義分隔符:支持逗號、分號、製表符或任何字符(可以用分隔符 sep 覆蓋默認分隔符)
  • 編碼選項:UTF-8、UTF-16 和自定義編碼
  • 公式計算:在導出前計算 Excel 公式
  • 跨平台支持:適用於 Windows、Linux 和 macOS

開發人員還可以應用擴展方法來訪問多列以進行高效處理,或寫入跨多行的 CSV 行,當需要文本換行時。

常見問題和解決方案

在處理 CSV 導出時,開發人員經常會遇到這些挑戰:

  • 數據中的特殊字符:IronXL 會自動轉義引號、逗號和換行符
  • 大型文件處理:使用工作表範圍來分塊處理數據,
  • 編碼問題:為國際字符指定 UTF-8 編碼
  • 缺少數據類型:IronXL 默認保留數字和日期格式

For detailed troubleshooting, visit IronXL's CSV documentation, API reference, and support resources.

今天就開始構建您的 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 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。