C# CSV 庫:使用 IronXL 的完整教學
在C#中使用CSV檔案需要一個能夠處理不只是簡單行解析的程式庫。 您需要可靠的編碼檢測,正確的分隔符處理,強型別化,理想情況下,能在CSV和Excel之間移動資料,且不需要維護兩個單獨的依賴。 IronXL在一個.NET程式庫中提供了所有這些,不需要Microsoft Office,無需COM互通,也不需要脆弱的替代方案。 無論您是在伺服器上處理平面資料檔案、建立資料管道或提供使用者電子表格下載,IronXL為每個格式提供一致的API。
如何設定C#電子表格程式庫?
透過NuGet安裝IronXL只需不到一分鐘。 在Visual Studio中打開封裝管理器控制台並運行以下命令,或從任何終端使用.NET CLI:
Install-Package IronXL.Excel
安裝封裝後,將命名空間新增到任何您想要處理電子表格資料的檔案中:
using IronXL;
using IronXL;
Imports IronXL
IronXL面向.NET Framework 4.6.2+及所有現代.NET版本(Core、5、6、7、8、9和10)。 它可以在Windows、Linux和macOS上運行,適用於桌面工具和容器化伺服器的工作負載。 存取IronXL安裝指南以獲得涵蓋封裝來源和授權啟用的逐步指導。
如何在C#中讀取CSV檔案?
使用IronXL讀取CSV檔案遵循與載入任何電子表格相同的模式。 調用WorkBook.Load與檔案路徑,IronXL從副檔名推斷格式 -- 不需要額外配置:
// Load a CSV file into a WorkBook
WorkBook workBook = WorkBook.Load("sales_data.csv");
// Access the default worksheet
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Read individual cells by Excel-style address
string customerName = workSheet["A2"].StringValue;
decimal orderAmount = workSheet["B2"].DecimalValue;
// Iterate rows, starting at index 1 to skip the header
for (int i = 1; i < workSheet.Rows.Count(); i++)
{
var row = workSheet.Rows[i];
Console.WriteLine($"Customer: {row.Columns[0].Value}, Amount: {row.Columns[1].Value}");
}
// Load a CSV file into a WorkBook
WorkBook workBook = WorkBook.Load("sales_data.csv");
// Access the default worksheet
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Read individual cells by Excel-style address
string customerName = workSheet["A2"].StringValue;
decimal orderAmount = workSheet["B2"].DecimalValue;
// Iterate rows, starting at index 1 to skip the header
for (int i = 1; i < workSheet.Rows.Count(); i++)
{
var row = workSheet.Rows[i];
Console.WriteLine($"Customer: {row.Columns[0].Value}, Amount: {row.Columns[1].Value}");
}
Imports System
' Load a CSV file into a WorkBook
Dim workBook As WorkBook = WorkBook.Load("sales_data.csv")
' Access the default worksheet
Dim workSheet As WorkSheet = workBook.DefaultWorkSheet
' Read individual cells by Excel-style address
Dim customerName As String = workSheet("A2").StringValue
Dim orderAmount As Decimal = workSheet("B2").DecimalValue
' Iterate rows, starting at index 1 to skip the header
For i As Integer = 1 To workSheet.Rows.Count() - 1
Dim row = workSheet.Rows(i)
Console.WriteLine($"Customer: {row.Columns(0).Value}, Amount: {row.Columns(1).Value}")
Next
WorkBook物件展示完整的電子表格模型。 您可以使用熟悉的Excel符號如"A2"存取單元格,並且內建的轉換屬性 -- DateTimeValue -- 處理型別強制,因此您不必手動解析字串。
有哪些單元格地址選項可用?
除了單一單元格存取,IronXL支持範圍符號和行/列迭代。 您可以使用類似workSheet["A2:C10"]的範圍表達式對一個矩形區塊的單元格進行存取,並作為一個平面集合迭代它。 這在您想要驗證或轉換已知資料區塊而不寫入巢狀迴圈時非常有用:
// Access a range and print each value
foreach (var cell in workSheet["A2:C10"])
{
Console.WriteLine($"{cell.AddressString}: {cell.Value}");
}
// Access a range and print each value
foreach (var cell in workSheet["A2:C10"])
{
Console.WriteLine($"{cell.AddressString}: {cell.Value}");
}
' Access a range and print each value
For Each cell In workSheet("A2:C10")
Console.WriteLine($"{cell.AddressString}: {cell.Value}")
Next
對於動態行數,workSheet.Rows集合自動反映載入的資料,因此您不需要硬編碼行數。 查看C#讀取CSV教程以獲得更多模式,包括標題檢測和多編碼檔案。
如何將CSV行映射到自定義物件?
一個常見的需求是將表格CSV資料轉換為型別集合。 您可以迭代行並將每一行專案映射到一個普通的C#類中:
public record SalesRecord(string Customer, decimal Amount, DateTime OrderDate);
WorkBook workBook = WorkBook.Load("sales_data.csv");
WorkSheet workSheet = workBook.DefaultWorkSheet;
var records = new List<SalesRecord>();
// Start at row 1 to skip the header row (row 0)
for (int i = 1; i < workSheet.Rows.Count(); i++)
{
var row = workSheet.Rows[i];
records.Add(new SalesRecord(
Customer: row.Columns[0].StringValue,
Amount: row.Columns[1].DecimalValue,
OrderDate: row.Columns[2].DateTimeValue
));
}
public record SalesRecord(string Customer, decimal Amount, DateTime OrderDate);
WorkBook workBook = WorkBook.Load("sales_data.csv");
WorkSheet workSheet = workBook.DefaultWorkSheet;
var records = new List<SalesRecord>();
// Start at row 1 to skip the header row (row 0)
for (int i = 1; i < workSheet.Rows.Count(); i++)
{
var row = workSheet.Rows[i];
records.Add(new SalesRecord(
Customer: row.Columns[0].StringValue,
Amount: row.Columns[1].DecimalValue,
OrderDate: row.Columns[2].DateTimeValue
));
}
Imports System
Imports System.Collections.Generic
Public Class SalesRecord
Public Property Customer As String
Public Property Amount As Decimal
Public Property OrderDate As DateTime
Public Sub New(customer As String, amount As Decimal, orderDate As DateTime)
Me.Customer = customer
Me.Amount = amount
Me.OrderDate = orderDate
End Sub
End Class
Dim workBook As WorkBook = WorkBook.Load("sales_data.csv")
Dim workSheet As WorkSheet = workBook.DefaultWorkSheet
Dim records As New List(Of SalesRecord)()
' Start at row 1 to skip the header row (row 0)
For i As Integer = 1 To workSheet.Rows.Count() - 1
Dim row = workSheet.Rows(i)
records.Add(New SalesRecord(
Customer:=row.Columns(0).StringValue,
Amount:=row.Columns(1).DecimalValue,
OrderDate:=row.Columns(2).DateTimeValue
))
Next
這種方法乾淨地將解析邏輯與業務邏輯分隔開,並通過應用程式的其餘部分使每條記錄具有強型別。

如何在C#中寫入CSV檔案?
從頭開始建立CSV檔案涉及三個步驟:建立SaveAsCsv。 這個過程鏡像了您將如何建立任何電子表格,這使得API無論輸出格式如何都保持一致:
// Create a new workbook and worksheet
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("inventory");
// Write header row
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Quantity";
workSheet["C1"].Value = "Price";
// Write data rows
workSheet["A2"].Value = "Widget A";
workSheet["B2"].Value = 250;
workSheet["C2"].Value = 9.99;
workSheet["A3"].Value = "Gadget B";
workSheet["B3"].Value = 120;
workSheet["C3"].Value = 24.50;
// Export to CSV
workBook.SaveAsCsv("inventory.csv");
// Create a new workbook and worksheet
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("inventory");
// Write header row
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Quantity";
workSheet["C1"].Value = "Price";
// Write data rows
workSheet["A2"].Value = "Widget A";
workSheet["B2"].Value = 250;
workSheet["C2"].Value = 9.99;
workSheet["A3"].Value = "Gadget B";
workSheet["B3"].Value = 120;
workSheet["C3"].Value = 24.50;
// Export to CSV
workBook.SaveAsCsv("inventory.csv");
' Create a new workbook and worksheet
Dim workBook As WorkBook = WorkBook.Create()
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("inventory")
' Write header row
workSheet("A1").Value = "Product"
workSheet("B1").Value = "Quantity"
workSheet("C1").Value = "Price"
' Write data rows
workSheet("A2").Value = "Widget A"
workSheet("B2").Value = 250
workSheet("C2").Value = 9.99D
workSheet("A3").Value = "Gadget B"
workSheet("B3").Value = 120
workSheet("C3").Value = 24.5D
' Export to CSV
workBook.SaveAsCsv("inventory.csv")
SaveAsCsv處理分隔符位置、包含逗號的字段的引號以及新行標準化。 您不需要手動管理這些。 IronXL在導出時保留數字型別,以便下游工具如Excel或pandas以數字而非引號字串讀取。
如何將DataTable導出為CSV?
許多應用程式將資料從資料庫檢索到DataTable中。 IronXL可以使用一個調用將整個DataTable插入到工作表中,使得批量導出簡單明了:
DataTable dataTable = GetProductsFromDatabase();
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("products");
workSheet.InsertDataTable(dataTable, "A1");
workBook.SaveAsCsv("products.csv");
DataTable dataTable = GetProductsFromDatabase();
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("products");
workSheet.InsertDataTable(dataTable, "A1");
workBook.SaveAsCsv("products.csv");
IRON VB CONVERTER ERROR developers@ironsoftware.com
DataTable架構中寫入列標題並從您提供的地址開始填充所有行。 對於較大的資料集,這遠比手動逐行迴圈更高效。 查看導出到CSV文件,以獲得包括自定義分隔符和編碼設置的選項。

如何在C#中在CSV和Excel之間進行轉換?
IronXL提供的最有價值的功能之一是CSV和Excel格式之間的雙向轉換。 API是對稱的 -- Load讀取任何支持的格式,Save方法家族寫入至您的目標格式:
// Convert CSV to Excel
WorkBook csvWorkBook = WorkBook.Load("data.csv");
csvWorkBook.SaveAs("data.xlsx");
// Convert Excel back to CSV
WorkBook xlsxWorkBook = WorkBook.Load("report.xlsx");
xlsxWorkBook.SaveAsCsv("report.csv");
// Convert CSV to Excel
WorkBook csvWorkBook = WorkBook.Load("data.csv");
csvWorkBook.SaveAs("data.xlsx");
// Convert Excel back to CSV
WorkBook xlsxWorkBook = WorkBook.Load("report.xlsx");
xlsxWorkBook.SaveAsCsv("report.csv");
' Convert CSV to Excel
Dim csvWorkBook As WorkBook = WorkBook.Load("data.csv")
csvWorkBook.SaveAs("data.xlsx")
' Convert Excel back to CSV
Dim xlsxWorkBook As WorkBook = WorkBook.Load("report.xlsx")
xlsxWorkBook.SaveAsCsv("report.csv")
這些轉換維持資料的完整性。 數字值保持數字,日期字段保留其型別,公式結果在寫入前被評估為它們的計算值。 當您將多工作表Excel文件轉換為CSV時,IronXL會自動為每個工作表建立一個單獨的CSV文件:
WorkBook multiSheetWorkBook = WorkBook.Load("quarterly_report.xlsx");
// Produces: quarterly_report.Sheet1.csv, quarterly_report.Sheet2.csv, etc.
multiSheetWorkBook.SaveAsCsv("quarterly_report.csv");
WorkBook multiSheetWorkBook = WorkBook.Load("quarterly_report.xlsx");
// Produces: quarterly_report.Sheet1.csv, quarterly_report.Sheet2.csv, etc.
multiSheetWorkBook.SaveAsCsv("quarterly_report.csv");
Dim multiSheetWorkBook As WorkBook = WorkBook.Load("quarterly_report.xlsx")
' Produces: quarterly_report.Sheet1.csv, quarterly_report.Sheet2.csv, etc.
multiSheetWorkBook.SaveAsCsv("quarterly_report.csv")
這種行為特別對於報告管道很有用,其中下游消費者期望每個文件都有一個主題。CSV寫入教程涵蓋了額外的選項,例如指定分隔符字元和控制導出中包含的工作表。


為何僅支持CSV的程式庫不足以滿足實際專案需求?
許多C#開發者從CsvHelper或從Microsoft.VisualBasic的TextFieldParser開始。 這兩個工具都能夠處理僅支持CSV的工作流程。 當需求擴大時,您會發現差距:利益相關者要求Excel下載而不是CSV,財務需要保留公式,或安全政策要求密碼保護的檔案。 在那時候,僅支持CSV的程式庫迫使您新增第二個依賴並維護兩個單獨的整合路徑。 一個統一的電子表格程式庫從一開始就消除了這種分裂。
| 功能 | IronXL | CsvHelper | TextFieldParser |
|---|---|---|---|
| 讀取CSV檔案 | 是 | 是 | 是 |
| 寫入CSV檔案 | 是 | 是 | 否 |
| 讀取/寫入XLSX | 是 | 否 | 否 |
| 公式計算 | 是 | 否 | 否 |
| 單元格樣式和格式化 | 是 | 否 | 否 |
| 密碼保護的檔案 | 是 | 否 | 否 |
| 需要Office依賴 | 否 | 否 | 否 |
| 跨平台(.NET 10) | 是 | 是 | 有限的 |
統一程式庫提供哪些額外的電子表格功能?
除了格式轉換,一個同時處理CSV和Excel的程式庫,隨著專案的成長,為您提供有用的電子表格操作。 特別是有了IronXL,您可以得到:
- 公式計算 -- 您可以將像
=SUM(B2:B10)的公式寫入單元格,並讀回計算結果而無需Excel。 - 單元格和範圍樣式 -- 通過IronXL樣式API應用字型權重、背景顏色、數字格式和邊框。
- 密碼保護 -- 使用
WorkBook.Load("secure.xlsx", "password")打開加密工作簿並保存新檔案時進行加密。 - 命名範圍 -- 定義和引用命名區域,就像在Excel中那樣,這簡化了公式編寫和資料驗證。
- 大文件支持 -- IronXL在托管程式碼中處理資料,而不需一次將整個文件載入到記憶體中,這使得記憶體使用在即使有成千上萬行的文件中也可預測。
IronXL功能頁有支持的操作的完整列表。
IronXL如何處理跨平台部署?
針對電子表格程式庫的一個持續挑戰是平台特定行為。 依賴COM互通的程式庫只能在Windows上運行,而依賴於Office的程式庫需要安裝Office。 IronXL是完全托管的程式碼,無本地依賴,因此同一個二進制文件可以在Linux容器、macOS開發機和Windows伺服器上運行而無需改變。 這使得它能輕鬆部署到Azure、AWS、Docker或任何.NET 10目標。
對於使用Dapper或Entity Framework Core等工具構建資料管道的開發者而言,IronXL自然地作為序列化層運作 -- 讀取CSV輸入,使用您的ORM處理,輸出結果為XLSX或CSV。IronXL授權頁解釋了可用于商業用途的授權層次。

您的下一步是什麼?
IronXL為您在任何.NET 10應用程式中提供單一、一致的API用於讀取、寫入和轉換CSV和Excel文件。 主要收益是顯而易見的:無需Office依賴,跨平台支持,強型別化單元格值,從僅支援CSV的專案到完整電子表格功能的直接過渡,每當需求變更時。
當您準備深入時,從最相關於您當前專案的主題開始。 如果您主要處理CSV導入管道,上述的讀取和映射模式處理了大多數現實世界場景。 如果您的輸出要求多樣化 -- 有時為下游腳本準備的CSV,有時為終端使用者準備的XLSX -- 格式轉換部分展示了怎樣用一個程式碼庫服務於兩者。
對於構建報告系統或從資料庫導出結果的團隊,InsertDataTable方法擴展良好,避免了逐行單元格指派的性能開銷。 將其與單元格樣式相結合,以生成使用者可以直接在Excel中打開而無需重新格式化的報告。
要進一步前進,遵循以下步驟:
- 通過NuGet使用
dotnet add package IronXL安裝程式庫。 - 在IronXL入門指南中跟隨快速入門以載入您的第一個CSV文件。
- 當您在同一個專案中需要這兩種格式時,透過CSV到Excel教程探索格式轉換。
- 在IronXL物件參考查看可用於高級單元格操作、公式支援和樣式的API參考。
- 在IronXL試用授權頁上開始免費試用 -- 不需要信用卡,包括技術支援。
如果您正在評估與其他Iron Software工具一起的選擇,Iron Software產品套件涵蓋PDF生成IronPDF,條碼讀取,OCR等 -- 全部共用相同的授權模式和支援渠道。
常見問題
什麼是 IronXL,它如何幫助處理 C# 中的 CSV 檔案?
IronXL 是一款強大的 C# 程式庫,可讓開發者無縫地讀取、寫入和轉換 CSV 檔案。它為 Excel 活頁簿提供了擴展支援,確保行、列和資料型別的一致處理和高效能。
為什麼我應該選擇使用 IronXL 而非像 CsvHelper 這樣的免費程式庫?
雖然 CsvHelper 在基本的 CSV 操作中表現優異,但 IronXL 具備如 Excel 活頁簿支援、增強效能和強大資料型別處理等功能,使其適用於更複雜的工作表工作流。
IronXL 能同時處理 CSV 和 Excel 格式嗎?
是的,IronXL 被設計用於有效處理 CSV 和 Excel 格式,讓您輕鬆地在兩者之間進行轉換。
IronXL 是否支持高效能資料處理?
IronXL 為高效能而打造,確保以最佳速度和效率進行平滑的資料導入和導出過程。
是否可以將 IronXL 與現有的工作表工作流整合?
當然,IronXL 可無縫整合到現有的工作表工作流中,增強管理 CSV 和 Excel 格式資料的能力。
IronXL 適合用於複雜的 CSV 檔案操作的原因是什麼?
IronXL 提供了如行、列和資料型別一致處理等強大功能,讓其特別適合需要超越基本處理的複雜 CSV 檔案操作。
我可以使用 IronXL 將 CSV 檔案轉換為 Excel 嗎?
可以,IronXL 的一大特色就是它能將 CSV 檔案轉換為 Excel 格式,並且反之亦然,簡化了資料管理流程。
IronXL 如何確保可靠的 CSV 檔案處理?
IronXL 透過其高級功能確保可靠的 CSV 檔案處理,其中包含對複雜資料型別的支持以及與 Excel 功能的整合。
using IronXL 進行資料導入/導出的好處有哪些?
IronXL 提供平滑的資料導入/導出過程,為開發者節省時間和精力,同時確保格式間的資料完整性和準確性。
對於初次進行 C# 中 CSV 操作的開發者來說,IronXL 容易使用嗎?
是的,IronXL 具有使用者友好的功能和簡單的程式碼範例,使其對於初次進行 C# 中 CSV 操作的開發者來說易於使用。




