IronXL ve Epplus karsilastirmasi
IronXL ve EPPlus, Microsoft Office veya Interop gerektirmeden .xls ve .xlsx dosyalarını okuyan ve oluşturan both .NET Excel kütüphaneleridir. Bu karşılaştırma, API'larını, desteklenen formatları ve lisanslamalarını kapsar — .NET uygulamalarında en yaygın kullanılan işlemler için kod örnekleri ile birlikte.
EPPlus Kullanarak C# İle Excel Dosyası Okuma
- EPPlus C# Kütüphanesini İndirin ve Kurun
- Excel dosyası okumak için
ExcelPackageEPPlusC# sınıfını kullanın - Sayfadaki satır ve sütun konumuna göre verileri okuyun ve değiştirin
LoadFromDataTableyöntemi ile Excel sayfasını hızlıca doldurun- EPPlus C# ile Excel dosyasını dışa aktarın
EPPlusyazılımı nedir?
EPPlus, Office Open XML elektronik tablolarını yönetmek için bir NuGet tabanlı .NET Framework/.NET Core kütüphanesidir. Sürüm 5, .NET Framework 3.5 ve .NET Core 2.0 için destek içerir. EPPlus, Microsoft Excel gibi diğer kütüphanelere dayanmaz.
EPPlus, Office Excel belgeleri ile çalışmanıza izin veren bir API'ye sahiptir. EPPlus, Office OpenXML formatlı Excel dosyalarını okuyan ve yazan bir .NET kütüphanesidir. Bu kütüphane, NuGet'ten bir paket olarak mevcuttur.
Kütüphane, programcılar düşünülerek oluşturulmuştur. Her zaman Excel veya başka bir elektronik tablo kütüphanesine aşina olan bir geliştiricinin API'yi hızlıca öğrenmesini sağlamak hedeflenmiştir. Alternatif olarak, birisinin dediği gibi, "IntelliSense ile zaferinizin yolunu çizin!"
EPPlus Yüklemesi
Visual Studio'danEPPluskurmak için, Görünüm > Diğer Pencereler > Paket Yöneticisi Konsolu'na gidin ve şu komutu yazın:
Install-Package EPPlus
.NET CLI'yi kullanmayı tercih ederseniz, yükseltilmiş bir komut istemi veya PowerShell isteminden aşağıdaki komutu çalıştırın:
dotnet add package EPPlus
EPPlus, projenize ekleyebileceğiniz bir dotnet paketidir.
IronXLnedir?
IronXL, Microsoft Office'i yüklemeye veya Excel Interop'a güvenmeden .NET'te Excel elektronik tablo dosyalarını okumanıza, düzenlemenize ve oluşturmanıza olanak tanıyan bir C# ve VB Excel API'sidir. Kütüphane, XLS, XLSX, CSV ve diğer elektronik tablo formatlarını doğal olarak işler.
IronXL, .NET Core, .NET Framework, Xamarin, Mobil, Linux, macOS ve Azure tarafından desteklenmektedir.
Elektronik tablonuzla veri okumak ve yazmak için bir dizi farklı yol vardır.
NuGet Paketi KullanarakIronXLEklenmesi
IronXL paketini hesabınıza eklemek için üç farklı yoldan birini seçebilirsiniz, böylece sizin için en iyi çalışanı seçebilirsiniz.
- IronXL'yi kurmak için Paket Yöneticisi Konsolunu Kullanma
Projenizde Paket Yöneticisi Konsolunu açmak için aşağıdaki komutu kullanın:
Paket Yöneticisi Konsoluna erişmek için Araçlar => NuGet Paket Yöneticisi => Paket Yöneticisi Konsolu'na gidin.
Bu sizi Paket Yöneticisi Konsoluna yönlendirecektir. Ardından, Paket Yöneticisi terminalinde aşağıdaki komutu yazın:
Install-Package IronXl.Excel
- NuGet Paket Yöneticisini Kullanarak IronXL'yi Kurma
NuGet Paket Yöneticisini kurmak için farklı bir yaklaşımdır. Daha önceki yöntemle kurulum tamamladıysanız bu yaklaşımı kullanmanıza gerek yoktur.
NuGet Paket Yöneticisine erişmek için Araçlar > NuGet Paket Yöneticisi => Menüden Çözüm İçin NuGet Paketlerini Yönet'i seçin.
Bu, NuGet-Çözümü başlatacaktır; "Gezin" seçeneğini seçin ve IronXL'yi arayın.
Arama çubuğuna Excel yazın:
"Yükle" düğmesine tıkladığınızdaIronXLsizin için yüklenecektir. IronXL'yi yükledikten sonra formunuza gidebilir ve geliştirmeye başlayabilirsiniz.
Kod örneklerine dalmadan önce, bu makalede tartışılan kilit alanlardaEPPlusve IronXL'nin nasıl karşılaştırıldığını yan yana bir genel bakış olarak burada sunuyoruz:
| Özellik | EPPlus | IronXL |
|---|---|---|
| XLSX dosyalarını oku | Evet | Evet |
| XLSX dosyaları oluştur | Evet | Evet |
| XLS format desteği | Hayır | Evet |
| CSV, JSON, XML dışa aktar | Sadece CSV | CSV, JSON, XML |
| Veritabanı dışa aktarımı (Entity Framework) | Dahil edilmedi | Evet |
| Veri doğrulama yardımcıları | Dahil edilmedi | Evet |
| Çoklu çalışma kitabı işlemleri | Tek çalışma sayfası odaklı | Çoklu çalışma sayfası ve çoklu çalışma kitabı |
| Lisanslama | Ticari veya Polyform Ticari Olmayan | Ticari (sürekli) |
IronXL'nin kendi projenizdeki EPPlus'a karşı Excel işlemlerini test etmek için ücretsiz 30 günlük deneme mevcuttur.
IronXLile Excel Dosyası Oluşturma
IronXL ile yeni bir Excel Çalışma Kitabı oluşturmak için bir satır kod yeterlidir:
// Create a new Excel workbook in XLSX format
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Create a new Excel workbook in XLSX format
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
' Create a new Excel workbook in XLSX format
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
IronXL, Excel'in tam kapsamlı yeteneklerini kullanarak XLS (erken Excel dosya sürümü) ve XLSX (mevcut ve yeni Excel dosya sürümü) formatlarında dosyalar oluşturabilir.
- Varsayılan bir çalışma sayfası ayarlama
Varsayılan bir çalışma sayfası kurmak daha da kolaydır:
// Create a worksheet named "2020 Budget" in the workbook
var sheet = workbook.CreateWorkSheet("2020 Budget");
// Create a worksheet named "2020 Budget" in the workbook
var sheet = workbook.CreateWorkSheet("2020 Budget");
' Create a worksheet named "2020 Budget" in the workbook
Dim sheet = workbook.CreateWorkSheet("2020 Budget")
Yukarıdaki kod örneğinde sheet ile temsil edilen çalışma sayfası, hücre değerlerini ve stillerini ayarlamak ve Excel'in yapabildiği neredeyse her şeyi yapmak için kullanılabilir. Excel belgenizi salt okunur dosya olarak kodlayabilir ve silme işlemlerini gerçekleştirebilirsiniz. Ayrıca, Excel'in yaptığı gibi çalışma sayfalarınızı da bağlayabilirsiniz.
Eğer emin değilseniz, çalışma kitabı ve çalışma sayfası arasındaki farkı açıklayayım.
Çalışma sayfaları, bir çalışma kitabında yer alır. Bu, bir çalışma kitabına istediğiniz kadar çalışma sayfası ekleyebileceğiniz anlamına gelir. Bunu nasıl yapacağınızı bir sonraki makalede anlatacağım. Satır ve sütunlar, bir çalışma sayfasını oluşturur. Bir satır ve bir sütunun kesişimi bir hücre olarak bilinir ve Excel'de bununla etkileşime gireceksiniz.
EPPlusSoftware AB ile Excel Dosyası Oluşturma
EPPlus, pivot tablolar, pivot alanlar ve hatta koşullu biçimlendirme ve font değişikliği gibi işlemleri gerçekleştirerek Excel dosyaları oluşturacak şekilde kullanılabilir. Daha fazla uzatmadan, işte normal bir DataTable'yı XLSX Excel dosyasına dönüştürme ve kullanıcıya indirme için gönderme işleminin tüm kaynak kodu:
public ActionResult ConvertToXLSX()
{
byte[] fileData = null;
// Replace the GetDataTable() method with your DBMS-fetching code.
using (DataTable dt = GetDataTable())
{
// Create an empty spreadsheet
using (var p = new ExcelPackage())
{
// Add a worksheet to the spreadsheet
ExcelWorksheet ws = p.Workbook.Worksheets.Add(dt.TableName);
// Initialize rows and columns counter: note that they are 1-based!
var row = 1;
var col = 1;
// Create the column names on the first line.
// In this sample, we'll just use the DataTable column names
row = 1;
col = 0;
foreach (DataColumn dc in dt.Columns)
{
col++;
ws.SetValue(row, col, dc.ColumnName);
}
// Insert the DataTable rows into the XLS file
foreach (DataRow r in dt.Rows)
{
row++;
col = 0;
foreach (DataColumn dc in dt.Columns)
{
col++;
ws.SetValue(row, col, r[dc].ToString());
}
// Alternate light-gray color for uneven rows (3, 5, 7, 9)...
if (row % 2 != 0)
{
ws.Row(row).Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
ws.Row(row).Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightGray);
}
}
// Output the XLSX file
using (var ms = new MemoryStream())
{
p.SaveAs(ms);
ms.Seek(0, SeekOrigin.Begin);
fileData = ms.ToArray();
}
}
}
string fileName = "ConvertedFile.xlsx";
string contentType = System.Web.MimeMapping.GetMimeMapping(fileName);
Response.AppendHeader("Content-Disposition", String.Format("attachment;filename={0}", fileName));
return File(fileData, contentType);
}
public ActionResult ConvertToXLSX()
{
byte[] fileData = null;
// Replace the GetDataTable() method with your DBMS-fetching code.
using (DataTable dt = GetDataTable())
{
// Create an empty spreadsheet
using (var p = new ExcelPackage())
{
// Add a worksheet to the spreadsheet
ExcelWorksheet ws = p.Workbook.Worksheets.Add(dt.TableName);
// Initialize rows and columns counter: note that they are 1-based!
var row = 1;
var col = 1;
// Create the column names on the first line.
// In this sample, we'll just use the DataTable column names
row = 1;
col = 0;
foreach (DataColumn dc in dt.Columns)
{
col++;
ws.SetValue(row, col, dc.ColumnName);
}
// Insert the DataTable rows into the XLS file
foreach (DataRow r in dt.Rows)
{
row++;
col = 0;
foreach (DataColumn dc in dt.Columns)
{
col++;
ws.SetValue(row, col, r[dc].ToString());
}
// Alternate light-gray color for uneven rows (3, 5, 7, 9)...
if (row % 2 != 0)
{
ws.Row(row).Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
ws.Row(row).Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightGray);
}
}
// Output the XLSX file
using (var ms = new MemoryStream())
{
p.SaveAs(ms);
ms.Seek(0, SeekOrigin.Begin);
fileData = ms.ToArray();
}
}
}
string fileName = "ConvertedFile.xlsx";
string contentType = System.Web.MimeMapping.GetMimeMapping(fileName);
Response.AppendHeader("Content-Disposition", String.Format("attachment;filename={0}", fileName));
return File(fileData, contentType);
}
Public Function ConvertToXLSX() As ActionResult
Dim fileData() As Byte = Nothing
' Replace the GetDataTable() method with your DBMS-fetching code.
Using dt As DataTable = GetDataTable()
' Create an empty spreadsheet
Using p = New ExcelPackage()
' Add a worksheet to the spreadsheet
Dim ws As ExcelWorksheet = p.Workbook.Worksheets.Add(dt.TableName)
' Initialize rows and columns counter: note that they are 1-based!
Dim row = 1
Dim col = 1
' Create the column names on the first line.
' In this sample, we'll just use the DataTable column names
row = 1
col = 0
For Each dc As DataColumn In dt.Columns
col += 1
ws.SetValue(row, col, dc.ColumnName)
Next dc
' Insert the DataTable rows into the XLS file
For Each r As DataRow In dt.Rows
row += 1
col = 0
For Each dc As DataColumn In dt.Columns
col += 1
ws.SetValue(row, col, r(dc).ToString())
Next dc
' Alternate light-gray color for uneven rows (3, 5, 7, 9)...
If row Mod 2 <> 0 Then
ws.Row(row).Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid
ws.Row(row).Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightGray)
End If
Next r
' Output the XLSX file
Using ms = New MemoryStream()
p.SaveAs(ms)
ms.Seek(0, SeekOrigin.Begin)
fileData = ms.ToArray()
End Using
End Using
End Using
Dim fileName As String = "ConvertedFile.xlsx"
Dim contentType As String = System.Web.MimeMapping.GetMimeMapping(fileName)
Response.AppendHeader("Content-Disposition", String.Format("attachment;filename={0}", fileName))
Return File(fileData, contentType)
End Function
Gördüğünüz gibi, bu herhangi bir ASP.NET MVC Denetleyicisinde kullanılabilecek bir ActionResult yöntemidir; eğer ASP.NET MVC kullanmıyorsanız, sadece yöntem içeriğini kopyalayıp ihtiyaçınız olan yere yapıştırın (örneğin, klasik ASP.NET, Konsol Uygulaması, Windows Formları vb.).
Kod, kendi kendini açıklayıcıdır, çeşitli işlem süreçlerini anlamanıza yardımcı olacak yeterli yorum bulunmaktadır. Ama önce, burada yaptığımız işin hızlı bir özeti:
- Özel bir Veri Sağlayıcı metodu kullanarak, bir
DataTablenesnesi alıyoruz. - EPPlus'un XLSX dosyası için birincil konteyneri olan
ExcelPackagenesnesini oluşturuyoruz. - Verilerin girileceği çalışma sayfası olacak olan
ExcelPackage'ya birExcelWorksheetekliyoruz. - Başlık sıramızı oluşturmak için,
DataTablesütunlarını yineliyoruz, her birini çalışma sayfamızın ilk satırına ekliyoruz. DataTablesatırlarını yineliyoruz, böylece her biri çalışma sayfası sırasına uyacak şekilde sırayla ekliyoruz (satır 2'den başlayarak).- Çevrim tamamlandığında
ExcelPackageikili veriyi depolamak için birMemoryStreamoluşturuyoruz ve ardından bunu bayt dizisine dönüştürüyoruz. - HTML yanıtını oluşturuyor ve bir Content-Disposition eki ile XLSX dosyasını kullanıcıya gönderiyoruz, böylece tarayıcı dosyayı otomatik olarak indiriyor.
IronXL'nin çalışma kitabı oluşturma yaklaşımı, ExcelPackage, ExcelWorksheet ve manuel hücre yinelemesi içeren EPPlus'ın çok adımlı kurulumuna kıyasla tek satır kod gerektirir. Hızlı prototip oluşturmayı ve daha basit hata ayıklamayı önceliklendiren ekipler için, bu kullanılan kod sablonunun farkı, bir projenin yaşam döngüsü boyunca toplanabilir.
EPPlusSoftware AB Excel Dosyalarını Nasıl Yazar
EPPlus, Excel dosyaları ile çalışmayı destekler. Bu, Excel dosyalarını okuyan ve yazan bir .net kütüphanesidir.
- Excel Dosyalarını Okuma
Bunu yapmak için, öncelikleEPPluspaketini yüklemeniz gerekir: "Araçlar"-> "NuGet paket yöneticisi"-> "Bu çözüm için NuGet'i yönet" -> "EPPlus'ı yükle" -> "EPPlus'ı yükle" -> "EPPlus'ı yükle" -> "EPPlus'ı yükle" -> "EPPlus'ı yükle" -> Kurulumu yapın. "Gezinme" sekmesinde "EPPlus" arayın, ardından NuGet paketini yükleyin.
Paketini yükledikten sonra "Program.cs" konsol uygulamanızda aşağıdaki kodu kullanabilirsiniz.
using OfficeOpenXml;
using System;
using System.IO;
namespace ReadExcelInCsharp
{
class Program
{
static void Main(string[] args)
{
// Provide file path
FileInfo existingFile = new FileInfo(@"D:\sample_XLSX.xlsx");
// Use EPPlus
using (ExcelPackage package = new ExcelPackage(existingFile))
{
// Get the first worksheet in the workbook
ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
int colCount = worksheet.Dimension.End.Column; // Get Column Count
int rowCount = worksheet.Dimension.End.Row; // Get row count
for (int row = 1; row <= rowCount; row++)
{
for (int col = 1; col <= colCount; col++)
{
// Print data, based on row and columns position
Console.WriteLine("Row:" + row + " Column:" + col + " Value:" + worksheet.Cells[row, col].Value?.ToString().Trim());
}
}
}
}
}
}
using OfficeOpenXml;
using System;
using System.IO;
namespace ReadExcelInCsharp
{
class Program
{
static void Main(string[] args)
{
// Provide file path
FileInfo existingFile = new FileInfo(@"D:\sample_XLSX.xlsx");
// Use EPPlus
using (ExcelPackage package = new ExcelPackage(existingFile))
{
// Get the first worksheet in the workbook
ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
int colCount = worksheet.Dimension.End.Column; // Get Column Count
int rowCount = worksheet.Dimension.End.Row; // Get row count
for (int row = 1; row <= rowCount; row++)
{
for (int col = 1; col <= colCount; col++)
{
// Print data, based on row and columns position
Console.WriteLine("Row:" + row + " Column:" + col + " Value:" + worksheet.Cells[row, col].Value?.ToString().Trim());
}
}
}
}
}
}
Imports OfficeOpenXml
Imports System
Imports System.IO
Namespace ReadExcelInCsharp
Friend Class Program
Shared Sub Main(ByVal args() As String)
' Provide file path
Dim existingFile As New FileInfo("D:\sample_XLSX.xlsx")
' Use EPPlus
Using package As New ExcelPackage(existingFile)
' Get the first worksheet in the workbook
Dim worksheet As ExcelWorksheet = package.Workbook.Worksheets(1)
Dim colCount As Integer = worksheet.Dimension.End.Column ' Get Column Count
Dim rowCount As Integer = worksheet.Dimension.End.Row ' Get row count
For row As Integer = 1 To rowCount
For col As Integer = 1 To colCount
' Print data, based on row and columns position
Console.WriteLine("Row:" & row & " Column:" & col & " Value:" & worksheet.Cells(row, col).Value?.ToString().Trim())
Next col
Next row
End Using
End Sub
End Class
End Namespace
Örnek bir Excel dosyası (.xlsx) üzerinde çalıştığımız bir konsol uygulaması çıktısı örneği.EPPluskullanarak C# içinden okumak için bir xlsx dosyası bulunmaktadır.
"cells" özelliğini (ExcelRange) kullanarak farklı kaynaklardan veri yüklemek için aşağıdaki yollar erişilebilir:
- Bir CSV metin dosyasını okuma ve veriyi
LoadFromTextveLoadFromTextAsyncile bir çalışma sayfasındaki bir aralığa yükleme.IronXLayrıca kendi CSV dışa aktarım ve içe aktarma işlemlerini sağlar. - LoadFromDataReaderAsync ve
LoadFromDataReader— DataReader'dan bir aralığa veri alanları yükler. - LoadFromDataTable —
DataTable'dan bir aralığa veri yükler. Çeşitli kaynaklardan veri aktarabilir, XML (bir örnek sağlanmıştır) ve veritabanları dahil. - LoadFromCollection — yansıtmalı olarak bir
IEnumerable'dan bir aralığa veri yükler. - Özniteliklerle LoadFromCollection — yansıtmalı olarak bir
IEnumerable'dan bir aralığa veya tabloya veri yükler. Stiller, sayı formatları, formüller ve diğer özellikler özniteliklerle belirtilir. - LoadFromDictionaries — bir
IEnumerable'danExpandoObject/dinamik objeleri (IDictionary<string, object>arayüzleri aracılığıyla) bir aralığa veri yükler. Bu, JSON verilerini içe aktarmak için yararlıdır ve bir örnek eklenmiştir. - LoadFromArrays — bir
IEnumerablenesne dizisinden[]bir aralığa veri yükler, her nesne dizisi çalışma sayfasındaki bir satıra karşılık gelir.
Bu yöntemleri kullanırken bir Excel tablosu oluşturmak için isteğe bağlı olarak bir parametre verebilirsiniz. Örnek proje Sample-.NET Framework veya Sample-.NET Framework'nın 4 ve 5. örneklerinde daha kapsamlı örnekler bulunmaktadır.
- Excel Dosyaları Yazma
Şimdi, verileri yeni bir Excel dosyasına aktarabiliyor muyuz görelim.
İşte Excel belgesi olarak kaydetmek istediğimiz bazı örnek veriler/nesneler.
List<UserDetails> persons = new List<UserDetails>()
{
new UserDetails() {ID="9999", Name="ABCD", City ="City1", Country="USA"},
new UserDetails() {ID="8888", Name="PQRS", City ="City2", Country="INDIA"},
new UserDetails() {ID="7777", Name="XYZZ", City ="City3", Country="CHINA"},
new UserDetails() {ID="6666", Name="LMNO", City ="City4", Country="UK"},
};
List<UserDetails> persons = new List<UserDetails>()
{
new UserDetails() {ID="9999", Name="ABCD", City ="City1", Country="USA"},
new UserDetails() {ID="8888", Name="PQRS", City ="City2", Country="INDIA"},
new UserDetails() {ID="7777", Name="XYZZ", City ="City3", Country="CHINA"},
new UserDetails() {ID="6666", Name="LMNO", City ="City4", Country="UK"},
};
Dim persons As New List(Of UserDetails)() From {
New UserDetails() With {
.ID="9999",
.Name="ABCD",
.City ="City1",
.Country="USA"
},
New UserDetails() With {
.ID="8888",
.Name="PQRS",
.City ="City2",
.Country="INDIA"
},
New UserDetails() With {
.ID="7777",
.Name="XYZZ",
.City ="City3",
.Country="CHINA"
},
New UserDetails() With {
.ID="6666",
.Name="LMNO",
.City ="City4",
.Country="UK"
}
}
Gerekli bilgileri içeren yeni bir Excel dosyası oluşturmak için ExcelPackage sınıfını kullanmalıyız. Veriyi dosyaya yazmak ve yeni bir Excel elektronik tablosu oluşturmak sadece birkaç satır kod gerektirir. Excel sayfasına DataTables yükleme sihrini gerçekleştiren aşağıdaki tek satırlık komuta dikkat edin.
İşleri basit tutmak için aynı proje klasöründe yeni bir elektronik tablo dosyası oluşturuyorum (Excel dosyası projenin 'bin' klasöründe üretilecektir). Kaynak kod aşağıdadır:
private static void WriteToExcel(string path)
{
// Let use below test data for writing it to excel
List<UserDetails> persons = new List<UserDetails>()
{
new UserDetails() {ID="9999", Name="ABCD", City ="City1", Country="USA"},
new UserDetails() {ID="8888", Name="PQRS", City ="City2", Country="INDIA"},
new UserDetails() {ID="7777", Name="XYZZ", City ="City3", Country="CHINA"},
new UserDetails() {ID="6666", Name="LMNO", City ="City4", Country="UK"},
};
// Let's convert our object data to Datatable for a simplified logic.
// Datatable is the easiest way to deal with complex datatypes for easy reading and formatting.
DataTable table = (DataTable)JsonConvert.DeserializeObject(JsonConvert.SerializeObject(persons), (typeof(DataTable)));
FileInfo filePath = new FileInfo(path);
using (var excelPack = new ExcelPackage(filePath))
{
var ws = excelPack.Workbook.Worksheets.Add("WriteTest");
ws.Cells.LoadFromDataTable(table, true, OfficeOpenXml.Table.TableStyles.Light8);
excelPack.Save();
}
}
private static void WriteToExcel(string path)
{
// Let use below test data for writing it to excel
List<UserDetails> persons = new List<UserDetails>()
{
new UserDetails() {ID="9999", Name="ABCD", City ="City1", Country="USA"},
new UserDetails() {ID="8888", Name="PQRS", City ="City2", Country="INDIA"},
new UserDetails() {ID="7777", Name="XYZZ", City ="City3", Country="CHINA"},
new UserDetails() {ID="6666", Name="LMNO", City ="City4", Country="UK"},
};
// Let's convert our object data to Datatable for a simplified logic.
// Datatable is the easiest way to deal with complex datatypes for easy reading and formatting.
DataTable table = (DataTable)JsonConvert.DeserializeObject(JsonConvert.SerializeObject(persons), (typeof(DataTable)));
FileInfo filePath = new FileInfo(path);
using (var excelPack = new ExcelPackage(filePath))
{
var ws = excelPack.Workbook.Worksheets.Add("WriteTest");
ws.Cells.LoadFromDataTable(table, true, OfficeOpenXml.Table.TableStyles.Light8);
excelPack.Save();
}
}
Private Shared Sub WriteToExcel(ByVal path As String)
' Let use below test data for writing it to excel
Dim persons As New List(Of UserDetails)() From {
New UserDetails() With {
.ID="9999",
.Name="ABCD",
.City ="City1",
.Country="USA"
},
New UserDetails() With {
.ID="8888",
.Name="PQRS",
.City ="City2",
.Country="INDIA"
},
New UserDetails() With {
.ID="7777",
.Name="XYZZ",
.City ="City3",
.Country="CHINA"
},
New UserDetails() With {
.ID="6666",
.Name="LMNO",
.City ="City4",
.Country="UK"
}
}
' Let's convert our object data to Datatable for a simplified logic.
' Datatable is the easiest way to deal with complex datatypes for easy reading and formatting.
Dim table As DataTable = CType(JsonConvert.DeserializeObject(JsonConvert.SerializeObject(persons), (GetType(DataTable))), DataTable)
Dim filePath As New FileInfo(path)
Using excelPack = New ExcelPackage(filePath)
Dim ws = excelPack.Workbook.Worksheets.Add("WriteTest")
ws.Cells.LoadFromDataTable(table, True, OfficeOpenXml.Table.TableStyles.Light8)
excelPack.Save()
End Using
End Sub
Veri doğrulama için yukarıda belirtilen API çağrısından sonra, yukarıdaki özel nesne dönüşümü uygun Excel sütunları ve satırlarına dönüştürülerek aşağıdaki değeri gösterecek yeni bir Excel dosyası oluşturulacaktır.
Yukarıda kullanıma hazır olan API .NET Core konsolunda, bir test projesinde veya bir ASP.NET Core uygulamasında kullanılabilir ve gerektiğinde mantık değiştirilebilir.
Bu teknikler, 'cells' özelliği (ExcelRange) kullanılarak erişilebilir:
- ToText ve ToTextAsync — bir aralıktan CSV dizesi oluşturur.
- Bir CSV dosyasına bir aralık yazma
SaveToTextveSaveToTextAsyncile. - ToDataTable yöntemi kullanarak bir Sistem'den bir aralık içindeki verileri dışa aktarma. DataTable
- GetValue — bir veri tipi seçeneği ile bir değeri gösterir.
- Value — aralığın değerini döndürür veya ayarlar.
GetValue ve SetValue yöntemleri de doğrudan çalışma sayfası nesnesinde kullanılabilir. (Bu, aralık üzerinde okuma/yazma yapmaktan biraz daha iyi sonuçlar verecektir):
- GetValue — bir tek hücrenin değerini, veri tipi belirtme seçeneğiyle alır.
- SetValue — tek bir hücrenin değerini değiştirir.
Hücre özelliği IEnumerable arayüzünü uyguladığı için bir çalışma sayfasından veri sorgulamak amacıyla Linq kullanılabilir.
Office Open XML Format XLSX ileIronXLKullanarak Aç ve Yaz
IronXL, C# geliştiricilerinin Excel, pivot tablolar ve diğer elektronik tablo dosyaları ile hızlı ve kolay çalışabilmelerini sağlayan bir NET kütüphane.
Office Interop gerekli değil. Core veya Azure'da Microsoft Office kurulumuna gerek yoktur ve özel bağımlılıklar yoktur.
IronXL, .NET core ve .NET framework için tanınmış bir C# ve VB.NET xl elektronik tablo kütüphanesidir.
- Excel Dosyalarını Okuma
- Yüklenecek Çalışma Sayfası
Bir Excel sayfası WorkBook sınıfı tarafından temsil edilir. Pivot tabloları bile içeren bir Excel dosyasını okumak için WorkBook kullanıyoruz. Excel dosyasını yükleyin ve konumunu seçin (.xlsx).
/**
Load WorkBook
**/
var workbook = WorkBook.Load(@"Spreadsheets\\GDP.xlsx");
/**
Load WorkBook
**/
var workbook = WorkBook.Load(@"Spreadsheets\\GDP.xlsx");
'''
''' Load WorkBook
''' *
Dim workbook = WorkBook.Load("Spreadsheets\\GDP.xlsx")
WorkBook'larda birçok WorkSheet nesnesi bulunabilir. Bunlar, Excel belgesinin çalışma sayfalarıdır. Eğer sayfa çalışma sayfaları içeriyorsa, onlara WorkBook ismiyle GetWorkSheet üzerinden ulaşın.
var worksheet = workbook.GetWorkSheet("GDPByCountry");
var worksheet = workbook.GetWorkSheet("GDPByCountry");
Dim worksheet = workbook.GetWorkSheet("GDPByCountry")
- Kendi Çalışma Kitabınızı Oluşturun.
Hafızada yeni bir Çalışma Kitabı oluşturmak için sayfa türü ile yeni bir WorkBook inşa edin.
/**
Create WorkBook
**/
var workbook = new WorkBook(ExcelFileFormat.XLSX);
/**
Create WorkBook
**/
var workbook = new WorkBook(ExcelFileFormat.XLSX);
'''
''' Create WorkBook
''' *
Dim workbook As New WorkBook(ExcelFileFormat.XLSX)
Eski Microsoft Excel elektronik tabloları için ExcelFileFormat.XLS kullanın (95 ve öncesi).
Henüz yoksa bir WorkSayfa oluşturun.
Her "WorkBook" içinde çok sayıda WorkSayfa bulunabilir. "WorkSayfa" tek bir veri sayfası iken, "WorkBook" WorkSayfaların bir koleksiyonudur. Excel'de, iki çalışma sayfası olan bir çalışma kitabı böyle görünür.
WorkBook, oluşturabileceğiniz yeni bir WorkSheet adıdır.
var worksheet = workbook.CreateWorkSheet("Countries");
var worksheet = workbook.CreateWorkSheet("Countries");
Dim worksheet = workbook.CreateWorkSheet("Countries")
Çalışma sayfasının adını CreateWorkSheet'a geçin.
Hücre Aralığını Elde Edin
"Hücre" nesnelerinden oluşan iki boyutlu bir koleksiyon "Aralık" sınıfı ile temsil edilir. Belirli bir Excel hücreleri aralığını belirtir. Bir WorkSayfa nesnesi üzerinde dize indeksleyiciyi kullanarak aralıkları alabilirsiniz.
var range = worksheet["D2:D101"];
var range = worksheet["D2:D101"];
Dim range = worksheet("D2:D101")
Argüman metni, bir hücrenin koordinatı (örneğin, "A1") veya soldan sağa, üstten alta bir hücre aralığı olabilir (örneğin, "B2:E5"). GetRange bir Çalışma Sayfasından da çağrılabilir.
- Bir Aralık İçinde Hücre Değerlerini Düzenleme
Bir Aralık içindeki hücrelerin değerleri çeşitli yollarla okunabilir veya düzenlenebilir. Sayı biliniyorsa bir For döngüsü kullanın. Buradan hücre biçimlendirmeleri de yapabilirsiniz.
/**
Edit Cell Values in Range
**/
// Iterate through the rows
for (var y = 2; y <= 101; y++)
{
var result = new PersonValidationResult { Row = y };
results.Add(result);
// Get all cells for the person
var cells = worksheet[$"A{y}:E{y}"].ToList();
// Validate the phone number (1 = B)
var phoneNumber = cells[1].Value;
result.PhoneNumberErrorMessage = ValidatePhoneNumber(phoneNumberUtil, (string)phoneNumber);
// Validate the email address (3 = D)
result.EmailErrorMessage = ValidateEmailAddress((string)cells[3].Value);
// Get the raw date in the format of Month Day [suffix], Year (4 = E)
var rawDate = (string) cells[4].Value;
result.DateErrorMessage = ValidateDate(rawDate);
}
/**
Edit Cell Values in Range
**/
// Iterate through the rows
for (var y = 2; y <= 101; y++)
{
var result = new PersonValidationResult { Row = y };
results.Add(result);
// Get all cells for the person
var cells = worksheet[$"A{y}:E{y}"].ToList();
// Validate the phone number (1 = B)
var phoneNumber = cells[1].Value;
result.PhoneNumberErrorMessage = ValidatePhoneNumber(phoneNumberUtil, (string)phoneNumber);
// Validate the email address (3 = D)
result.EmailErrorMessage = ValidateEmailAddress((string)cells[3].Value);
// Get the raw date in the format of Month Day [suffix], Year (4 = E)
var rawDate = (string) cells[4].Value;
result.DateErrorMessage = ValidateDate(rawDate);
}
'''
''' Edit Cell Values in Range
''' *
' Iterate through the rows
For y = 2 To 101
Dim result = New PersonValidationResult With {.Row = y}
results.Add(result)
' Get all cells for the person
Dim cells = worksheet($"A{y}:E{y}").ToList()
' Validate the phone number (1 = B)
Dim phoneNumber = cells(1).Value
result.PhoneNumberErrorMessage = ValidatePhoneNumber(phoneNumberUtil, CStr(phoneNumber))
' Validate the email address (3 = D)
result.EmailErrorMessage = ValidateEmailAddress(CStr(cells(3).Value))
' Get the raw date in the format of Month Day [suffix], Year (4 = E)
Dim rawDate = CStr(cells(4).Value)
result.DateErrorMessage = ValidateDate(rawDate)
Next y
Elektronik Tablolardaki Verileri Doğrulayın
Bir veri sayfasını doğrulamak içinIronXLkullanın. DataValidation örneği libphonenumber-CSharp ile telefon numaralarını, standart C# API'leri ile e-posta adreslerini ve tarihleri doğrular.
/**
Validate Spreadsheet Data
**/
// Iterate through the rows
for (var i = 2; i <= 101; i++)
{
var result = new PersonValidationResult { Row = i };
results.Add(result);
// Get all cells for the person
var cells = worksheet[$"A{i}:E{i}"].ToList();
// Validate the phone number (1 = B)
var phoneNumber = cells[1].Value;
result.PhoneNumberErrorMessage = ValidatePhoneNumber(phoneNumberUtil, (string)phoneNumber);
// Validate the email address (3 = D)
result.EmailErrorMessage = ValidateEmailAddress((string)cells[3].Value);
// Get the raw date in the format of Month Day [suffix], Year (4 = E)
var rawDate = (string)cells[4].Value;
result.DateErrorMessage = ValidateDate(rawDate);
}
/**
Validate Spreadsheet Data
**/
// Iterate through the rows
for (var i = 2; i <= 101; i++)
{
var result = new PersonValidationResult { Row = i };
results.Add(result);
// Get all cells for the person
var cells = worksheet[$"A{i}:E{i}"].ToList();
// Validate the phone number (1 = B)
var phoneNumber = cells[1].Value;
result.PhoneNumberErrorMessage = ValidatePhoneNumber(phoneNumberUtil, (string)phoneNumber);
// Validate the email address (3 = D)
result.EmailErrorMessage = ValidateEmailAddress((string)cells[3].Value);
// Get the raw date in the format of Month Day [suffix], Year (4 = E)
var rawDate = (string)cells[4].Value;
result.DateErrorMessage = ValidateDate(rawDate);
}
'''
''' Validate Spreadsheet Data
''' *
' Iterate through the rows
For i = 2 To 101
Dim result = New PersonValidationResult With {.Row = i}
results.Add(result)
' Get all cells for the person
Dim cells = worksheet($"A{i}:E{i}").ToList()
' Validate the phone number (1 = B)
Dim phoneNumber = cells(1).Value
result.PhoneNumberErrorMessage = ValidatePhoneNumber(phoneNumberUtil, CStr(phoneNumber))
' Validate the email address (3 = D)
result.EmailErrorMessage = ValidateEmailAddress(CStr(cells(3).Value))
' Get the raw date in the format of Month Day [suffix], Year (4 = E)
Dim rawDate = CStr(cells(4).Value)
result.DateErrorMessage = ValidateDate(rawDate)
Next i
Yukarıdaki kod elektronik tablonun satırları arasında döner, hücreleri bir liste olarak yakalar. Her doğrulanan yöntem bir hücrenin değerini doğrular ve değer yanlışsa bir hata döndürür.
Bu kod, yeni bir sayfa oluşturur, başlıkları belirtir ve hatalı veri defteri tutulabilmesi için hata mesajı sonuçlarını üretir.
var resultsSheet = workbook.CreateWorkSheet("Results");
resultsSheet["A1"].Value = "Row";
resultsSheet["B1"].Value = "Valid";
resultsSheet["C1"].Value = "Phone Error";
resultsSheet["D1"].Value = "Email Error";
resultsSheet["E1"].Value = "Date Error";
for (var i = 0; i < results.Count; i++)
{
var result = results[i];
resultsSheet[$"A{i + 2}"].Value = result.Row;
resultsSheet[$"B{i + 2}"].Value = result.IsValid ? "Yes" : "No";
resultsSheet[$"C{i + 2}"].Value = result.PhoneNumberErrorMessage;
resultsSheet[$"D{i + 2}"].Value = result.EmailErrorMessage;
resultsSheet[$"E{i + 2}"].Value = result.DateErrorMessage;
}
workbook.SaveAs(@"Spreadsheets\\PeopleValidated.xlsx");
var resultsSheet = workbook.CreateWorkSheet("Results");
resultsSheet["A1"].Value = "Row";
resultsSheet["B1"].Value = "Valid";
resultsSheet["C1"].Value = "Phone Error";
resultsSheet["D1"].Value = "Email Error";
resultsSheet["E1"].Value = "Date Error";
for (var i = 0; i < results.Count; i++)
{
var result = results[i];
resultsSheet[$"A{i + 2}"].Value = result.Row;
resultsSheet[$"B{i + 2}"].Value = result.IsValid ? "Yes" : "No";
resultsSheet[$"C{i + 2}"].Value = result.PhoneNumberErrorMessage;
resultsSheet[$"D{i + 2}"].Value = result.EmailErrorMessage;
resultsSheet[$"E{i + 2}"].Value = result.DateErrorMessage;
}
workbook.SaveAs(@"Spreadsheets\\PeopleValidated.xlsx");
Dim resultsSheet = workbook.CreateWorkSheet("Results")
resultsSheet("A1").Value = "Row"
resultsSheet("B1").Value = "Valid"
resultsSheet("C1").Value = "Phone Error"
resultsSheet("D1").Value = "Email Error"
resultsSheet("E1").Value = "Date Error"
For i = 0 To results.Count - 1
Dim result = results(i)
resultsSheet($"A{i + 2}").Value = result.Row
resultsSheet($"B{i + 2}").Value = If(result.IsValid, "Yes", "No")
resultsSheet($"C{i + 2}").Value = result.PhoneNumberErrorMessage
resultsSheet($"D{i + 2}").Value = result.EmailErrorMessage
resultsSheet($"E{i + 2}").Value = result.DateErrorMessage
Next i
workbook.SaveAs("Spreadsheets\\PeopleValidated.xlsx")
Entity Framework Kullanarak Veri Dışa Aktarma
Bir Excel elektronik tablosunu bir veritabanına dönüştürmek veya verileri bir veritabanına aktarmak içinIronXLkullanın. ExcelToDB örneği, ülkeye göre GSYH içeren bir elektronik tablo okur ve bunu SQLite'a aktarır.
EntityFramework ile veritabanını oluşturur ve ardından verileri satır satır dışa aktarır.
SQLite Entity Framework NuGet paketleri yüklenmelidir.
Bir model nesnesi oluşturmak ve verileri bir veritabanına dışa aktarmak için EntityFramework kullanabilirsiniz.
public class Country
{
[Key]
public Guid Key { get; set; }
public string Name { get; set; }
public decimal GDP { get; set; }
}
public class Country
{
[Key]
public Guid Key { get; set; }
public string Name { get; set; }
public decimal GDP { get; set; }
}
Public Class Country
<Key>
Public Property Key() As Guid
Public Property Name() As String
Public Property GDP() As Decimal
End Class
Farklı bir veritabanı kullanmak için, uygun NuGet paketini yükleyin ve UseSqLite karşılığını arayın (UseMySQL, UseSqlServer, vb.).
/**
Export Data using Entity Framework
**/
public class CountryContext : DbContext
{
public DbSet<Country> Countries { get; set; }
public CountryContext()
{
// TODO: Make async
Database.EnsureCreated();
}
/// <summary>
/// Configure context to use Sqlite
/// </summary>
/// <param name="optionsBuilder"></param>
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var connection = new SqliteConnection($"Data Source=Country.db");
connection.Open();
var command = connection.CreateCommand();
// Create the database if it doesn't already exist
command.CommandText = $"PRAGMA foreign_keys = ON;";
command.ExecuteNonQuery();
optionsBuilder.UseSqlite(connection);
base.OnConfiguring(optionsBuilder);
}
}
/**
Export Data using Entity Framework
**/
public class CountryContext : DbContext
{
public DbSet<Country> Countries { get; set; }
public CountryContext()
{
// TODO: Make async
Database.EnsureCreated();
}
/// <summary>
/// Configure context to use Sqlite
/// </summary>
/// <param name="optionsBuilder"></param>
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var connection = new SqliteConnection($"Data Source=Country.db");
connection.Open();
var command = connection.CreateCommand();
// Create the database if it doesn't already exist
command.CommandText = $"PRAGMA foreign_keys = ON;";
command.ExecuteNonQuery();
optionsBuilder.UseSqlite(connection);
base.OnConfiguring(optionsBuilder);
}
}
'''
''' Export Data using Entity Framework
''' *
Public Class CountryContext
Inherits DbContext
Public Property Countries() As DbSet(Of Country)
Public Sub New()
' TODO: Make async
Database.EnsureCreated()
End Sub
''' <summary>
''' Configure context to use Sqlite
''' </summary>
''' <param name="optionsBuilder"></param>
Protected Overrides Sub OnConfiguring(ByVal optionsBuilder As DbContextOptionsBuilder)
Dim connection = New SqliteConnection($"Data Source=Country.db")
connection.Open()
Dim command = connection.CreateCommand()
' Create the database if it doesn't already exist
command.CommandText = $"PRAGMA foreign_keys = ON;"
command.ExecuteNonQuery()
optionsBuilder.UseSqlite(connection)
MyBase.OnConfiguring(optionsBuilder)
End Sub
End Class
CountryContext oluşturun, ardından her girişi oluşturmak için aralığı yineleyin ve verileri SaveChangesAsync ile veritabanına kaydetmeden önce.
public async Task ProcessAsync()
{
// Get the first worksheet
var workbook = WorkBook.Load(@"Spreadsheets\\GDP.xlsx");
var worksheet = workbook.GetWorkSheet("GDPByCountry");
// Create the database connection
using (var countryContext = new CountryContext())
{
// Iterate through all the cells
for (var i = 2; i <= 213; i++)
{
// Get the range from A-B
var range = worksheet[$"A{i}:B{i}"].ToList();
// Create a Country entity to be saved to the database
var country = new Country
{
Name = (string)range[0].Value,
GDP = (decimal)(double)range[1].Value
};
// Add the entity
await countryContext.Countries.AddAsync(country);
}
// Commit changes to the database
await countryContext.SaveChangesAsync();
}
}
public async Task ProcessAsync()
{
// Get the first worksheet
var workbook = WorkBook.Load(@"Spreadsheets\\GDP.xlsx");
var worksheet = workbook.GetWorkSheet("GDPByCountry");
// Create the database connection
using (var countryContext = new CountryContext())
{
// Iterate through all the cells
for (var i = 2; i <= 213; i++)
{
// Get the range from A-B
var range = worksheet[$"A{i}:B{i}"].ToList();
// Create a Country entity to be saved to the database
var country = new Country
{
Name = (string)range[0].Value,
GDP = (decimal)(double)range[1].Value
};
// Add the entity
await countryContext.Countries.AddAsync(country);
}
// Commit changes to the database
await countryContext.SaveChangesAsync();
}
}
Public Async Function ProcessAsync() As Task
' Get the first worksheet
Dim workbook = WorkBook.Load("Spreadsheets\\GDP.xlsx")
Dim worksheet = workbook.GetWorkSheet("GDPByCountry")
' Create the database connection
Using countryContext As New CountryContext()
' Iterate through all the cells
For i = 2 To 213
' Get the range from A-B
Dim range = worksheet($"A{i}:B{i}").ToList()
' Create a Country entity to be saved to the database
Dim country As New Country With {
.Name = CStr(range(0).Value),
.GDP = CDec(CDbl(range(1).Value))
}
' Add the entity
Await countryContext.Countries.AddAsync(country)
Next i
' Commit changes to the database
Await countryContext.SaveChangesAsync()
End Using
End Function
Bir Elektronik Tabloya Formül Ekleyin
Formula özelliği bir hücrenin formülünü ayarlamak için kullanılabilir.
// Iterate through all rows with a value
for (var y = 2; y < i; y++)
{
// Get the C cell
var cell = sheet[$"C{y}"].First();
// Set the formula for the Percentage of Total column
cell.Formula = $"=B{y}/B{i}";
}
// Iterate through all rows with a value
for (var y = 2; y < i; y++)
{
// Get the C cell
var cell = sheet[$"C{y}"].First();
// Set the formula for the Percentage of Total column
cell.Formula = $"=B{y}/B{i}";
}
' Iterate through all rows with a value
Dim y = 2
Do While y < i
' Get the C cell
Dim cell = sheet($"C{y}").First()
' Set the formula for the Percentage of Total column
cell.Formula = $"=B{y}/B{i}"
y += 1
Loop
C sütunundaki kod, her durumu iterasyon yapar ve bir yüz delik toplamı hesaplar.
Bir API'den Veriler Elektronik Tabloya İndirilebilir
Aşağıdaki çağrıda bir REST çağrısı yapması için RestClient.Net kullanılır. REST API'sinden indirilen JSON, RestCountry-tipi "List"'e dönüştürülür. Veriler REST API'sinden Excel dosyasına, her ülke üzerinde iterasyon yapılarak kolayca kaydedilebilir.
/**
Data API to Spreadsheet
**/
var client = new Client(new Uri("https://restcountries.eu/rest/v2/"));
List<RestCountry> countries = await client.GetAsync<List<RestCountry>>();
/**
Data API to Spreadsheet
**/
var client = new Client(new Uri("https://restcountries.eu/rest/v2/"));
List<RestCountry> countries = await client.GetAsync<List<RestCountry>>();
'''
''' Data API to Spreadsheet
''' *
Dim client As New Client(New Uri("https://restcountries.eu/rest/v2/"))
Dim countries As List(Of RestCountry) = Await client.GetAsync(Of List(Of RestCountry))()
API'den gelen JSON verileri şu şekilde görünür:
Aşağıdaki kod, ülkeler üzerinde döner ve elektronik tabloyu İsim, Nüfus, Bölge, NumerikKod ve İlk 3 Dil ile doldurur.
for (var i = 2; i < countries.Count; i++)
{
var country = countries[i];
// Set the basic values
worksheet[$"A{i}"].Value = country.name;
worksheet[$"B{i}"].Value = country.population;
worksheet[$"G{i}"].Value = country.region;
worksheet[$"H{i}"].Value = country.numericCode;
// Iterate through languages
for (var x = 0; x < 3; x++)
{
if (x > (country.languages.Count - 1)) break;
var language = country.languages[x];
// Get the letter for the column
var columnLetter = GetColumnLetter(4 + x);
// Set the language name
worksheet[$"{columnLetter}{i}"].Value = language.name;
}
}
for (var i = 2; i < countries.Count; i++)
{
var country = countries[i];
// Set the basic values
worksheet[$"A{i}"].Value = country.name;
worksheet[$"B{i}"].Value = country.population;
worksheet[$"G{i}"].Value = country.region;
worksheet[$"H{i}"].Value = country.numericCode;
// Iterate through languages
for (var x = 0; x < 3; x++)
{
if (x > (country.languages.Count - 1)) break;
var language = country.languages[x];
// Get the letter for the column
var columnLetter = GetColumnLetter(4 + x);
// Set the language name
worksheet[$"{columnLetter}{i}"].Value = language.name;
}
}
For i = 2 To countries.Count - 1
Dim country = countries(i)
' Set the basic values
worksheet($"A{i}").Value = country.name
worksheet($"B{i}").Value = country.population
worksheet($"G{i}").Value = country.region
worksheet($"H{i}").Value = country.numericCode
' Iterate through languages
For x = 0 To 2
If x > (country.languages.Count - 1) Then
Exit For
End If
Dim language = country.languages(x)
' Get the letter for the column
Dim columnLetter = GetColumnLetter(4 + x)
' Set the language name
worksheet($"{columnLetter}{i}").Value = language.name
Next x
Next i
Excel dosyalarınıIronXLile açın
Excel dosyasını açtıktan sonra, ilk sayfadaki 1. hücreyi okuyan ve yazdıran ilk birkaç satırı ekleyin.
static void Main(string[] args)
{
var workbook = IronXl.WorkBook.Load($@"{Directory.GetCurrentDirectory()}\Files\HelloWorld.xlsx");
var sheet = workbook.WorkSheets.First();
var cell = sheet["A1"].StringValue;
Console.WriteLine(cell);
}
static void Main(string[] args)
{
var workbook = IronXl.WorkBook.Load($@"{Directory.GetCurrentDirectory()}\Files\HelloWorld.xlsx");
var sheet = workbook.WorkSheets.First();
var cell = sheet["A1"].StringValue;
Console.WriteLine(cell);
}
Imports System
Imports System.IO
Imports IronXl
Module Program
Sub Main(args As String())
Dim workbook = WorkBook.Load($"{Directory.GetCurrentDirectory()}\Files\HelloWorld.xlsx")
Dim sheet = workbook.WorkSheets.First()
Dim cell = sheet("A1").StringValue
Console.WriteLine(cell)
End Sub
End Module
IronXL kullanarak yeni bir Excel dosyası oluşturun.
/**
Create Excel File
**/
static void Main(string[] args)
{
var newXLFile = WorkBook.Create(ExcelFileFormat.XLSX);
newXLFile.Metadata.Title = "IronXL New File";
var newWorkSheet = newXLFile.CreateWorkSheet("1stWorkSheet");
newWorkSheet["A1"].Value = "Hello World";
newWorkSheet["A2"].Style.BottomBorder.SetColor("#ff6600");
newWorkSheet["A2"].Style.BottomBorder.Type = IronXl.Styles.BorderType.Dashed;
}
/**
Create Excel File
**/
static void Main(string[] args)
{
var newXLFile = WorkBook.Create(ExcelFileFormat.XLSX);
newXLFile.Metadata.Title = "IronXL New File";
var newWorkSheet = newXLFile.CreateWorkSheet("1stWorkSheet");
newWorkSheet["A1"].Value = "Hello World";
newWorkSheet["A2"].Style.BottomBorder.SetColor("#ff6600");
newWorkSheet["A2"].Style.BottomBorder.Type = IronXl.Styles.BorderType.Dashed;
}
Option Strict On
Module Program
''' <summary>
''' Create Excel File
''' </summary>
Sub Main(args As String())
Dim newXLFile = WorkBook.Create(ExcelFileFormat.XLSX)
newXLFile.Metadata.Title = "IronXL New File"
Dim newWorkSheet = newXLFile.CreateWorkSheet("1stWorkSheet")
newWorkSheet("A1").Value = "Hello World"
newWorkSheet("A2").Style.BottomBorder.SetColor("#ff6600")
newWorkSheet("A2").Style.BottomBorder.Type = IronXl.Styles.BorderType.Dashed
End Sub
End Module
Bundan sonra,IronXLkod örneklerinde gösterildiği gibi, bunların ilgili kodlarını kullanarak ya CSV, JSON veya XML olarak kaydedebilirsiniz.
Örneğin, XML'e Kaydetmek için .xml
XML'e kaydetmek için SaveAsXml şu şekilde kullanın:
newXLFile.SaveAsXml($@"{Directory.GetCurrentDirectory()}\Files\HelloWorldXML.XML");
newXLFile.SaveAsXml($@"{Directory.GetCurrentDirectory()}\Files\HelloWorldXML.XML");
newXLFile.SaveAsXml($"{Directory.GetCurrentDirectory()}\Files\HelloWorldXML.XML")
Sonuç şu şekilde görünür:
<?xml version="1.0" standalone="yes"?>
<_x0031_stWorkSheet>
<_x0031_stWorkSheet>
<Column1 xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Hello World</Column1>
</_x0031_stWorkSheet>
<_x0031_stWorkSheet>
<Column1 xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
</_x0031_stWorkSheet>
</_x0031_stWorkSheet>
<?xml version="1.0" standalone="yes"?>
<_x0031_stWorkSheet>
<_x0031_stWorkSheet>
<Column1 xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Hello World</Column1>
</_x0031_stWorkSheet>
<_x0031_stWorkSheet>
<Column1 xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
</_x0031_stWorkSheet>
</_x0031_stWorkSheet>
IronXL, Excel dosyalarını okumak için daha özlü bir API sağlar — bir kitaplıktaki sütunlara, satırlara ve hücrelere erişmek genellikle daha az kod satırı gerektirir. Buna karşın EPPlus, açıkça sütun ve satır işleme gerektiren, ince kontrol sunan ama aynı zamanda konuşkanlık ekleyen daha ayrıntılı bir hücre seviyesinde API açığa çıkarır.
IronXL, Excel belgelerini manipüle etmede daha geniş esneklik sunar. İlave sayfalar oluşturmayı, tek bir iş akışında birden fazla çalışma sayfası ve çalışma kitabı genelinde veri okumayı, çalışma kitabı verilerini doğrudan bir veritabanına dışa aktarmayı destekler. EPPlus, API'sini bireysel çalışma sayfaları ile çalışma üzerine odaklandırır — bu yaklaşım, tek sayfalı görevler için basittir ama çalışma kitapları arası operasyonlara ihtiyaç duyan ekipler için ek entegrasyon adımları yaratır.
EPPlusveIronXLLisanslama ve Fiyatlandırmada Nasıl Karşılaştırılır?
EPPlus Lisans Modeli ve Fiyatı
EPPlus, Polyform'dan ya ticari olmayan bir lisans modeli ya da ticari bir lisans modeli altında kullanılabilir.
Ticari Lisanslar
Bunlar sürekli ve abonelik bazında formatlarda mevcut olup, şartlar bir aydan iki yıla kadar değişmektedir.
Tüm lisanslama kategorileri için, lisans süresi boyunca destek merkezi aracılığıyla destek ve NuGet aracılığıyla yükseltmeler dahildir.
EPPlus her geliştirici için bir lisans gerektirir. Lisanslar bir kişiye verilir ve paylaşılamaz. Genel bir kılavuz olarak, EPPlus'ı doğrudan kullanan veya hata ayıklaması yapması gereken herkesin bir ticari lisansı olmalıdır.
Eğer EPPlus'ı dahili olarak bir hizmet olarak sunarsanız (örneğin, API aracılığıyla yeteneklerini açığa çıkararak), firmanız, hizmeti kullanacak dahili kullanıcı sayısını (geliştiriciler) kapsayan bir abonelik satın almalıdır.
Abonelikler
Bir abonelik ile her zaman en son sürümü kullanabilirsiniz, ancak geliştirme içinEPPluskullanmaya devam ettiğiniz sürece geçerli bir lisansınız olmalıdır. Lisans dönemi sonunda, ödeme yapıldığında lisans otomatik olarak faturalandırılır ve yenilenir. Lisans dönemi sonunda aboneliğinizi iptal edebilir ve istediğiniz zaman yeni bir abonelik başlatabilirsiniz. Abonelikler sadece internetten satın alınmak üzere mevcuttur.
EPPlus bir ticari ortamda kullanılabilir. Lisans, bir şirkette bir geliştirme ekibi için, sınırsız dağıtım konumu sayısıyla sınırlıdır. Her yıl satın alınabilecek lisans sayısı artırılabilir veya azaltılabilir ve lisans her yılın sonunda askıya alınabilir veya iptal edilebilir.
32 günlük bir deneme süresi seçeneği mevcuttur.
Fiyatlandırma: Yıllık $299 itibarıyla başlar.
Kullandıkça ödeyebilirsiniz
Bir organizasyon içinde bir geliştirme ekibi için, sınırsız dağıtım konumları ve Stripe faturalama ile geliştirici başına fiyat. Her ay kullanılabilir lisans sayısı artırılabilir veya azaltılabilir ve lisans her ayın sonunda askıya alınabilir veya iptal edilebilir.
Fiyatlandırma: Aylık $29 ile başlar.
Süresiz Lisans
Süresiz bir lisans, yeni sürümlere güncelleme yapmanıza ve belirli bir süre boyunca destek almanıza olanak tanır. Bu süre içinde yayımlanan sürümleri kullanmaya devam edebilir ve lisansınızı yenilememeniz gerekmez.
Aynı firmada, sınırsız dağıtım konumları ile geliştirici başına fiyat. Destek/güncellemeler süresi içinde yayımlanan tümEPPlussürümlerinin kullanımı süresizdir.
32 günlük bir deneme süresi seçeneği mevcuttur.
Fiyatlandırma: Yıllık $599 itibarıyla başlar.
Paketler
Başlangıçta güncellemeler ve destek süresi sunan, süresiz lisans seçenekleri mevcuttur. Bu süre zarfında yayımlanan sürümleri kullanmaya devam edebilir ve lisansınızı yenilememeniz gerekmez.
Fiyatlandırma: Yıllık $4,295 itibarıyla başlar.
Polyform için ticari olmayan lisans
EPPlus, sürüm 5 itibarıyla Polyform Ticari Olmayan lisansı altında lisanslanmıştır, bu kodun açık kaynak olduğunu ve ticari olmayan amaçlarla kullanılabileceğini belirtir. Onların web sitesinde daha fazla ayrıntıyı görebilirsiniz.
IronXL Lisans Modeli ve Fiyatı
Süresiz Lisanslama: Her lisans bir defa satın alınır ve yenileme gerektirmez.
Ücretsiz Destek ve Ürün Güncellemeleri: Her lisans, ürünün ardındaki ekipten bir yıl ücretsiz ürün güncellemesi ve destekle birlikte gelir. Herhangi bir zamanda eklentiler satın almak mümkündür. Eklentiler görüntülenebilir.
Anında Lisanslar: Kayıtlı lisans anahtarları ödeme alındığında hemen gönderilir.
Iron Software lisanslama uzmanlarımızaIronXLfor .NET lisansı hakkında sorularınız varsa lütfen iletişime geçin.
Tüm lisanslar süresizdir ve geliştirme, sahneleme ve üretimi kapsar.
Lite - Bir organizasyonda bir yazılım geliştiricisinin Iron Software'i tek bir yerde kullanmasına olanak tanır. Iron Software, tek bir web uygulamasında, intranet uygulamasında veya masaüstü yazılım programında kullanılabilir. Lisanslar devredilemez ve kuruluş dışındaki bir ajans/müşteri ilişkisi dışında paylaşılamaz. Bu lisans türü, anlaşma kapsamında açıkça verilmemiş tüm hakları, OEM dağıtımı ve Iron Software'i bir SaaS olarak kullanmayı ek teminat satın almadan açıkça hariç tutar.
Fiyatlandırma: Yıllık $489 itibarıyla başlar.
Profesyonel Lisans - Bir organizasyonda belirlenmiş sayıda yazılım geliştiricisinin bir konumda, en fazla on kişiye kadar Iron Software'i kullanmasına olanak tanır. Iron Software, istediğiniz kadar web sitesinde, intranet uygulamalarinda veya masaüstü yazilim uygulamalarinda kullanilabilir. Lisanslar devredilemez ve kurulus veya ajans/müsteri iliskisi disinda paylasilamaz. Bu lisans türü, diğer lisans türleri gibi, İçesinde belirtilmeyen diğer hakları hariç tutar, OEM dağitimi ve ek kapsam satin alinmadikça Iron Software'i SaaS olarak kullanma dahil.
Fiyatlandırma: Yıllık $976 itibarıyla başlar.
Sınırsız Lisans - Bir organizasyonda sınırsız sayıda yazılım geliştiricisiyle sınırsız sayıda konumda Iron Software'i kullanmaya olanak tanır. Iron Software, istediğiniz kadar web sitesinde, intranet uygulamalarinda veya masaüstü yazilim uygulamalarinda kullanilabilir. Lisanslar devredilemez ve kurulus veya ajans/müsteri iliskisi disinda paylasilamaz. Bu lisans türü, diğer lisans türleri gibi, İçesinde belirtilmeyen diğer hakları hariç tutar, OEM dağitimi ve ek kapsam satin alinmadikça Iron Software'i SaaS olarak kullanma dahil.
Telif Ücretsiz Yeniden Dağıtım - Taban lisansı kapsamındaki proje sayısına bağlı olarak, Iron Software'i farklı paketlenmiş ticari ürünlerin bir parçası olarak dağıtmanıza izin verir (royalty ödemeye gerek yoktur). Taban lisansı kapsamındaki proje sayısına göre Iron Software'in SaaS yazılım hizmetlerinde dağıtımına izin verir.
Fiyatlandırma: Yıllık $2939 itibarıyla başlar.
Lisans maliyetinin ötesinde, toplam proje maliyeti, kitaplığın yerel olarak ele almadığı, JSON ve XML gibi biçimler için ek dışa aktarma mantığı yazmak, manuel veri tabanı entegrasyon hatları oluşturmak ve çoklu çalışma kitabı orkestrasyonunu yönetmek için geliştirici saatlerini içerir. Birden fazla yıllık bir proje yaşam döngüsü için maliyet değerlendiren ekipler için, bu entegrasyon ve bakım maliyetleri genellikle lisanslama modelleri arasındaki farktan daha fazla ağırlık kazanır.
Hangi Kütüphaneyi Seçmelisiniz?
EPPlus, Office Open XML hesap tabloları ile çalışmak için sağlam ve iyi kurulmuş bir API sağlar ve ince ayar elektronik tablo manipülasyonu gerektiren projelere uygun hassas hücre seviyesinde kontrol sunar. Gereksinimleri çok biçimli dışa aktarma (XML, HTML, JSON), çapraz çalışma kitabı işlemleri ve veri tabanı entegrasyonu olan ekipler için,IronXLbu yetenekleri birinci sınıf işlemler olarak ekler.IronXLayrıca belge düzenlendiğinde formülleri yeniden hesaplar ve WorkSheet[“A1:B10”] ile sezgisel bir aralık sözdizimi sağlar. Hücre veri biçimleri; metin, sayılar, formüller, tarihler, para birimi, yüzdeler, bilimsel notasyon ve zamanı kapsarken, hücre stilizasyonu yazı tipleri, boyutlar, arka plan desenleri, kenarlıklar ve hizalamaları kapsar. Sıralama, aralıklar, sütunlar ve satırlar genelinde mevcuttur. İki kitaplık arasındaki seçim nihayetinde projenizin EPPlus'un odaklı Open XML işlemlerine veya IronXL'in daha geniş özellik yüzey alanına ihtiyaçı olup olmadığınıza bağlıdır. IronXL'in iş akışınıza nasıl uyduğunu görmek için ücretsiz 30 günlük denemeyi indirin ve bu makaledeki örnekleri kendi ortamınızda test edin.
Sıkça Sorulan Sorular
Microsoft Office kullanmadan Excel dosyalari nasil oluşturabilirim?
IronXL'i kullanarak Microsoft Office olmadan Excel dosyalarini oluşturabilirsiniz. IronXL, C# ve VB.NET'te Excel elektronik tabloyu okumak, düzenlemek ve oluşturmak için basit bir API sunar.
IronXL kullanmanın EPPlus'a göre avantajları nelerdir?
IronXL daha sezgisel bir API sunar, XML, HTML ve JSON gibi birden çok dosya formatini destekler ve gelişmiş biçimlendirme ve formullerinin yeniden hesaplanmasina izin verir. Bu, EPPlus'a gore onu geliştiriciler için daha pratik ve esnek hale getirir.
IronXL kullanarak Excel verisini manipüle etmek ve farkli formatlara aktarmak mumkun mu?
Evet, IronXL, XML, HTML ve JSON gibi çeşitli formatlara Excel verisinin aktarimini destekler, yani veritabanlari ve diğer uygulamalarla entegrasyonu kolayca yapabilirsiniz.
IronXL ile Excel formulleri nasil islenir?
IronXL, sezgisel formul yeniden hesaplamalarini destekler, yani formuller her belge düzenlendiginde otomatik olarak guncellenir ve bu da Excel formullerini yönetmek için verimli bir sistem saglar.
IronXL hangi lisanslama seçeneklerini sunar?
IronXL, geliştirme, ara ve uretim ortamlarinda süresiz lisanslar sunar ve fiyatlar tek bir geliştirici için yilda 489 dolardan baslar. Bir yil boyunca ücretsiz güncellemeler ve destek icermektedir.
EPPlus pivot tablo oluşturma ve koşullu biçimlendirme uygulama için kullanilabilir mi?
Evet, EPPlus pivot tablo oluşturmayi ve koşullu biçimlendirme uygulamayi destekler, ancak genellikle IronXL'e gore daha karmasak bir kod gerektirir.
IronXL capraz platform geliştirmeyi nasil destekliyor?
IronXL, .NET Core, .NET Framework, Xamarin, Mobil, Linux, macOS ve Azure dahil olmak uzere bir dizi platformu destekleyerek capraz platform geliştirme için çok yonlu hale getirir.
IronXL'in sunucu veya istemci makinesine Microsoft Office yuklenmesini gerektiriyor mu?
Hayir, IronXL Microsoft Office yuklenmesini gerektirmez. Bagimsiz calisacak şekilde tasarlanmis olup, Excel dosyalarini okumak, düzenlemek ve oluşturmak için yetenekler saglar.
EPPlus'in Excel dosyalarını işlemek için temel özellikleri nelerdir?
EPPlus, Office OpenXML desteği, Excel'e asina olan geliştiriciler için kolay kullanım ve pivot tablolar oluşturma ve koşullu biçimlendirme uygulama gibi yeteneklerle taninir. Cift lisans modeli altinda mevcuttur.
.NET projem için IronXL'i nasil kurabilirim?
IronXL'i NuGet Package Manager Console ile Install-Package IronXl.Excel komutuyla veya .NET CLI kullanarak dotnet add package IronXl.Excel komutuyla kurabilirsiniz.




