如何在 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", ",");
}
}
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 參數可讓您定義此字元。
我們也示範如何提供靜態入口點,並展示如何使用靜態定義的資源池進行高效的記憶體管理,從而實現跨多行的高效能。
進階 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 輸出的資料準確無誤。 但這並非它唯一的特色。 預設的自動推斷分隔符號確保了跨區域的兼容性,並且可以無縫處理多行或多列。
對於預設支援的分隔符號會變化的動態環境,您也可以使用可為空的分隔符號。
輸出
首先,您可以在這裡看到由我們的多工作表 Excel 檔案產生的 CSV 檔案:
如何在 C# 中讀取帶逗號的 CSV 檔案:圖 2 - CSV 文件
以下是一個Excel表格與對應CSV檔案的比較範例:
將資料表匯出為 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", ";");
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 |
|
無需微軟辦公室軟體 |
✓ |
✓ |
雖然 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 文件,提高了可靠性,減少了數據解析中出錯的可能性,並確保數據整合性。


