跳至頁尾內容
使用 IRONXL

如何使用高效的 C# CSV 解析器 IronXL 簡化資料處理

IronXL 提供了一個強大的 C# CSV 解析器,可自動處理複雜的邊緣情況,例如引號的欄位、嵌入式分隔符號和編碼問題,同時提供無縫的 Excel 格式轉換。 這樣就無需編寫自訂解析程式碼,只需幾行程式碼即可可靠地處理 CSV 檔案。

CSV(逗號分隔值)檔案仍然是應用程式、資料庫和系統之間資料交換最廣泛使用的格式之一。 儘管解析 CSV 檔案看似簡單,但在 C# 中正確解析 CSV 檔案很快就會變成一項複雜的挑戰,即使是經驗豐富的開發人員也會為此感到棘手。 從處理包含逗號的帶引號的欄位到管理資料單元格中的換行符,CSV 處理的細微差別需要的不僅僅是基本的字串操作。

許多開發者在開始解析 CSV 檔案時,都會使用簡單的string.Split (',') 方法,但很快就會發現,現實世界中的 CSV 檔案會以無數種方式破壞這些基本實作。 處理具有多列的大型資料集時會出現效能問題,記憶體消耗會失控,極端情況會導致難以偵錯的資料損壞。 這些挑戰導致人們花費無數時間編寫和維護自訂 CSV 解析程式碼,但這些程式碼仍然無法正確處理所有情況。

IronXL提供全面的解決方案,將 CSV 處理從令人沮喪的源泉轉變為精簡、可靠的操作。 作為一個完整的.NET Excel 庫,IronXL 能夠處理 CSV 解析的複雜性,同時提供與 Excel 格式的無縫集成,使其成為處理多種資料格式的應用程式的理想選擇。 無論是匯入客戶資料、處理財務記錄或管理庫存文件,IronXL 的智慧 C# CSV 庫解析器都能消除困擾自訂實作的常見陷阱。 該程式庫設計用於在 LinuxmacOS環境下運行,因此非常適合Docker 部署Azure 雲端應用程式

IronXL 首頁展示了用於讀取 Excel 檔案的 C# 程式碼範例,無需 Microsoft Office 互通相依性

C#中CSV解析的複雜之處是什麼?

CSV 檔案看似簡單,其實隱藏著處理真實世界資料時會遇到的諸多挑戰。 雖然格式看起來很簡單——值之間用逗號分隔——但實際上卻涉及到處理多個極端情況和效能方面的考慮,這可能會破壞基本的解析方法。 根據Stack Overflow上的討論,即使是經驗豐富的開發人員也難以正確處理 CSV 檔案。 當需要處理不同電子表格文件類型和格式且這些文件需要無縫協作時,複雜性就會增加。

為什麼基本的字串分割會失敗?

考慮一下初學者解析 CSV 檔案最常見的方法:

string line = "John,Doe,30,Engineer";
string[] values = line.Split(','); // string array
string line = "John,Doe,30,Engineer";
string[] values = line.Split(','); // string array
$vbLabelText   $csharpLabel

對於簡單情況,這種方法完全有效,但遇到以下情況時會立即失效:

包含嵌入式逗號的引號字段:真實的 CSV 檔案通常包含地址或描述等字段,這些字段的資料本身包含逗號。 像"Smith, John""Developer""New York, NY""50000"這樣的 CSV 行會被錯誤地拆分成五個字段而不是四個字段,從而破壞資料結構,導致後續處理出現錯位。

欄位內的換行符:根據 RFC 4180(CSV 標準),欄位在正確引用時可以包含換行符。 多行位址欄位打破了逐行讀取的方法,需要複雜的狀態管理來追蹤換行符號是出現在引號的欄位中還是代表新記錄。

轉義字元和引號處理: CSV 檔案使用各種約定來轉義帶引號的欄位中的引號。 有些人使用雙引號(""),而有些人則使用反斜線或其他轉義字元。 如果處理不當,諸如"她說,"你好!""之類的問候語資料就會損壞或導致解析錯誤。

不同的分隔符號和編碼:並非所有"CSV"檔案都使用逗號。 製表符分隔值 (TSV)、管道符分隔檔案和分號分隔值是常見的變體。 此外,文件可能使用不同的字元編碼(UTF-8、UTF-16、ANSI),需要進行適當的檢測和轉換,以避免資料損壞,尤其是國際字元。 RFC 4180 標準定義了 CSV 格式規範,但許多實作方式都與該規範有所不同。

大型檔案的記憶體管理:使用 File.ReadAllLines() 將 500MB 的 CSV 檔案完全載入到記憶體中可能會導致嚴重的效能下降或記憶體不足異常。 使用 C# CSV 解析器處理數百萬行資料需要流式處理方法和高效的記憶體管理,以保持應用程式的回應能力。

處理大檔案會出現哪些效能問題?

大型檔案的記憶體管理:使用ReadAllLines () 將 500MB 的 CSV 檔案完全載入到記憶體中可能會導致嚴重的效能下降或記憶體不足異常。 處理數百萬行資料需要流式處理方法和高效的記憶體管理來保持響應速度。 IronXL 的最新效能改進實現了 40 倍的速度提升,同時將記憶體使用量從 19.5 GB 減少到 1 GB 以下。

當處理來自不同來源的 CSV 檔案時,這些複雜性會進一步加劇,因為每個來源可能會使用不同的約定。 建構一個能夠可靠處理所有場景的解析器需要大量的開發工作,並且隨著新的極端情況的出現,還需要持續的維護。 這就是為什麼許多開發人員喜歡使用像 IronXL 這樣經過驗證的程式庫來處理複雜的 Excel 操作,包括 CSV 解析。

IronXL 如何改變 CSV 處理方式?

IronXL 透過提供一個能夠處理現實世界 CSV 複雜性的綜合解析器,徹底革新了 CSV 處理方式,同時保持了極高的易用性。 IronXL 不強迫開發者重複造輪子,而是透過直覺的 API 提供完整的解決方案,解決所有常見的 CSV 問題。 立即下載 IronXL,體驗 CSV 解析工作流程的顯著變化。

IronXL有哪些核心特性使其與眾不同?

最新更新和穩定性改進: IronXL 透過定期更新和社群回饋不斷發展。 在最近的版本中,幾項關鍵改進和錯誤修復更新提高了 CSV 解析準確性、檔案編碼檢測和記憶體效率。 這些更新確保開發人員即使在處理大型或不規則資料集時也能獲得一致的結果,從而消除了早期自訂 CSV 實作中發現的許多陷阱。

智慧解析引擎: IronXL 的解析器會自動偵測並處理資料中的引號欄位、嵌入式分隔符號和換行符。 該引擎無需手動配置即可適應不同的 CSV 方言,無論文件遵循嚴格的 RFC 4180 標準還是使用常見變體,都能正確解釋文件。

靈活的分隔符號支援:雖然逗號仍然是預設分隔符,但 IronXL 可以透過簡單的配置選項輕鬆處理任何分隔符。 無論是處理製表符分隔的文件、管道符分隔的匯出文件,還是分號分隔的歐洲格式,同一個簡潔的 API 都能一致地處理所有變體。 請參閱我們的CSV 讀取教學課程以取得詳細範例。

Excel 整合卓越性:與獨立的 CSV 解析器不同,IronXL 提供 CSV 和 Excel 格式之間的無縫雙向轉換。 此功能支援將 CSV 資料匯入 Excel 工作簿以進行高級格式設定、公式應用和圖表生成等工作流程——所有這些都可以透過 C# 程式碼以程式設計方式完成。

跨平台可靠性: IronXL 可在 Windows、Linux 和 macOS 環境下穩定運行,使其成為現代雲端原生應用程式的理想選擇。 該程式庫支援在 Docker 和 Kubernetes 中進行容器化部署,確保 CSV 處理邏輯無論是在開發人員的機器上運行,還是在 Azure 或 AWS 上的生產容器中運行,都能以相同的方式運作。

記憶體高效架構:本庫採用最佳化的記憶體管理技術,能夠在不消耗過多記憶體的情況下處理大型 CSV 檔案。 IronXL 透過高效的串流和緩衝策略處理數 GB 的文件,即使處理數百萬行資料也能保持響應速度。

為什麼選擇 IronXL 進行跨平台開發?

跨平台可靠性:IronXL 可在 Windows、Linux 和 macOS 上穩定運行,使其成為雲端原生應用程式的理想選擇。 該程式庫支援在 Docker 和 Kubernetes 中進行容器化部署,確保無論是在本地運行還是在 Azure 或 AWS 上的生產容器中運行,CSV 處理都能以相同的方式運作。 對於AWS Lambda 部署,IronXL 提供具體的最佳化指導。

記憶體高效架構:此程式庫採用最佳化的記憶體管理,可在不造成過度消耗的情況下處理大型 CSV 檔案。 IronXL 透過高效的串流和緩衝來處理數 GB 的文件,即使處理數百萬行資料也能保持響應速度。 在處理大型資料集和執行聚合函數時,這些最佳化至關重要。

跨平台支援圖顯示了 C#、F# 和 VB.NET 在 .NET 版本 9、8、7、6、Core、Standard 和 Framework 上的相容性,圖示代表各種平台和部署環境。

我該如何開始使用 IronXL?

使用 IronXL 只需幾個簡單的步驟。 該程式庫可透過微軟的套件管理系統 NuGet 無縫整合到任何 .NET 專案中。 如需詳細的安裝說明,請造訪我們的安裝指南。如果您正在使用Blazor 應用程式.NET MAUI 項目,IronXL 會提供專門的整合指導。

安裝步驟有哪些?

首先,透過 NuGet 套件管理器控制台安裝 IronXL:

Install-Package IronXL.Excel

PowerShell 控制台輸出顯示透過 NuGet 套件管理器成功安裝了 IronXL.Excel 套件及其相依性。

或者,對於現代 .NET 項目,可以使用 .NET CLI:

dotnet add package IronXL.Excel
dotnet add package IronXL.Excel
SHELL

有關許可設定應用許可金鑰,請參閱我們的許可文件。 對於 Web 應用程序,您可以在 Web.config 中設定許可證金鑰

如何載入我的第一個 CSV 檔案?

安裝完成後,將 IronXL 命名空間新增至您的 C# 檔案:

using IronXL;
using IronXL;
$vbLabelText   $csharpLabel

讓我們從一個簡單的例子開始,示範如何載入和讀取 CSV 檔案:

// Load a CSV file
var reader = WorkBook.LoadCSV("customers.csv");
// Access the default worksheet (CSV files have one sheet)
WorkSheet sheet = reader.DefaultWorkSheet;
// Read a specific cell value
string customerName = sheet["B2"].StringValue;
// Display the value
Console.WriteLine($"Customer: {customerName}");
// Load a CSV file
var reader = WorkBook.LoadCSV("customers.csv");
// Access the default worksheet (CSV files have one sheet)
WorkSheet sheet = reader.DefaultWorkSheet;
// Read a specific cell value
string customerName = sheet["B2"].StringValue;
// Display the value
Console.WriteLine($"Customer: {customerName}");
$vbLabelText   $csharpLabel

這段程式碼示範了幾個關鍵概念。首先, WorkBook ()方法能夠智慧地解析 CSV 文件,自動偵測分隔符號並處理帶有引號的欄位。 此方法傳回一個WorkBook對象,這是 IronXL 用於儲存電子表格資料的主要容器。 由於 CSV 檔案包含單一工作表,我們透過DefaultWorkSheet存取它。 最後,我們使用 Excel 風格的儲存格引用,透過型別安全的存取器(如StringValue`來存取值。 有關高級單元格操作,請參閱我們關於單元格格式化單元格資料格式的指南。

輸入

! Excel 電子表格顯示了一個客戶資料庫,其中包含 CustomerID、FirstName、LastName、Email、City 和 Country 列,以及 10 行範例客戶資料。

輸出

Visual Studio 偵錯控制台顯示輸出,其中包含文字"客戶:Emily"

如何使用 IronXL 讀取 CSV 檔案?

使用 IronXL 讀取 CSV 檔案提供了多種方法,可應對不同的場景,從簡單的資料提取到複雜的處理工作流程。 此程式庫靈活的 API 可適應各種讀取模式,同時保持對不同檔案類型的一致行為。無論是開啟 Excel 工作表還是讀取 XLSX 文件,IronXL 都提供一致的資料存取方法。

! C# 電子表格操作庫的功能概述,展示了六個主要類別:建立、儲存和匯出、編輯工作簿、處理資料、保護工作簿和處理儲存格。

讀取 CSV 資料的基本方法是什麼?

最直接的方法是使用預設設定的 LoadCSV:

// Load CSV with automatic delimiter detection
WorkBook workbook = WorkBook.LoadCSV("sales_data.csv");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Iterate through rows
for (var row = 1; row <= sheet.RowCount; row++)
{
    // Read cells in the current row
    string productName = sheet[$"A{row}"].StringValue;
    decimal price = sheet[$"B{row}"].DecimalValue;
    int quantity = sheet[$"C{row}"].IntValue;
    Console.WriteLine($"Product: {productName}, Price: ${price}, Qty: {quantity}");
}
// Load CSV with automatic delimiter detection
WorkBook workbook = WorkBook.LoadCSV("sales_data.csv");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Iterate through rows
for (var row = 1; row <= sheet.RowCount; row++)
{
    // Read cells in the current row
    string productName = sheet[$"A{row}"].StringValue;
    decimal price = sheet[$"B{row}"].DecimalValue;
    int quantity = sheet[$"C{row}"].IntValue;
    Console.WriteLine($"Product: {productName}, Price: ${price}, Qty: {quantity}");
}
$vbLabelText   $csharpLabel

此範例展示了逐行遍歷 CSV 資料的過程。 從第 1 行開始(假設第 0 行是標題行),依序處理每一行。 IronXL 的類型化存取器會自動將文字轉換為適當的 .NET 類型,從而消除手動解析。 迴圈繼續遍歷所有行,使用RowCount ,它準確地反映了資料行總數。 對於複雜的操作,您可以動態新增行和列插入新行

如何處理非標準分隔符號?

對於使用非標準分隔符號的 CSV 文件,IronXL 提供了配置選項:

// Load a tab-separated file
WorkBook workbook = WorkBook.LoadCSV("inventory.tsv", 
    fileFormat: ExcelFileFormat.XLSX, 
    listDelimiter: "\t");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Process header row
var headers = new List<string>();
for (int col = 0; col < sheet.ColumnCount; col++)
{
    headers.Add(sheet.GetCellAt(0, col).StringValue);
}
// Display headers
Console.WriteLine("Columns: " + string.Join(" | ", headers));
// Load a tab-separated file
WorkBook workbook = WorkBook.LoadCSV("inventory.tsv", 
    fileFormat: ExcelFileFormat.XLSX, 
    listDelimiter: "\t");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Process header row
var headers = new List<string>();
for (int col = 0; col < sheet.ColumnCount; col++)
{
    headers.Add(sheet.GetCellAt(0, col).StringValue);
}
// Display headers
Console.WriteLine("Columns: " + string.Join(" | ", headers));
$vbLabelText   $csharpLabel

LoadCSV 接受可選參數以自訂解析。 listDelimiter 參數指定欄位分隔符號-對於 TSV 文件,此處為製表符。 fileFormat 參數決定解析後的內部表示形式。 此範例示範如何使用數值索引進行列迭代來建立標題清單。 您也可以透過程式設計方式自動調整列寬設定列高

輸入

螢幕截圖顯示了一個名為inventory.tsv的製表符分隔值 (TSV) 文件,該文件顯示在文字編輯器中,其中顯示了一個產品庫存表,包含 ItemID、ItemName、Category、Quantity、UnitPrice 和 Supplier 等列。

輸出

Visual Studio 偵錯控制台顯示 CSV 欄位標題:ItemID、ItemName、Category、Quantity、UnitPrice 和 Supplier

我可以執行哪些靶場操作?

處理 CSV 資料通常需要基於範圍的操作。 如需了解進階操作,請參閱我們的Excel 區域教學

var csv = WorkBook.LoadCSV("employees.csv");
WorkSheet sheet = csv.DefaultWorkSheet;
// Read a range of cells
var range = sheet["A2:D10"];
// Process all cells in the range
foreach (var cell in range)
{
    if (!cell.IsEmpty)
    {
        Console.WriteLine($"Cell {cell.AddressString}: {cell.Text}");
    }
}
// Calculate sum of a numeric column
decimal totalSalary = sheet["E2:E100"].Sum();
Console.WriteLine($"Total Salary: ${totalSalary:N2}");
var csv = WorkBook.LoadCSV("employees.csv");
WorkSheet sheet = csv.DefaultWorkSheet;
// Read a range of cells
var range = sheet["A2:D10"];
// Process all cells in the range
foreach (var cell in range)
{
    if (!cell.IsEmpty)
    {
        Console.WriteLine($"Cell {cell.AddressString}: {cell.Text}");
    }
}
// Calculate sum of a numeric column
decimal totalSalary = sheet["E2:E100"].Sum();
Console.WriteLine($"Total Salary: ${totalSalary:N2}");
$vbLabelText   $csharpLabel

靶場作業提供強大的資料處理能力。 範圍選擇器的語法與 Excel 的慣例一致,因此非常直觀。 foreach 迴圈遍歷範圍內的單元格,而IsEmpty則有助於有效率地跳過空白單元格。 IronXL 透過 Sum()、Average() 和 Max() 等聚合函數擴展了範圍,無需手動迭代即可進行計算。 請查看我們的API 參考文件以了解可用方法。 您也可以合併多個範圍並對範圍內的資料進行排序

如何處理帶有文件頭的文件?

處理帶有標題的 CSV 檔案需要特別注意。 該庫提供了處理命名範圍建立命名表的方法,以便更好地組織資料:

WorkBook workbook = WorkBook.LoadCSV("products_with_headers.csv");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Skip header row and process var data
for (int row = 1; row <= sheet.RowCount; row++)
{
    var rowData = sheet.GetRow(row);
    // Access cells by index based on known column positions
    string sku = rowData.Columns[0].StringValue;      // Column A
    string description = rowData.Columns[1].StringValue; // Column B
    decimal cost = rowData.Columns[2].DecimalValue;    // Column C
    // Process the data
    ProcessProduct(sku, description, cost);
}
void ProcessProduct(string sku, string description, decimal cost)
{
    // Business logic here
    Console.WriteLine($"Processing: {sku} - {description} (${cost})");
}
WorkBook workbook = WorkBook.LoadCSV("products_with_headers.csv");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Skip header row and process var data
for (int row = 1; row <= sheet.RowCount; row++)
{
    var rowData = sheet.GetRow(row);
    // Access cells by index based on known column positions
    string sku = rowData.Columns[0].StringValue;      // Column A
    string description = rowData.Columns[1].StringValue; // Column B
    decimal cost = rowData.Columns[2].DecimalValue;    // Column C
    // Process the data
    ProcessProduct(sku, description, cost);
}
void ProcessProduct(string sku, string description, decimal cost)
{
    // Business logic here
    Console.WriteLine($"Processing: {sku} - {description} (${cost})");
}
$vbLabelText   $csharpLabel

對於進階頁首處理,您可以凍結窗格以保持頁首可見,或設定帶有重複頁首的列印配置

輸入

! Excel 電子表格顯示了一個產品庫存表,其中包含 ProductID、ProductName、Category、Stock、UnitPrice 和 Supplier 等列,共包含 10 行科技產品。

輸出

控制台輸出顯示正在處理來自 CSV 檔案的 10 個電子產品,每個產品都包含產品 ID、名稱和 0 美元的價格值

如何處理複雜的CSV場景?

現實世界中的 CSV 檔案通常包含複雜的結構,簡單的解析方法很難奏效。 IronXL 能夠優雅地處理這些具有挑戰性的場景,為引號的欄位、特殊字元、編碼問題和非標準格式提供強大的解決方案。 該程式庫的安全功能還確保安全處理潛在的惡意 CSV 文件,並提供全面的CVE 保護

IronXL 如何處理引號的欄位和特殊字元?

讓我們來探討如何處理包含分隔符號的引號欄位的 CSV 檔案:

// CSV with complex quoted fields
string csvContent = @"Name,Description,Price,Category
""Johnson, Mike"",""Premium keyboard with ""mechanical"" switches"",149.99,Electronics
""O'Brien, Sarah"",""Children's toy - ages 3+"",29.99,Toys";
// Save content to file for demonstration
File.WriteAllText("complex_data.csv", csvContent);
// Load and process the CSV
WorkBook workbook = WorkBook.LoadCSV("complex_data.csv");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Read the complex fields
for (int row = 1; row <= sheet.RowCount; row++)
{
    string name = sheet[$"A{row}"].StringValue;
    string description = sheet[$"B{row}"].StringValue;
    Console.WriteLine($"Name: {name}");
    Console.WriteLine($"Description: {description}");
    Console.WriteLine("---");
}
// CSV with complex quoted fields
string csvContent = @"Name,Description,Price,Category
""Johnson, Mike"",""Premium keyboard with ""mechanical"" switches"",149.99,Electronics
""O'Brien, Sarah"",""Children's toy - ages 3+"",29.99,Toys";
// Save content to file for demonstration
File.WriteAllText("complex_data.csv", csvContent);
// Load and process the CSV
WorkBook workbook = WorkBook.LoadCSV("complex_data.csv");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Read the complex fields
for (int row = 1; row <= sheet.RowCount; row++)
{
    string name = sheet[$"A{row}"].StringValue;
    string description = sheet[$"B{row}"].StringValue;
    Console.WriteLine($"Name: {name}");
    Console.WriteLine($"Description: {description}");
    Console.WriteLine("---");
}
$vbLabelText   $csharpLabel

IronXL 可自動處理複雜的參考欄位。 儘管包含逗號,"Johnson, Mike" 被正確解釋為單一字段,並且能夠正確處理描述中的嵌套引用。 該函式庫遵循 CSV 標準,將雙引號視為轉義序列。 這種自動處理方式可以省去複雜的正規表示式或狀態機。 如需對文字進行其他操作,您可以為儲存格新增註解套用文字樣式

字符編碼問題該如何處理?

使用不同的字符編碼需要仔細考慮。 IronXL 可自動處理各種檔案格式和編碼:

// Load CSV with specific encoding
WorkBook workbook = WorkBook.Load("international_data.csv");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Process international characters
for (int row = 1; row <= sheet.RowCount; row++)
{
    string city = sheet[$"A{row}"].StringValue;
    string country = sheet[$"B{row}"].StringValue;
    // Characters like ñ, ü, é display correctly
    Console.WriteLine($"Location: {city}, {country}");
}
// Save with UTF-8 encoding to preserve characters
workbook.SaveAsCsv("output_utf8.csv");
// Load CSV with specific encoding
WorkBook workbook = WorkBook.Load("international_data.csv");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Process international characters
for (int row = 1; row <= sheet.RowCount; row++)
{
    string city = sheet[$"A{row}"].StringValue;
    string country = sheet[$"B{row}"].StringValue;
    // Characters like ñ, ü, é display correctly
    Console.WriteLine($"Location: {city}, {country}");
}
// Save with UTF-8 encoding to preserve characters
workbook.SaveAsCsv("output_utf8.csv");
$vbLabelText   $csharpLabel

IronXL 能夠聰明地偵測和處理各種編碼,確保國際字元正確顯示。 無論使用 UTF-8、UTF-16 或傳統的 ANSI 編碼,此函式庫都能在讀寫週期中保持字元完整性。 IronXL 在儲存 CSV 檔案時,預設使用 UTF-8 編碼以實現最大相容性。 您也可以匯出為多種格式,包括HTMLJSON

輸入

! Excel 電子表格顯示國際數據,包含國家、地區、人口、GDP(美元)和貨幣等列,顯示 15 個不同國家及其各自的經濟資訊。

輸出

Visual Studio 偵錯控制台顯示位置數據,包括多種語言的國家/地區名稱和區域,顯示來自歐洲、北美洲、南美洲、非洲和亞洲的國家。

輸出結果顯示 UTF-8 編碼成功,正確顯示了包含特殊字元的國家/地區名稱,例如México、Deutschland、République Démocratique du Congo和Česká republika。

如何使用自訂分隔符號和區域格式?

自訂分隔符號和格式需要靈活的配置。 IronXL 支援多種號碼格式和區域設定:

// European CSV format (semicolon delimiter, comma decimal)
string europeanCsv = @"Product;Price;Quantity
Widget A;12,50;100
Gadget B;24,99;50";
File.WriteAllText("european.csv", europeanCsv);
// Load with semicolon delimiter
WorkBook workbook = WorkBook.LoadCSV("european.csv", 
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ";");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Parse European number format
for (int row = 1; row <= sheet.RowCount; row++)
{
    string product = sheet[$"A{row}"].StringValue;
    string priceText = sheet[$"B{row}"].StringValue;
    // Convert European format to decimal
    decimal price = decimal.Parse(priceText.Replace(',', '.'));
    Console.WriteLine($"{product}: €{price}");
}
// European CSV format (semicolon delimiter, comma decimal)
string europeanCsv = @"Product;Price;Quantity
Widget A;12,50;100
Gadget B;24,99;50";
File.WriteAllText("european.csv", europeanCsv);
// Load with semicolon delimiter
WorkBook workbook = WorkBook.LoadCSV("european.csv", 
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ";");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Parse European number format
for (int row = 1; row <= sheet.RowCount; row++)
{
    string product = sheet[$"A{row}"].StringValue;
    string priceText = sheet[$"B{row}"].StringValue;
    // Convert European format to decimal
    decimal price = decimal.Parse(priceText.Replace(',', '.'));
    Console.WriteLine($"{product}: €{price}");
}
$vbLabelText   $csharpLabel

本範例採用歐洲 CSV 規範,其中分號分隔字段,逗號表示小數點。 listDelimiter 參數用於配置欄位拆分。 對於數字解析,程式碼將歐洲十進位表示法轉換為 .NET 期望的格式。 這種靈活性使得無需修改來源資料即可處理來自任何地區的 CSV 檔案。 您也可以套用儲存格邊框和對齊方式,以獲得更好的展示效果。

如何高效處理大型 CSV 檔案?

處理大型 CSV 檔案會帶來獨特的挑戰,需要採用周全的記憶體管理和效能最佳化方法。 IronXL 提供了多種策略來處理包含數百萬行的文件,而不會使系統資源不堪重負。 對於處理大量資料集的企業應用程序,請考慮購買商業許可證以解鎖全部效能功能。 該庫的檔案大小限制處理機制確保即使處理非常大的檔案也能穩定運作。

批量處理的最佳方法是什麼?

對於可以放入記憶體但包含大量行的文件,批次處理可以提高效率:

WorkBook workbook = WorkBook.LoadCSV("large_dataset.csv");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Process in batches of 1000 rows
int batchSize = 1000;
int totalRows = sheet.RowCount;
for (int startRow = 1; startRow <= totalRows; startRow += batchSize)
{
    int endRow = Math.Min(startRow + batchSize - 1, totalRows);
    // Process current batch
    var batchResults = new List<ProcessedRecord>();
    for (int row = startRow; row <= endRow; row++)
    {
        string id = sheet[$"A{row}"].StringValue;
        decimal amount = sheet[$"B{row}"].DecimalValue;
        // Process and store results
        batchResults.Add(new ProcessedRecord 
        { 
            Id = id, 
            Amount = amount,
            Processed = DateTime.Now 
        });
    }
    // Save batch results (to database, file, etc.)
    SaveBatch(batchResults);
    Console.WriteLine($"Processed rows {startRow} to {endRow}");
}
void SaveBatch(List<ProcessedRecord> records)
{
    // Implement batch saving logic
    Console.WriteLine($"Saved {records.Count} records");
}
class ProcessedRecord
{
    public string Id { get; set; }
    public decimal Amount { get; set; }
    public DateTime Processed { get; set; }
}
WorkBook workbook = WorkBook.LoadCSV("large_dataset.csv");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Process in batches of 1000 rows
int batchSize = 1000;
int totalRows = sheet.RowCount;
for (int startRow = 1; startRow <= totalRows; startRow += batchSize)
{
    int endRow = Math.Min(startRow + batchSize - 1, totalRows);
    // Process current batch
    var batchResults = new List<ProcessedRecord>();
    for (int row = startRow; row <= endRow; row++)
    {
        string id = sheet[$"A{row}"].StringValue;
        decimal amount = sheet[$"B{row}"].DecimalValue;
        // Process and store results
        batchResults.Add(new ProcessedRecord 
        { 
            Id = id, 
            Amount = amount,
            Processed = DateTime.Now 
        });
    }
    // Save batch results (to database, file, etc.)
    SaveBatch(batchResults);
    Console.WriteLine($"Processed rows {startRow} to {endRow}");
}
void SaveBatch(List<ProcessedRecord> records)
{
    // Implement batch saving logic
    Console.WriteLine($"Saved {records.Count} records");
}
class ProcessedRecord
{
    public string Id { get; set; }
    public decimal Amount { get; set; }
    public DateTime Processed { get; set; }
}
$vbLabelText   $csharpLabel

批次處理將大型資料集分成可管理的小塊,防止記憶體過載並實現進度追蹤。 一次處理 1000 行資料時,結果會暫時累積,然後再儲存。 這種方法允許在批次之間進行垃圾回收,從而保持穩定的記憶體使用。 這種模式也有助於錯誤恢復——從上一個成功的批次恢復,而不是重新開始。 為了提高處理效率,可以考慮將行和列分組,或使用修剪操作刪除不必要的資料。

輸入

Microsoft Excel 電子表格顯示一個大型資料集,其中包含國家/地區、地區、城市、人口、GDP、貨幣、緯度和經度等列,顯示各種國際資料條目。

輸出

控制台輸出顯示正在以 1000 筆記錄為一組對 CSV 記錄進行批次處理,並顯示第 1 行到第 10001 行的進度訊息。

如何使用 LINQ 實現記憶體高效處理?

對於不應將整個檔案載入到記憶體中的串流場景:

// Alternative approach using row-by-row processing
public static void ProcessLargeCsvEfficiently(string filePath)
{
    WorkBook workbook = WorkBook.LoadCSV(filePath);
    WorkSheet sheet = workbook.DefaultWorkSheet;
    // Use LINQ for memory-efficient processing
    var results = Enumerable.Range(1, sheet.RowCount)
        .Select(row => new
        {
            Row = row,
            Value = sheet[$"A{row}"].DecimalValue
        })
        .Where(item => item.Value > 100) // Filter criteria
        .Take(10000); // Limit results
    // Process results as they're enumerated
    foreach (var item in results)
    {
        Console.WriteLine($"Row {item.Row}: {item.Value}");
    }
}
// Alternative approach using row-by-row processing
public static void ProcessLargeCsvEfficiently(string filePath)
{
    WorkBook workbook = WorkBook.LoadCSV(filePath);
    WorkSheet sheet = workbook.DefaultWorkSheet;
    // Use LINQ for memory-efficient processing
    var results = Enumerable.Range(1, sheet.RowCount)
        .Select(row => new
        {
            Row = row,
            Value = sheet[$"A{row}"].DecimalValue
        })
        .Where(item => item.Value > 100) // Filter criteria
        .Take(10000); // Limit results
    // Process results as they're enumerated
    foreach (var item in results)
    {
        Console.WriteLine($"Row {item.Row}: {item.Value}");
    }
}
$vbLabelText   $csharpLabel

這種基於 LINQ 的方法利用延遲執行按需處理行。 該查詢建立了一個延遲執行的處理管道,僅在需要時才讀取和篩選行。 Take 方法提供了一個上限,防止查詢失控。 這種模式非常適合在大型文件中尋找特定記錄,而無需處理所有文件。 您也可以從 SQL 資料庫載入資料匯出為 SQL 格式,以便更好地進行系統整合。

如何實現CSV和Excel格式之間的轉換?

IronXL 的一個突出特點是 CSV 和 Excel 格式之間的無縫轉換,從而能夠利用兩種格式的優勢進行工作流程。 當需要將 CSV 資料匯入 Excel 進行進階處理,或需要將 Excel 報表匯出為 CSV 檔案進行系統整合時,此功能非常寶貴。 請在我們的文件中了解更多關於文件格式轉換的資訊。 該庫支援保存和匯出為多種格式,包括CSV 到 DataTable 的轉換

為什麼要將 CSV 檔案轉換為 Excel?

將 CSV 檔案轉換為 Excel 檔案並保留格式,可增強資料呈現效果並啟用進階功能:

// Load CSV file
WorkBook workbook = WorkBook.LoadCSV("sales_report.csv");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Apply formatting to enhance readability
// Format header row
for (int col = 0; col < sheet.ColumnCount; col++)
{
    var headerCell = sheet.GetCellAt(0, col);
    headerCell.Style.Font.Bold = true;
    headerCell.Style.BackgroundColor = "#4472C4";
    headerCell.Style.Font.Color = "#FFFFFF";
}
// Format currency columns
for (int row = 1; row <= sheet.RowCount; row++)
{
    var priceCell = sheet[$"C{row}"];
    priceCell.FormatString = "$#,##0.00";
    var quantityCell = sheet[$"D{row}"];
    quantityCell.Style.HorizontalAlignment = HorizontalAlignment.Right;
}
// Auto-fit columns for better display
for (int col = 0; col < sheet.ColumnCount; col++)
{
    sheet.AutoSizeColumn(col);
}
// Save as Excel file with formatting preserved
workbook.SaveAs("formatted_report.xlsx");
Console.WriteLine("CSV converted to formatted Excel file");
// Load CSV file
WorkBook workbook = WorkBook.LoadCSV("sales_report.csv");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Apply formatting to enhance readability
// Format header row
for (int col = 0; col < sheet.ColumnCount; col++)
{
    var headerCell = sheet.GetCellAt(0, col);
    headerCell.Style.Font.Bold = true;
    headerCell.Style.BackgroundColor = "#4472C4";
    headerCell.Style.Font.Color = "#FFFFFF";
}
// Format currency columns
for (int row = 1; row <= sheet.RowCount; row++)
{
    var priceCell = sheet[$"C{row}"];
    priceCell.FormatString = "$#,##0.00";
    var quantityCell = sheet[$"D{row}"];
    quantityCell.Style.HorizontalAlignment = HorizontalAlignment.Right;
}
// Auto-fit columns for better display
for (int col = 0; col < sheet.ColumnCount; col++)
{
    sheet.AutoSizeColumn(col);
}
// Save as Excel file with formatting preserved
workbook.SaveAs("formatted_report.xlsx");
Console.WriteLine("CSV converted to formatted Excel file");
$vbLabelText   $csharpLabel

此轉換過程使用我們高效的 C# CSV 解析器將普通的 CSV 資料轉換為專業格式的 Excel 工作簿。 此程式碼對標題套用粗體格式和顏色,從而創建視覺層次結構。 使用千位分隔符號的貨幣格式可以提高數字的可讀性。 AutoSizeColumn會根據內容自動調整列寬。 產生的 Excel 檔案在電子表格應用程式中開啟時,所有格式都將保持不變。 更多選項,請參閱我們的儲存格格式指南。 您還可以新增背景圖案和顏色合併儲存格新增超連結以增強互動性。

對於容器化部署,IronXL 的 Excel 轉換功能可以在 Docker 環境中無縫運作。 該程式庫不需要任何外部相依性或 Office 安裝,因此非常適合雲端原生架構。 部署到 Kubernetes 時,建立輕量級容器來處理 CSV 文件並產生格式化的 Excel 報告,而無需傳統的 Office 自動化開銷。 對於高可用性場景,IronXL 的線程安全操作支援跨多個容器實例進行水平擴展,每個實例獨立處理 CSV 文件,同時共用公共資料儲存。

輸入

! Excel 電子表格顯示銷售數據,包含銷售 ID、日期、地區、產品、銷售代表、數量、單價、總銷售額和貨幣等列,共 26 行國際銷售數據。

輸出

Visual Studio 偵錯控制台在轉換成功後顯示訊息"CSV 已轉換為已格式化的 Excel 檔案"。

圖 18:格式化的 Excel 輸出顯示了來自 CSV 解析器的已處理銷售數據,其中列格式正確,包括混合貨幣(美元、英鎊、歐元、印度盧比、澳元、巴西雷亞爾)和已應用的數位格式。

為什麼選擇 IronXL 進行 CSV 處理?

IronXL 將 CSV 處理從一項複雜的挑戰轉變為精簡的操作,消除了困擾自訂實現的無數極端情況和效能問題。 此函式庫的智慧型解析器可自動處理引號的欄位、特殊字元和各種分隔符,同時提供 CSV 和 Excel 格式之間的無縫轉換。 無論是匯入客戶資料、處理財務記錄或在格式之間進行轉換,IronXL 強大的 C# CSV 解析器都能處理這些複雜情況,讓您可以專注於業務邏輯。

圖書館對持續改進的承諾體現在產品里程碑和定期更新中。 IronXL 提供全面的文檔,涵蓋從ASP.NET 整合VB.NET 支援等各個方面,為開發人員提供成功所需的資源。 該圖書館的企業級功能包括工作簿加密工作表保護,以實現安全的資料處理。

準備好簡化您的 CSV 處理工作流程了嗎? 立即開始 IronXL 的免費試用,我們提供不同等級的授權選項,適合各種規模的團隊。 對於現有用戶,我們提供許可證擴展服務以擴展部署能力。

IronXL 授權頁面顯示四個定價等級(Lite 版 749 美元,Plus 版 999 美元,Professional 版 1,999 美元,Unlimited 版 3,999 美元),並提供 IronXL 和 Iron Suite 選項之間的切換

常見問題解答

什麼是 CSV 檔案?為什麼它被廣泛使用?

CSV(逗號分隔值)檔案是一種簡單的文字資料交換格式,由於其簡單易用,易於與各種應用程式、資料庫和系統集成,因此被廣泛使用。

在 C# 中解析 CSV 檔案時可能會遇到哪些挑戰?

由於處理包含逗號的帶引號的欄位、管理資料單元格中的換行符以及其他超出基本字串操作的細微差別等問題,在 C# 中解析 CSV 檔案可能很複雜。

IronXL 如何幫助 C# 解析 CSV 檔案?

IronXL 為 C# 中的 CSV 檔案解析提供了一個強大的解決方案,其高效的解析功能簡化了複雜的任務,並確保了準確的資料處理。

IronXL有哪些特性使其適合解析CSV檔案?

IronXL 提供處理帶引號的欄位、管理換行符以及提供高效的資料處理功能等特性,使其適合解析複雜的 CSV 檔案。

IronXL 是否相容於不同的 CSV 格式?

是的,IronXL 的設計相容於各種 CSV 格式,使開發人員能夠簡化不同系統和應用程式之間的資料處理任務。

IronXL能否高效處理大型CSV檔案?

IronXL 經過最佳化,能夠有效處理大型 CSV 文件,確保快速且準確地進行資料處理,而不會影響效能。

IronXL 是否支援 CSV 解析後的資料操作?

是的,IronXL 不僅可以解析 CSV 文件,還支援資料操作和轉換,使開發人員能夠無縫地處理資料。

IronXL 如何確保 CSV 解析過程中的資料準確性?

IronXL 採用先進的解析技術來處理複雜的 CSV 結構,確保在解析過程中資料的準確性和完整性。

IronXL 與其他 CSV 解析庫有何不同?

IronXL 以其全面的功能集、高效性和易用性脫穎而出,為開發人員提供了一個強大的工具來處理 CSV 解析難題。

哪裡可以找到更多關於使用 IronXL 進行 CSV 解析的資源?

您可以在 Iron Software 網站及其文件頁面上找到更多關於使用 IronXL 進行 CSV 解析的資源和指南。

喬迪·巴迪亞
軟體工程師
喬迪精通Python、C#和C++,除了在Iron Software運用這些技能外,他還從事遊戲程式設計。他參與產品測試、產品開發和研究等工作,為產品的持續改進做出了巨大貢獻。豐富的經驗讓他始終保持挑戰性和工作熱情,他表示這是他最喜歡在Iron Software工作的原因之一。喬迪在佛羅裡達州邁阿密長大,畢業於佛羅裡達大學,主修電腦科學和統計學。