跳過到頁腳內容
使用 IRONXL

如何使用 IronXL 搭配 .NET Core CSV 讀取器:實用範例

在.NET Core應用程式中處理 CSV 檔案操作是資料匯入和匯出操作的常見需求。 然而,開發人員在嘗試有效解析 CSV 檔案內容時,經常會遇到不同的分隔符號、資料類型轉換和效能問題等挑戰。 雖然有像 CsvHelper 套件和 TextFieldParser 這樣的函式庫可以用於 CSV 解析,但並非所有函式庫都提供與 Excel 的互通性以及強大的異常處理功能。 IronXL是一款經過實戰檢驗的 CSV 解析器解決方案,可處理 CSV 和 Excel 格式,為大規模批量處理場景提供強大的效能。 本教學示範如何有效地使用IronXL作為.NET Core CSV 讀取器,並提供實用、易於理解的範例,以高效解析 CSV 數據,包括非同步操作以提高應用程式的回應速度。 開發者為開源 CSV 工具貢獻改進或提交拉取請求時,也會發現 IronXL 清晰的 API 是一個有價值的參考,尤其是在管理包含重複值、重複條目或在資料匯入過程中需要資料驗證的資料集時。

在.NET生態系統中,有多個軟體包可以處理 CSV 檔案操作,包括 EPPlus、NPOI 和 OpenXML 等替代方案,但 IronXL 的多功能性使其成為開發人員的首選,他們希望超越簡單的 CSV 讀取,並在單個 CSV 庫中享受 Excel 互通性——特別是對於企業應用程式中的 ETL 操作和報表生成任務。 選擇合適的解析器取決於您的特定需求,因此本指南將帶您了解實際案例,以幫助您做出明智的決定。

如何使用.NET Core CSV 讀取器IronXL的實際範例:圖 1 - IronXL

為什麼選擇IronXL作為您的.NET Core CSV 讀取器?

在選擇.NET Core CSV 讀取器時, IronXL相比傳統的 CSV 解析庫具有幾個令人信服的優勢。 IronXL與.NET Core 的現代架構集成,同時保持與.NET Framework專案的向後相容性。 此解決方案消除了開發人員在使用 CSV 檔案操作時面臨的常見痛點,包括:

  • 自動偵測國際字元集的編碼
  • 無需手動配置即可智慧識別分隔符
  • 對從千位元組到千兆位元組大小的檔案進行記憶體高效處理
  • 內建資料型別推斷和轉換
  • 跨平台的回車與換行處理 即使處理 CSV 數據,也支援 Excel 公式。
  • 在 Windows、Linux 和 macOS 上的跨平台可靠性

與需要大量配置和手動解析邏輯的基本 CSV 讀取器不同, IronXL可以自動處理特殊情況,例如包含分隔符號的引號的欄位、多行單元格值和特殊字元。 該程式庫的架構透過延遲載入和串流功能確保了最佳效能,使其既適用於小型設定文件,也適用於大規模資料處理任務。 IronXL可以根據需要跳過標題行,並有效率地分割複雜的資料結構。 了解更多信息,請參閱IronXL功能概述

對於從傳統系統過渡到新系統的開發人員來說, IronXL提供了一個熟悉的 API,降低了學習難度,同時為響應式應用程式提供了現代化的 async/await 模式。 這使其成為正在進行數據處理基礎設施現代化改造的團隊的理想選擇。 有關 API 參考和配置選項,請參閱完整的IronXL文件

如何安裝IronXL以讀取 CSV 檔案?

無論您是建立控制台應用程式、 ASP.NET Core Web 應用程式還是 Windows Forms 應用程序,在.NET Core專案中安裝IronXL都只需幾秒鐘。 要在.NET Core中有效解析 CSV 檔案並開始讀取 CSV 數據,請在 Visual Studio 中開啟套件管理器控制台並執行:

Install-Package IronXl.Excel
Install-Package IronXl.Excel
SHELL

或使用.NET CLI:

dotnet add package IronXl.Excel
dotnet add package IronXl.Excel
SHELL

如何使用.NET Core CSV 讀取器IronXL的實際範例:圖 2 - 安裝@@----IMG-208-EG--@@

或者,使用NuGet套件管理器 UI,搜尋"IronXl.Excel"並按一下安裝。 該程式庫在遷移到.NET Core期間與現有的.NET Framework專案整合。 您也可以直接從IronXL NuGet頁面引用它。

安裝完成後,將命名空間新增到您的程式碼中:

using IronXL;
using IronXL;
$vbLabelText   $csharpLabel

此設定可讓您存取強大的 CSV 讀取功能,而無需 Microsoft Office 或 Interop 依賴項,使其成為雲端部署和 Docker 容器的理想選擇。 有關詳細的安裝說明和配置設置,請查看IronXL安裝指南文件。

如何使用 IronXL 的 LoadCSV 方法讀取 CSV 檔案?

IronXL 的LoadCSV 方法使 CSV 檔案處理變得簡單,它可以有效地處理 CSV 標題、CSV 列和 CSV 行,如下例所示:

// Load CSV file into a WorkBook object for .NET Core CSV reading
var workbook = WorkBook.LoadCSV("Budget.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");
// Access the default worksheet containing parsed CSV data
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Read specific cell values with type-safe methods
string cellValue = worksheet["A1"].StringValue;
// Iterate through a range for bulk CSV data processing
foreach (var cell in worksheet["A1:C10"])
{
    Console.WriteLine($"Cell {cell.AddressString}: {cell.Text}");
}
// Load CSV file into a WorkBook object for .NET Core CSV reading
var workbook = WorkBook.LoadCSV("Budget.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");
// Access the default worksheet containing parsed CSV data
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Read specific cell values with type-safe methods
string cellValue = worksheet["A1"].StringValue;
// Iterate through a range for bulk CSV data processing
foreach (var cell in worksheet["A1:C10"])
{
    Console.WriteLine($"Cell {cell.AddressString}: {cell.Text}");
}
$vbLabelText   $csharpLabel

LoadCSV 方法建立一個 WorkBook 對象,該對象使用最佳化的記憶體流處理在記憶體中表示您的 CSV 資料結構。 fileFormat 參數指定內部處理格式,而 listDelimiter 定義 CSV 檔案中使用的 CSV 分隔符號-支援製表符分隔的檔案和管道符號分隔的格式。

輸入和輸出

如何使用.NET Core CSV 讀取器IronXL的實際範例:圖 5 - CSV 輸入範例

當處理從包含 sep= 行(有時稱為"分隔符號"標記)的系統匯出的 CSV 檔案時, IronXL會智慧地讀取此元數據,以自動確定正確的分隔符號。 此功能可節省處理區域 CSV 格式的時間,這些格式可能使用分號、製表符或豎線而不是逗號,從而確保跨字元集的正確編碼處理。

預設的 WorkSheet 屬性可立即以工作表的形式存取已解析的 CSV 數據,從而實現逐單元格或基於範圍的數據提取。 您可以使用 IntValueDecimalValue 等屬性檢索值,以實現具有內建類型轉換的類型安全操作。 對於更複雜的資料操作和轉換,請探索 IronXL 的儲存格格式化選項和範圍選擇功能。

如何將 CSV 資料對應到具有資料驗證的 C# 類別?

您可以使用欄位對應和資料驗證功能,將 CSV 資料直接對應到 C# 物件。 例如,假設有一個 CSV 文件,其中包含姓名、年齡和城市三列。 定義一個帶有屬性映射的模型,如下所示:

public record Customer(string Name, int Age, string City)
{
    public bool IsValid() => !string.IsNullOrEmpty(Name) && Age > 0;
}

// Parse CSV rows into typed objects
var customers = new List<Customer>();
for (int row = 2; row <= worksheet.RowCount; row++)
{
    var customer = new Customer(
        Name: worksheet[$"A{row}"].StringValue,
        Age:  worksheet[$"B{row}"].IntValue,
        City: worksheet[$"C{row}"].StringValue
    );
    if (customer.IsValid())
        customers.Add(customer);
}
// Output the records
foreach (var record in customers)
{
    Console.WriteLine($"Customer: {record.Name}, Age: {record.Age}, City: {record.City}");
}
public record Customer(string Name, int Age, string City)
{
    public bool IsValid() => !string.IsNullOrEmpty(Name) && Age > 0;
}

// Parse CSV rows into typed objects
var customers = new List<Customer>();
for (int row = 2; row <= worksheet.RowCount; row++)
{
    var customer = new Customer(
        Name: worksheet[$"A{row}"].StringValue,
        Age:  worksheet[$"B{row}"].IntValue,
        City: worksheet[$"C{row}"].StringValue
    );
    if (customer.IsValid())
        customers.Add(customer);
}
// Output the records
foreach (var record in customers)
{
    Console.WriteLine($"Customer: {record.Name}, Age: {record.Age}, City: {record.City}");
}
$vbLabelText   $csharpLabel

使用IronXL,工作表中的每一行都映射到一個類型化對象,可以進行資料處理、序列化為 JSON 或導出為另一種格式,並進行適當的異常處理。 這種方法可以用最少的樣板程式碼從 CSV 資料建立強型別記錄。 如需更深入的了解,請參閱C# 中讀取 CSV 檔案的指南。

如何處理不同的分隔符號並將其轉換為資料表?

現實世界中的 CSV 檔案格式通常使用逗號以外的各種分隔符,需要靈活處理。 IronXL透過自動分隔符號偵測巧妙地解決了這個問題:

// Load CSV with semicolon delimiter
WorkBook workbook = WorkBook.LoadCSV("products.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ";");
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Convert to DataTable for database operations
DataTable dataTable = worksheet.ToDataTable(true);
// Process the DataTable
foreach (DataRow row in dataTable.Rows)
{
    Console.WriteLine($"Product: {row["ProductName"]}, Price: {row["Price"]}");
}
// Load CSV with semicolon delimiter
WorkBook workbook = WorkBook.LoadCSV("products.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ";");
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Convert to DataTable for database operations
DataTable dataTable = worksheet.ToDataTable(true);
// Process the DataTable
foreach (DataRow row in dataTable.Rows)
{
    Console.WriteLine($"Product: {row["ProductName"]}, Price: {row["Price"]}");
}
$vbLabelText   $csharpLabel

ToDataTable 方法將工作表資料轉換為.NET DataTable,布林參數指示是否使用第一行作為列標題。 這種轉換對於資料庫操作、 ASP.NET Core應用程式中的資料綁定,或當您需要應用現有的 DataTable 處理邏輯進行 SQL Server 整合時,尤其有用。 產生的 DataTable 保留資料類型和模式訊息,可以直接與 SqlBulkCopy 一起使用,以進行高效的批量插入操作。

請參閱詳細指南,以了解有關將 CSV 檔案匯入 DataTable以及資料庫整合的更多資訊。

如何將資料表匯出回 CSV 檔案?

DataTable 中處理完資料後,通常需要將結果寫回 CSV 檔案。 IronXL 也支援這種雙向IronXL:

// Load a DataTable from your data source
DataTable exportTable = GetProcessedData(); // your data source method

// Create a new workbook and populate it from the DataTable
WorkBook outputWorkbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet outputSheet = outputWorkbook.DefaultWorkSheet;

// Write headers from DataTable columns
for (int col = 0; col < exportTable.Columns.Count; col++)
{
    outputSheet[0, col].Value = exportTable.Columns[col].ColumnName;
}

// Write rows
for (int row = 0; row < exportTable.Rows.Count; row++)
{
    for (int col = 0; col < exportTable.Columns.Count; col++)
    {
        outputSheet[row + 1, col].Value = exportTable.Rows[row][col]?.ToString();
    }
}

// Save as CSV
outputWorkbook.SaveAsCsv("output.csv", delimiter: ",");
Console.WriteLine("Export complete.");
// Load a DataTable from your data source
DataTable exportTable = GetProcessedData(); // your data source method

// Create a new workbook and populate it from the DataTable
WorkBook outputWorkbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet outputSheet = outputWorkbook.DefaultWorkSheet;

// Write headers from DataTable columns
for (int col = 0; col < exportTable.Columns.Count; col++)
{
    outputSheet[0, col].Value = exportTable.Columns[col].ColumnName;
}

// Write rows
for (int row = 0; row < exportTable.Rows.Count; row++)
{
    for (int col = 0; col < exportTable.Columns.Count; col++)
    {
        outputSheet[row + 1, col].Value = exportTable.Rows[row][col]?.ToString();
    }
}

// Save as CSV
outputWorkbook.SaveAsCsv("output.csv", delimiter: ",");
Console.WriteLine("Export complete.");
$vbLabelText   $csharpLabel

這種模式非常適用於 ETL 管道,其中資料會被載入、轉換,然後寫入新檔案。如需其他匯出格式,請參閱C# 匯出至 CSV 教學課程DataTable 匯出至 Excel 指南

如何進行CSV和Excel格式之間的轉換?

IronXL 的一個突出特點是 CSV 到 Excel 的轉換和 Excel 到 CSV 的轉換,這對於資料遷移項目至關重要。 以下範例示範了此功能:

// Load CSV and save as Excel
WorkBook csvWorkbook = WorkBook.LoadCSV("report.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");
// Save as Excel file
csvWorkbook.SaveAs("report.xlsx");
// Or load Excel and export to CSV
WorkBook excelWorkbook = WorkBook.Load("data.xlsx");
excelWorkbook.SaveAsCsv("exported_data.csv", delimiter: ",");
// Load CSV and save as Excel
WorkBook csvWorkbook = WorkBook.LoadCSV("report.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");
// Save as Excel file
csvWorkbook.SaveAs("report.xlsx");
// Or load Excel and export to CSV
WorkBook excelWorkbook = WorkBook.Load("data.xlsx");
excelWorkbook.SaveAsCsv("exported_data.csv", delimiter: ",");
$vbLabelText   $csharpLabel

這種雙向轉換既能保持資料完整性,又能為各種文件轉換場景提供格式彈性。 SaveAs 方法會自動從檔案副檔名偵測所需的格式,支援 XLSX、XLS 和其他 Excel 格式以及工作表管理。 使用 SaveAsCsv 儲存為 CSV 時,您可以指定自訂分隔符號和文字編碼以滿足您的要求。

當與需要特定文件格式進行資料交換的系統整合時,此功能非常寶貴。 對於從其他程式庫遷移或評估手動解析替代方案的開發人員,請參閱Stack Overflow 上討論的IronXL與流行的替代方案的比較,以及.NET社群中的效能考量。 如需更多檔案格式轉換模式,請造訪Excel 電子表格轉換指南

如何讀取大型 CSV 檔案而不會出現記憶體問題?

處理大型 CSV 檔案(包含數百萬行資料)需要謹慎管理記憶體。 IronXL內部採用延遲加載,這意味著工作表行是按需讀取的,而不是一次性全部讀取。 為了在處理大型資料集時保持較低的記憶體使用量,請分批處理行:

WorkBook workbook = WorkBook.LoadCSV("large-dataset.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");
WorkSheet worksheet = workbook.DefaultWorkSheet;

int batchSize = 1000;
int totalRows = worksheet.RowCount;

for (int start = 1; start <= totalRows; start += batchSize)
{
    int end = Math.Min(start + batchSize - 1, totalRows);
    for (int row = start; row <= end; row++)
    {
        string id   = worksheet[$"A{row}"].StringValue;
        string name = worksheet[$"B{row}"].StringValue;
        // Process each record here
        Console.WriteLine($"Row {row}: {id} - {name}");
    }
    Console.WriteLine($"Processed batch {start}-{end}");
}
WorkBook workbook = WorkBook.LoadCSV("large-dataset.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");
WorkSheet worksheet = workbook.DefaultWorkSheet;

int batchSize = 1000;
int totalRows = worksheet.RowCount;

for (int start = 1; start <= totalRows; start += batchSize)
{
    int end = Math.Min(start + batchSize - 1, totalRows);
    for (int row = start; row <= end; row++)
    {
        string id   = worksheet[$"A{row}"].StringValue;
        string name = worksheet[$"B{row}"].StringValue;
        // Process each record here
        Console.WriteLine($"Row {row}: {id} - {name}");
    }
    Console.WriteLine($"Processed batch {start}-{end}");
}
$vbLabelText   $csharpLabel

此技術可使堆分配保持可預測性,並避免在大數據集上出現記憶體不足錯誤。 匯出時也適用同樣的模式-逐步寫入行,最後儲存一次。 如需更多提示,請參閱檔案大小限制指南

IronXL為企業級 CSV 處理提供了哪些進階功能?

IronXL提供企業級功能,使其區別於基本的 CSV 解析器,包括單元測試支援和調試工具。 該程式庫提供跨平台相容性,可在 Windows、Linux、macOS 和 Docker 容器中運行——這對於現代.NET Core部署和微服務架構至關重要。 根據微軟的文檔,跨平台支援對於雲端原生應用程式和 Azure 部署至關重要。

除了技術能力之外, IronXL 的所有許可證均包含專業支援和定期更新,確保與最新的.NET版本和安全性修補程式相容。 這種商業支援確保了關鍵任務應用程式的可靠性,而開源庫在生產環境中可能無法滿足這些需求。 該庫透過優化的記憶體管理高效處理大型資料集,並支援以下高級場景:

IronXL進階功能概述
特徵 描述 用例
公式計算 導入後對 CSV 資料進行 Excel 公式評估 財務報告、總結
細胞格式保存 轉換過程中保留數字格式與日期樣式 會計匯出,日期敏感數據
多工作表工作簿操作 將多個 CSV 檔案合併到一個工作簿中,並命名工作表。 每月報告匯總
資料聚合 跨範圍求和、平均值、計數 儀表板生成,KPI計算
範圍排序 按一列或多列對行進行排序 按排名輸出,按字母順序輸出

對於需要可擴展性和負載平衡的生產部署,IronXL 的授權模式提供了靈活性,可選擇單一專案、團隊和企業級使用——所有這些都包括原始程式碼存取權限和免版稅再分發權。 購買許可證即可解鎖全部功能,且無浮水印。

如何使用.NET Core CSV 讀取器IronXL的實際範例:圖 10 - 授權

如何應用許可證密鑰?

購買後,請在呼叫任何IronXL方法之前應用您的許可證密鑰:

// Apply license key at application startup
IronXl.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";

// Then proceed with CSV reading as normal
WorkBook workbook = WorkBook.LoadCSV("data.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");
WorkSheet worksheet = workbook.DefaultWorkSheet;
Console.WriteLine($"Loaded {worksheet.RowCount} rows from CSV.");
// Apply license key at application startup
IronXl.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";

// Then proceed with CSV reading as normal
WorkBook workbook = WorkBook.LoadCSV("data.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");
WorkSheet worksheet = workbook.DefaultWorkSheet;
Console.WriteLine($"Loaded {worksheet.RowCount} rows from CSV.");
$vbLabelText   $csharpLabel

將許可證金鑰分配放在應用程式的最早入口點(通常是頂級語句項目中的 Program.cs),以確保所有後續呼叫都已獲得完全許可。 有關逐步說明,請參閱IronXL許可證密鑰指南

如何開始免費試用?

IronXL簡化了.NET Core應用程式中的 CSV 讀取和寫入操作,同時提供了處理複雜場景的靈活性,包括資料分析、報告和自動化任務。 它直觀的 API,結合 Excel 格式支援和企業級功能,使其成為需要成熟的 CSV 處理能力、執行緒安全性和並發存取支援的開發人員的可靠選擇。 該函式庫能夠轉換格式、處理各種分隔符號、執行資料清理,並與現有的.NET資料結構集成,從而顯著縮短開發時間,同時保持程式碼的可維護性。

準備好開始處理 CSV 檔案了嗎? 立即下載IronXL免費試用版,體驗該程式庫如何透過專業級的 CSV 解析功能改變您的資料處理工作流程。 對於生產環境,請探索包含專業支援、文件和持續更新的.NET專案許可選項。

更多延伸閱讀資源:

常見問題解答

IronXL 為何是 .NET Core 中 CSV 處理的理想選擇?

IronXL 可無縫處理 CSV 和 Excel 格式,具有強大的異常處理能力和卓越的效能最佳化,尤其適用於大規模批量處理場景。

IronXL在讀取CSV檔案時如何提高效能?

IronXL 針對大規模批量處理進行了最佳化,能夠流暢地處理不同的分隔符號和資料類型轉換,從而確保高效的 CSV 檔案操作。

IronXL 能否處理 CSV 檔案中不同的分隔符號?

是的,IronXL 可以有效地處理具有各種分隔符的 CSV 文件,使其能夠靈活地應用於不同的資料匯入和匯出場景。

IronXL 是否支援 CSV 處理的非同步操作?

IronXL 支援非同步操作,透過允許非阻塞操作來增強 CSV 解析期間的應用程式回應能力。

IronXL 如何協助為開源 CSV 工具做出貢獻的開發者?

IronXL 提供了一個清晰的 API,對於開發人員來說是一個有價值的參考,尤其是在處理包含重複值、重複條目或需要資料驗證的資料集時。

與其他 CSV 解析庫相比,使用 IronXL 有哪些優勢?

IronXL 的優勢在於其與 Excel 的互通性、強大的異常處理能力和增強的效能,使其成為比 CsvHelper 和 TextFieldParser 等函式庫更全面的解決方案。

IronXL 能否用於 CSV 導入過程中的資料驗證?

是的,IronXL 的功能包括資料驗證,這在資料匯入過程中管理具有重複條目或重複值的資料集時特別有用。

IronXL 與 .NET Core 應用程式相容嗎?

當然,IronXL 旨在與 .NET Core 應用程式無縫集成,為 CSV 讀取和處理提供可靠的解決方案。

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

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me