跳至頁尾內容
USING IRONXL

如何在 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
$vbLabelText   $csharpLabel

此簡單的控制台測試程式展示了如何直接從您的 C# 程式碼寫入 CSV 內容,建立包含我們資料的Workbook物件。 此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.
' 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.
$vbLabelText   $csharpLabel

在轉換多表活頁簿時,IronXL 自動為每個工作表生成單獨的 CSV 檔案。 公式計算在匯出前執行,以確保最終 CSV 輸出中資料的準確性。 但這不僅僅是唯一的一個功能。 預設自動推斷的分隔符確保了跨區域的相容性,多行或多列能夠無縫處理。

您還可以在預設支持的分隔符各有不同的動態環境中使用可空的 sep。

輸出

首先,在這裡您可以看到從我們的多表 Excel 檔案生成的 CSV 檔案:

如何使用 C# 讀取包含逗號的 CSV 檔案:圖 2 - CSV 檔案

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

如何使用 C# 讀取包含逗號的 CSV 檔案:圖 3 - 輸出範例

將資料表(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", ";")
$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);
}
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
$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", ",");
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", ",")
$vbLabelText   $csharpLabel

功能

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 文件來提高可靠性,減少資料解析過程中的錯誤可能性,確保資料完整性。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

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