在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
處理 CSV 文件可能是一項具有挑戰性的任務。 如今,有許多庫可以幫助開發者完成這項任務,而無需安裝 Microsoft Excel。
在本文中,我們將討論和比較如何使用兩個最受歡迎的程式庫,IronXL 和 CsvHelper,在 C# .NET 技術中以程式方式處理 Microsoft Excel 文件,無論是 CSV 格式還是標準 XLSX 格式。
首先,我們來看看這兩個庫提供了什麼。
IronXL 是一個 .NET 函式庫,方便使用 C# 讀取和編輯 Microsoft Excel 文件。 IronXL.Excel 是一個獨立的 .NET 軟體庫,用於讀取多種電子表格格式。 它不需要安裝Microsoft Excel,也不依賴於Interop。它與CSV檔案配合得非常順利。
IronXL 是一個直觀的 C# API,允許您在 .NET 中以極快的速度讀取、編輯和創建 Excel 試算表文件。 IronXL 完全支持 .NET Core、.NET Framework、Xamarin、行動裝置、Linux、macOS 和 Azure。
IronXL 是一個領先的 .NET Core 和 .NET Framework C# Excel 試算表庫。
.NET 程式庫,用於讀取和寫入 CSV 文件。 極快、靈活且易於使用。 支持讀取和寫入自定義類別物件。 所有範例代碼均可在 CsvHelper 文檔安裝包中獲得。
CsvConfiguration
用於設置 CSV 配置的類別串流讀取器
CsvReader
類別讀取預設類型轉換器
類別使用以下步驟來創建一個控制台應用程式:
建立專案 - 控制台應用程式
在 附加資訊 畫面中,指定您要使用的 Framework 版本。 在此範例中,我們將使用 .NET Framework 4.8。
創建專案 - .NET Framework
點擊 Create 完成過程。
項目現已創建,我們幾乎準備好測試這些庫。 但是,我們仍然需要安裝並將它們整合到我們的專案中。 讓我們先安裝IronXL。
您可以使用以下方法下載並安裝IronXL庫:
使用 Visual Studio 與 NuGet 套件
直接下載 NuGet 套件
手動使用DLL安裝
讓我們更仔細地看看每一個。
Visual Studio 提供 NuGet 套件管理器以在您的專案中安裝 NuGet 套件。 您可以通過專案選單存取它,或在方案總管中右鍵點擊您的專案。
選擇-管理-NuGet-套件
現在,從瀏覽標籤 -> 搜尋 IronXL.Excel -> 安裝
搜索 IronXL
這可以透過直接訪問 NuGet 網站並下載套件來完成。 步驟如下:
另一種下載和安裝 IronXL C# 庫的方法是使用以下步驟通過開發人員命令提示符安裝 IronXL NuGet package。
PM > Install-Package IronXL.Excel
在解決方案總管中,右鍵單擊 Program.cs 文件,然後點選查看程式碼。
using IronXL;
using IronXL;
Imports IronXL
全部完成! IronXL 已下載、安裝並準備好使用。 不過,在此之前我們應該安裝 CsvHelper。
要下載和安裝 CsvHelper C# 庫,請按照以下步驟通過開發人員命令提示符安裝 NuGet 套件。
PM> Install-Package CsvHelper -Version 27.2.1
從 NuGet 網站下載: https://www.nuget.org/packages/CsvHelper/
逗號分隔值(CSV)*** 檔案是一個以逗號分隔值的分隔文本檔案。 文件的每一行都是一筆數據記錄。 要处理这些文件进行计算可能是一项具有挑战性的任务,而IronXL提供了一个相当不错且简单的选项,无需使用Microsoft Excel即可完成。 首先將 CSV 檔案轉換為普通的 Excel 檔案。
過程非常簡單且容易。 通常只需一行代碼即可完成。
CSV 轉換為 Excel 格式:
WorkBook workbook = WorkBook.LoadCSV("test.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");
WorkSheet ws = workbook.DefaultWorkSheet;
workbook.SaveAs("CsvToExcelConversion.xlsx");
WorkBook workbook = WorkBook.LoadCSV("test.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");
WorkSheet ws = workbook.DefaultWorkSheet;
workbook.SaveAs("CsvToExcelConversion.xlsx");
Dim workbook As WorkBook = WorkBook.LoadCSV("test.csv", fileFormat:= ExcelFileFormat.XLSX, ListDelimiter:= ",")
Dim ws As WorkSheet = workbook.DefaultWorkSheet
'
workbook.SaveAs("CsvToExcelConversion.xlsx")
IronXL WorkBook 類別代表一個 Excel 工作表。 要在 C# 中打開 Excel 文件,我們使用 WorkBook.Load 並指定 Excel 文件的路徑。(.xlsx). 以下單行程式碼用於開啟檔案以供讀取:
//Load WorkBook
var workbook = WorkBook.Load(@"Spreadsheets\\sample.xlsx");
//Load WorkBook
var workbook = WorkBook.Load(@"Spreadsheets\\sample.xlsx");
'Load WorkBook
Dim workbook = WorkBook.Load("Spreadsheets\\sample.xlsx")
每個 WorkBook 可以包含多個 WorkSheet 物件。 這些代表 Excel 文件中的工作表。 如果工作簿包含工作表,可以按名稱檢索它們,如下所示:
//Open Sheet for reading
var worksheet = workbook.GetWorkSheet("sheetnamegoeshere");
//Open Sheet for reading
var worksheet = workbook.GetWorkSheet("sheetnamegoeshere");
'Open Sheet for reading
Dim worksheet = workbook.GetWorkSheet("sheetnamegoeshere")
讀取單元格值的代碼:
// Read from Ranges of cells elegantly.
foreach (var cell in worksheet ["A2:A10"])
{
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}
// Read from Ranges of cells elegantly.
foreach (var cell in worksheet ["A2:A10"])
{
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}
' Read from Ranges of cells elegantly.
For Each cell In worksheet ("A2:A10")
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text)
Next cell
載入並讀取工作簿和工作表後,可以使用以下代碼範例來修改公式或應用於特定單元格。 代碼如下:
// Set Formulas
worksheet ["A1"].Formula = "Sum(B8:C12)";
worksheet ["B8"].Formula = "=C9/C11";
worksheet ["G30"].Formula = "Max(C3:C7)";
// Force recalculate all formula values in all sheets.
workbook.EvaluateAll();
// Set Formulas
worksheet ["A1"].Formula = "Sum(B8:C12)";
worksheet ["B8"].Formula = "=C9/C11";
worksheet ["G30"].Formula = "Max(C3:C7)";
// Force recalculate all formula values in all sheets.
workbook.EvaluateAll();
' Set Formulas
worksheet ("A1").Formula = "Sum(B8:C12)"
worksheet ("B8").Formula = "=C9/C11"
worksheet ("G30").Formula = "Max(C3:C7)"
'
' Force recalculate all formula values in all sheets.
workbook.EvaluateAll()
使用 IronXL 寫入 CSV 檔案是一個簡單的過程。 以下代碼只需使用 SaveAsCsv 方法將 Excel 文件保存為 CSV 格式。
WorkBook wb = WorkBook.Load("Normal_Excel_File.xlsx");
//Import .xls, .csv, or .tsv file
wb.SaveAsCsv("SaveAsCSV.csv", ",");
//Saved as : SaveAsCSV.Sheet1.csv
WorkBook wb = WorkBook.Load("Normal_Excel_File.xlsx");
//Import .xls, .csv, or .tsv file
wb.SaveAsCsv("SaveAsCSV.csv", ",");
//Saved as : SaveAsCSV.Sheet1.csv
Dim wb As WorkBook = WorkBook.Load("Normal_Excel_File.xlsx")
'Import .xls, .csv, or .tsv file
wb.SaveAsCsv("SaveAsCSV.csv", ",")
'Saved as : SaveAsCSV.Sheet1.csv
閱讀 CSV 文件看似比實際上容易得多的任務之一。 CsvHelper 庫使撰寫類型安全、快速且靈活的程式碼變得容易。
這是一個範例的 CSV 檔案,包含三個文字欄位和一個數字欄位。
FirstName,LastName,Age,IsActive
Ali,Talal,30,Yes
Affan,Ahmad,31,No
Saad,Bhatti,31,Yes
FirstName,LastName,Age,IsActive
Ali,Talal,30,Yes
Affan,Ahmad,31,No
Saad,Bhatti,31,Yes
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'FirstName,LastName,Age,IsActive Ali,Talal,30,Yes Affan,Ahmad,31,No Saad,Bhatti,31,Yes
我們將每一行映射成一個類型為 Person 的對象。
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int? Age { get; set; }
public string IsActive { get; set; }
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int? Age { get; set; }
public string IsActive { get; set; }
}
Public Class Person
Public Property FirstName() As String
Public Property LastName() As String
Public Property Age() As Integer?
Public Property IsActive() As String
End Class
下面是讀取我們 CSV 文件的代碼。
var fileName = @"<path to our CSV file>";
var configuration = new CsvConfiguration(CultureInfo.InvariantCulture)
{
Encoding = Encoding.UTF8,
Delimiter = ","
};
using (var fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
using (var textReader = new StreamReader(fs, Encoding.UTF8))
using (var csv = new CsvReader(textReader, configuration))
{
var data = csv.GetRecords<Person>();
foreach (var person in data)
{
// Do something with values in each row
}
}
}
var fileName = @"<path to our CSV file>";
var configuration = new CsvConfiguration(CultureInfo.InvariantCulture)
{
Encoding = Encoding.UTF8,
Delimiter = ","
};
using (var fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
using (var textReader = new StreamReader(fs, Encoding.UTF8))
using (var csv = new CsvReader(textReader, configuration))
{
var data = csv.GetRecords<Person>();
foreach (var person in data)
{
// Do something with values in each row
}
}
}
Dim fileName = "<path to our CSV file>"
Dim configuration = New CsvConfiguration(CultureInfo.InvariantCulture) With {
.Encoding = Encoding.UTF8,
.Delimiter = ","
}
Using fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)
Using textReader = New StreamReader(fs, Encoding.UTF8)
Using csv = New CsvReader(textReader, configuration)
Dim data = csv.GetRecords(Of Person)()
For Each person In data
' Do something with values in each row
Next person
End Using
End Using
End Using
資料類型是 IEnumerable
CSV 檔案大多包含文字資料。 例如,年齡欄位是整數值,而 CSV 檔案僅包含文字。 CsvHelper 可以將數據從字串轉換為標準 .NET 類型。(布林值, 整數32, 整數64, 列舉型別). 在我們的案例中,我們有一個 IsActive 布林數據類型,只能有 True/False 並包含非標準值。 可以通過創建自定義轉換器來進行轉換。 程式碼格式如下:
public class CustomBooleanConverter : DefaultTypeConverter
{
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
return text.Equals("Yes", StringComparison.OrdinalIgnoreCase);
}
}
public class CustomBooleanConverter : DefaultTypeConverter
{
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
return text.Equals("Yes", StringComparison.OrdinalIgnoreCase);
}
}
Public Class CustomBooleanConverter
Inherits DefaultTypeConverter
Public Overrides Function ConvertFromString(ByVal text As String, ByVal row As IReaderRow, ByVal memberMapData As MemberMapData) As Object
Return text.Equals("Yes", StringComparison.OrdinalIgnoreCase)
End Function
End Class
雖然 bool 是標準的 .NET 類型,但預設轉換器只能處理 True/False 值,而我們的 CSV 文件中有 Yes/No。這裡,我們需要繼承 DefaultTypeConverter,然後覆寫 ConvertFromString 方法。
IronXL 是一款公開商業的 C# Excel 庫. 它在開發過程中是免費的,並且始終可以取得商業部署的許可。授權可用適用於單個專案使用、單個開發人員、代理機構和全球企業,以及 SaaS 和 OEM 重新分發。 所有授權均包含30天退款保證、一年的產品支援和更新,有效於開發/測試/生產環境,並且還有永久授權。(一次性購買). Lite 套裝的起價為 $749。
CsvHelper — 讀寫 CSV 檔案,完全免費供商業使用。
IronXL 是一個完整的庫,提供了操控 Excel 文件所需的一切功能。它使用簡便,並提供將各種格式轉換成 XLSX 以及從 XLSX 轉換為其他格式(例如 CSV)的功能。這種互相轉換提供了用戶靈活性,能夠輕鬆處理各種文件格式。
另一方面,CsvHelper 專門設計用來處理 CSV 文件格式,這意味著它只能處理 CSV 文件。 所有的程式碼範例都可以在 CsvHelper 文件中找到。 該文件為您提供在項目中使用CsvHelper的指導方針。
IronXL 相較於 CsvHelper 具有明顯的優勢,因為它支持用戶處理多種格式。 此外,您可以根據需要應用公式和樣式,而 CsvHelper 僅允許以有限的選項讀取和寫入 CSV 文件。 此外,您無法將新記錄附加到現有的 CSV 檔案,因為這樣會覆蓋先前的條目。