Altbilgi içeriğine atla
DIğER BILEşENLERLE KARşıLAşTıRıN

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.

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.

Epplus Read Create Excel Alternative 1 related to NuGet Paketi KullanarakIronXLEklenmesi

Bu sizi Paket Yöneticisi Konsoluna yönlendirecektir. Ardından, Paket Yöneticisi terminalinde aşağıdaki komutu yazın:

Install-Package IronXl.Excel
Epplus Read Create Excel Alternative 2 related to NuGet Paketi KullanarakIronXLEklenmesi
  • 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:

Epplus Read Create Excel Alternative 3 related to NuGet Paketi KullanarakIronXLEklenmesi

"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)
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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 DataTable nesnesi alıyoruz.
  • EPPlus'un XLSX dosyası için birincil konteyneri olan ExcelPackage nesnesini oluşturuyoruz.
  • Verilerin girileceği çalışma sayfası olacak olan ExcelPackage'ya bir ExcelWorksheet ekliyoruz.
  • Başlık sıramızı oluşturmak için, DataTable sütunlarını yineliyoruz, her birini çalışma sayfamızın ilk satırına ekliyoruz.
  • DataTable satı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 ExcelPackage ikili veriyi depolamak için bir MemoryStream oluş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.

Epplus Read Create Excel Alternative 4 related to EPPlusSoftware AB Excel Dosyalarını Nasıl Yazar

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
$vbLabelText   $csharpLabel

Ö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.

Epplus Read Create Excel Alternative 5 related to EPPlusSoftware AB Excel Dosyalarını Nasıl Yazar

"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 LoadFromText ve LoadFromTextAsync ile 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.
  • LoadFromDataTableDataTable'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'dan ExpandoObject/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 IEnumerable nesne 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"
	}
}
$vbLabelText   $csharpLabel

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.

Epplus Read Create Excel Alternative 6 related to EPPlusSoftware AB Excel Dosyalarını Nasıl Yazar

İş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
$vbLabelText   $csharpLabel

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.

Epplus Read Create Excel Alternative 7 related to EPPlusSoftware AB Excel Dosyalarını Nasıl Yazar

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 SaveToText ve SaveToTextAsync ile.
  • 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")
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel
  • 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)
$vbLabelText   $csharpLabel

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.

Epplus Read Create Excel Alternative 8 related to Office Open XML Format XLSX ileIronXLKullanarak Aç ve Yaz

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")
$vbLabelText   $csharpLabel

Ç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")
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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.

Epplus Read Create Excel Alternative 9 related to Office Open XML Format XLSX ileIronXLKullanarak Aç ve Yaz

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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))()
$vbLabelText   $csharpLabel

API'den gelen JSON verileri şu şekilde görünür:

Epplus Read Create Excel Alternative 10 related to Office Open XML Format XLSX ileIronXLKullanarak Aç ve Yaz

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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>
XML

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.

Lütfen dikkate alinEPPlus, kendi sahibinin tescilli markasıdır. Bu siteEPPlusile bağlantılı değil,EPPlustarafından onaylanmamış veya desteklenmemiştir. Tüm ürün adları, logolar ve markalar kendi sahiplerinin mülkiyetindedir. Karşılaştırmalar yalnızca bilgilendirme amaçlıdır ve yazım sırasında kamuya açık bilgileri yansıtır.

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.

Jordi Bardia
Yazılım Mühendisi
Jordi Python, C# ve C++ konularında en yetkin, Iron Software'deki yeteneklerini kullanmadığı zamanlarda; oyun programlıyor. Ürün testi, ürün geliştirme ve araştırma sorumluluklarını paylaşan Jordi, sürekli ürün gelişimine büyük değer katıyor. Çeşitli deneyimleri onu ...
Daha Fazlasını Oku

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara