跳過到頁腳內容
使用 IRONXL

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

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

CSV 檔案為無數 .NET 應用程式提供資料交換支援。 從財務報告到庫存系統,您只需幾行程式碼即可自由地以程式設計方式建立 CSV 檔案。 雖然像CsvHelper這樣的程式庫涵蓋了基本的 CSV 操作,但現代開發人員面臨著複雜的場景:轉換帶有公式的 Excel 工作簿、在匯出過程中保留資料類型以及處理企業級電子表格工作流程。 IronXL透過將強大的 CSV 寫入功能與全面的Excel 功能相結合,在一個遵循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 內容,並建立一個包含我們資料的Workbook物件。 SaveAsCsv 方法使用預設分隔符號(逗號),但允許您選擇性地為不同的語言環境定義分隔符號; 這在處理小數分隔符號或交替列分隔符號字元時尤其有用。 內部,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 輸出的資料準確無誤。 但這並非它唯一的特色。 預設的自動推斷分隔符號確保了跨區域的兼容性,並且可以無縫處理多行或多列。

對於預設支援的分隔符號會變化的動態環境,您也可以使用可為空的分隔符號。

輸出

首先,您可以在這裡看到由我們的多工作表 Excel 檔案產生的 CSV 檔案:

如何在 C# 中讀取帶逗號的 CSV 檔案:圖 2 - CSV 文件

以下是一個Excel表格與對應CSV檔案的比較範例:

如何在 C# 中讀取帶逗號的 CSV 檔案:圖 3 - 範例輸出

將資料表匯出為 CSV

對於資料庫驅動型應用程序,IronXL 簡化了資料表匯出流程。 為了更清楚地說明,我們將變數設為 Datarow 而不是典型的引用變數 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 - 將資料表匯出為 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

無需微軟辦公室軟體

雖然 CsvHelper 可以有效率地處理簡單的寫入列操作,但 IronXL 提供了處理多行、插值字串和動態程式碼產生場景的靈活性,甚至允許使用 ref struct link 等構造進行低階優化。

開發人員可以列舉符合特定條件的行,管理預設的自動推斷分隔符,甚至可以使用簡單的控制台程式進行測試,這些程式會公開特定於行的功能以及每個條目的鍵以進行調試。

企業功能和最佳實踐

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

  • 自訂分隔符號:支援逗號、分號、製表符或任何字元(可使用 separator 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 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。