跳過到頁腳內容
使用 IRONXL

C# CSV 庫:使用 IronXL 的完整教學

在 C# 中處理 CSV 檔案需要一個能夠處理除簡單行解析之外的其他功能的函式庫。 您需要可靠的編碼檢測、正確的分隔符號處理、強類型識別,並且最好能夠在 CSV 和 Excel 之間移動資料而無需維護兩個單獨的依賴項。 IronXL在一個 .NET 程式庫中實現了所有這些功能——無需 Microsoft Office,無需 COM 互通,也無需脆弱的變通方法。 無論您是在伺服器上處理平面資料檔案、建立資料管道,還是向使用者提供電子表格下載,IronXL 都為您提供適用於每種格式的統一 API。

如何設定 C# 電子表格庫?

透過 NuGet 安裝 IronXL 只需不到一分鐘。 在 Visual Studio 中開啟程式包管理器控制台並執行以下命令,或從任何終端使用 .NET CLI:

Install-Package IronXL
dotnet add package IronXL
Install-Package IronXL
dotnet add package IronXL
SHELL

安裝軟體包後,將命名空間新增至任何需要處理電子表格資料的檔案:

using IronXL;
using IronXL;
Imports IronXL
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

WorkBook 物件公開了完整的電子表格模型。 您可以使用熟悉的 Excel 表示法(例如 "A2")來存取單元格,內建的轉換屬性 -- StringValueDecimalValueIntValue、@@--CODE938--@@、IntValue、@@--CODE-98940--CODE-98940--CODE-98940--CODE-98940--CODE-98940--CODE

有哪些小區尋址選項?

除了單一單元格存取外,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
$vbLabelText   $csharpLabel

對於動態行計數,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
$vbLabelText   $csharpLabel

這種方法將解析邏輯與業務邏輯清晰地分離,並使應用程式其餘部分中的每個記錄都具有強類型。

如何使用 C# CSV 庫讀寫檔案:圖 1 - 讀取 CSV 檔案輸出

如何在C#中寫入CSV檔案?

從頭開始建立 CSV 檔案涉及三個步驟:建立 WorkBook,填入 WorkSheet,然後呼叫 SaveAsCsv。 該過程與建立任何電子表格的方式類似,從而保證了 AP 的一致性,而與輸出格式無關:

// 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")
$vbLabelText   $csharpLabel

SaveAsCsv 處理分隔符號放置、包含逗號的欄位的引用以及換行符號規範化。 您無需手動管理任何這些事項。 IronXL 在匯出過程中保留數值類型,以便 Excel 或 pandas 等下游工具將數字讀取為數字,而不是讀取為引號的文字字串。

如何將資料表匯出為 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
$vbLabelText   $csharpLabel

InsertDataTable 方法從 DataTable 模式寫入列標題,並從您提供的位址開始填入所有行。 對於較大的資料集,這種方法比手動遍歷行要高效得多。 查看匯出為 CSV 的文檔,以了解包括自訂分隔符號和編碼設定在內的選項。

如何使用 C# CSV 庫讀寫文件:圖 2 - 使用 IronXL 新建的 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")
$vbLabelText   $csharpLabel

這些轉換操作可以保持資料的完整性。 數值保持數值形式,日期欄位保持其類型,公式結果在寫入之前會計算出其計算值。 當您將多工作表 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")
$vbLabelText   $csharpLabel

這種行為對於下游使用者期望每個文件對應一個主題的報告管道尤其有用。 CSV寫入教學課程還介紹了其他選項,例如指定分隔符號以及控制匯出中包含哪些工作表。

如何使用 C# CSV 庫讀寫文件:圖 3 - 多頁 Excel 文件儲存為單獨的 CSV 文件

如何使用 C# CSV 庫讀寫檔案:圖 4 - 原始 Excel 格式檔案與轉換後的 CSV 檔案對比

!{--01001100010010010100001001010010010000010101001001011001010111110100011101000101010101 01000101111101010011010101000100000101010010010101000100010101000100010111110101011101001000110 1010101000100100001011111010100000101001001001111010001000101010101010000110101010100101010101011 10101010001010010010010010010000010100110001011111010000100100110001001111101000011010010111111010000110100101110--

為什麼僅支援 CSV 格式的函式庫無法滿足實際專案的需求?

許多 C# 開發人員從 Microsoft.VisualBasic 中的CsvHelperTextFieldParser開始。 兩者都是適用於僅處理 CSV 檔案的工作流程的有效工具。 當需求擴大時,差距就會顯現:利害關係人要求下載 Excel 文件而不是 CSV 文件,財務部門需要保留公式,或安全策略要求對文件進行密碼保護。 這時,僅支援 CSV 的函式庫會迫使你新增第二個依賴項並維護兩個獨立的整合路徑。 統一的電子表格庫從一開始就消除了這種分裂。

IronXL 庫與僅支援 CSV 格式的庫之間的功能比較
能力 IronXL CsvHelper TextFieldParser
讀取 CSV 檔案
寫入 CSV 文件
讀取/寫入 XLSX 文件
公式評估
儲存格樣式和格式化
受密碼保護的文件
需要依賴辦公室
跨平台(.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 目標平台就變得非常簡單。

對於使用DapperEntity Framework Core等工具建立資料管道的開發人員來說,IronXL 非常適合作為序列化層——讀取 CSV 輸入,使用 ORM 進行處理,並將結果匯出為 XLSX 或 CSV 檔案。 IronXL的許可頁面詳細說明了可用於商業用途的許可等級。

如何使用 C# CSV 庫讀寫檔案:圖 5 - IronXL 與僅支援 CSV 的庫的比較表

下一步計劃是什麼?

IronXL 為您提供一個統一的 API,用於在任何 .NET 10 應用程式中讀取、寫入和轉換 CSV 和 Excel 檔案。 主要優勢顯而易見:不依賴 Office,支援跨平台,單元格值支援強類型,並且當需求發生變化時,可以直接從僅支援 CSV 的專案過渡到完整的電子表格功能。

當你準備好深入研究時,從與你目前專案最相關的主題開始。 如果您主要處理 CSV 匯入管道,那麼上面介紹的讀取和映射模式可以處理大多數實際場景。 如果您的輸出要求有所不同——有時是下游腳本所需的 CSV 文件,有時是最終用戶所需的 XLSX 文件——格式轉換部分展示瞭如何使用單一程式碼庫來同時滿足這兩種需求。

對於建立報告系統或從資料庫匯出結果的團隊來說,InsertDataTable 方法具有良好的可擴展性,並且避免了逐行單元格分配帶來的效能開銷。 結合儲存格樣式,即可產生使用者無需重新格式化即可在 Excel 中直接開啟的報表。

若要繼續進行,請按照以下步驟操作:

  1. 使用 NuGet安裝庫Install-Package IronXLdotnet add package IronXL。 2.按照IronXL 入門指南中的快速入門步驟載入您的第一個 CSV 檔案。
  2. 當您需要在同一個專案中同時使用 CSV 和 Excel 格式時,請探索 CSV 到 Excel 格式轉換教學
  3. 查看IronXL 物件參考中的API 參考,以了解進階儲存格操作、公式支援和樣式設定。
  4. IronXL 試用許可證頁面開始免費試用-無需信用卡,包含技術支援。

如果您正在評估其他 Iron Software 工具的選項, IronSoftware 產品套件涵蓋了使用IronPDF生成 PDF、條碼讀取、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 功能的集成。

使用 IronXL 進行數據導入/導出的好處是什麼?

IronXL 提供順暢的數據導入/導出過程,節省開發人員的時間和精力,同時保證各格式間的數據完整性和準確性。

IronXL 對於不熟悉 C# 中 CSV 操作的開發人員來說是否容易使用?

是的,IronXL 具備用戶友好的功能和簡單的代碼示例,從而讓不熟悉 C# 中 CSV 操作的開發人員也能輕鬆使用。

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担產品测测试,產品開發和研究的责任時,Jordi 為持续的產品改進增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。

鋼鐵支援團隊

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