在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
處理 CSV 文件可能是一項具有挑戰性的任務。 然而,如今有許多程式庫可用來幫助開發者完成這項任務,而無需安裝 Microsoft Excel。
在本文中,我們將討論並比較如何在 C# .NET 技術中以程式化方式處理 Microsoft Excel 文件,無論是 CSV 格式還是標準 Excel 格式,使用兩個最受歡迎的庫:IronXL 和 CSVWriter。
首先,我們來看看這兩個庫提供了什麼。
IronXL 是一個 .NET 函式庫,方便使用 C# 讀取和編輯 Microsoft Excel 文件。 IronXL。 Excel 是一個獨立的 .NET 軟體庫,用於讀取多種試算表格式。 它不需要安裝 Microsoft Excel,也不依賴於 Interop。
IronXL 是一個直觀的 C# API,允許您在 .NET 中以極快的速度讀取、編輯和創建 Excel 試算表文件。 IronXL 完全支持 .NET Core、.NET Framework、Xamarin、行動裝置、Linux、macOS 和 Azure。
IronXL 是一個領先的 .NET Core 和 .NET Framework C# Excel 試算表庫。
用於編寫 CSV 文件的 .NET 函式庫。 極快、靈活且易於使用。 支援編寫自訂類別物件。
使用以下步驟來創建一個控制台應用程式:
建立專案 - 控制台應用程式
在 附加資訊 畫面中,指定您要使用的 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。
若要使用CSVWriter,您需要下載並安裝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 方法 CSVWriter 配備的分隔符號可以非常簡單地處理所有字符和換行符,在 C# 發佈的 CSV 寫入器中實現。 在這裡,我們將看看如何使用CSVWriter寫入數據。
使用 Visual Studio 創建一個具有提供分隔符的簡單 CSVWriter 主控台應用程式。 一旦專案建立,下一步就是創建一個 Person 類別:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsLiving { get; set; }
}
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsLiving { get; set; }
}
Public Class Person
Public Property Id() As Integer
Public Property Name() As String
Public Property IsLiving() As Boolean
End Class
在主方法中,我們現在來建立一個 Person 對象的列表,然後將其寫入 CSV 文件:
var myPersonObjects = new List<Person>()
{
new Person { Id = 1, IsLiving = true, Name = "John" },
new Person { Id = 2, IsLiving = true, Name = "Steve" },
new Person { Id = 3, IsLiving = true, Name = "James" }
};
var myPersonObjects = new List<Person>()
{
new Person { Id = 1, IsLiving = true, Name = "John" },
new Person { Id = 2, IsLiving = true, Name = "Steve" },
new Person { Id = 3, IsLiving = true, Name = "James" }
};
Dim myPersonObjects = New List(Of Person)() From {
New Person With {
.Id = 1,
.IsLiving = True,
.Name = "John"
},
New Person With {
.Id = 2,
.IsLiving = True,
.Name = "Steve"
},
New Person With {
.Id = 3,
.IsLiving = True,
.Name = "James"
}
}
CsvHelper 已成為使用 CSVWriter 方法在 C# 編寫 CSV 的標準方式,且使用非常簡單:
using (var writer = new StreamWriter("filePersons.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(myPersonObjects);
}
using (var writer = new StreamWriter("filePersons.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(myPersonObjects);
}
Using writer = New StreamWriter("filePersons.csv")
Using csv = New CsvWriter(writer, CultureInfo.InvariantCulture)
csv.WriteRecords(myPersonObjects)
End Using
End Using
我們需要記住,每次運行程式時,舊的 CSV 檔案將會被覆蓋。 有時候,我們希望將資料附加在檔案的末尾,而不是覆寫現有的資料。 CSVWriter不提供相關方法,因為打開/寫入文件不是帶有提供分隔符的CSVWriter的責任。 我們可以通過使用 FileStream,然後使用該 FileStream 構建我們的 StreamWriter 來實現這一點。 雖然這不在本文的範疇內,但我會向您展示如何做到這一點,因為這是任何應用程式的重要組成部分。
var configPersons = new CsvConfiguration(CultureInfo.InvariantCulture)
{
HasHeaderRecord = false
};
using (var stream = File.Open("filePersons.csv", FileMode.Append))
using (var writer = new StreamWriter(stream))
using (var csv = new CsvWriter(writer, configPersons))
{
csv.WriteRecords(myPersonObjects);
}
var configPersons = new CsvConfiguration(CultureInfo.InvariantCulture)
{
HasHeaderRecord = false
};
using (var stream = File.Open("filePersons.csv", FileMode.Append))
using (var writer = new StreamWriter(stream))
using (var csv = new CsvWriter(writer, configPersons))
{
csv.WriteRecords(myPersonObjects);
}
Dim configPersons = New CsvConfiguration(CultureInfo.InvariantCulture) With {.HasHeaderRecord = False}
Using stream = File.Open("filePersons.csv", FileMode.Append)
Using writer = New StreamWriter(stream)
Using csv = New CsvWriter(writer, configPersons)
csv.WriteRecords(myPersonObjects)
End Using
End Using
End Using
附加到現有檔案很棘手,因為在附加時可能會改變順序,或者我們可能已經新增了新屬性。 我們應該確保在附加時考慮到這一點。
IronXL 是一款公開商業的 C# Excel 庫. 它在開發過程中是免費的,並且始終可以取得商業部署的許可。授權可用適用於單個專案使用、單個開發人員、代理機構和全球企業,以及 SaaS 和 OEM 重新分發。 所有授權均包含30天退款保證、一年的產品支援和更新,有效於開發/測試/生產環境,並且還有永久授權。(一次性購買). Lite 套裝的起價為 $749。
CSVWriter與提供的分隔符是一個以逗號分隔的元素,完全免費供商業友好使用。
IronXL 是一個完整的庫,提供您所需的一切以操作 Excel 文件。它提供了將各種格式轉換為 XLSX 的功能,並且也可以從 XLSX 轉換為其他格式,如 CSV。這種格式互換為用戶提供了靈活性,使操作其他文件格式變得輕而易舉。
另一方面,CSVWriter 只能與 CSV 文件格式一起使用,且選項非常有限。 用戶無法在不同的檔案格式之間切換,而使用IronXL則可以。 所有的程式碼範例都可以在 CsvHelper 文件中找到。 本文件提供有關如何在專案中使用CSVWriter的指導方針。
IronXL 比 CSVHelper.CSVWriter 更具優勢,因為它支持多種格式。 此外,您可以根據自己的選擇應用公式和樣式,而 CsvHelper 只允許讀取和寫入 CSV 文件,且選項有限。 此外,您無法將新記錄附加到現有的 CSV 文件,因為它只會覆蓋之前的條目。