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

VB.NET Dizilere Excel Dosyasi Okuma: IronXL vs Microsoft Interop

VB.NET'te Excel verilerini dizilere okumak, bir çalışma kitabını yüklemeyi, bir çalışma sayfası seçmeyi, satır ve sütunları yinelemeyi ve her hücre değerini iki boyutlu bir diziye depolamayı gerektirir. IronXL ile, bunu Microsoft Office'i yüklemeden birkaç satırda başarırsınız. NuGet paketini yükleyin, WorkBook.Load çağırın, bir Range alın, ardından dizinizi doldurmak için Rows koleksiyonunu döngüye alın.

Ücretsiz denemenizi başlatın ve IronXL'nin Visual Studio projelerinizde Excel otomasyonunu nasıl kolaylaştırdığını keşfedin.

Bu Çözümler Bir Bakışta Nasıl Karşılaştırılır?

IronXL vs Microsoft Office Interop -- VB.NET Dizi İşlemleri İçin Özellik Karşılaştırması
Özellik IronXL Microsoft Office Interop
Office kurulumu gereklidir Hayır Evet
NuGet kurulumu Evet -- bir paket Hayır -- COM referansı
Sunucu/CI ortamı desteği Evet Sınırlı
COM obje yaşam döngüsü yönetimi Gerekli değil Gerekli
Desteklenen formatlar XLSX, XLS, CSV, TSV, JSON XLSX, XLS (sadece Excel)
Tip güvenli API Evet Kısmi -- geç bağlı COM
Linux / macOS desteği Evet (.NET 6+) Hayır
Özel durum yönetimi tarzı Standart .NET istisnaları COM istisnaları + manuel temizlik

VB.NET Projeleri Icin IronXL Nasıl Kurulur?

Herhangi bir .NET projesine IronXL eklemenin en hızlı yolu, NuGet Paket Yöneticisi aracılığıyladır. Visual Studio'da Paket Yöneticisi Konsolunu açın ve çalıştırın:

Install-Package IronXl.Excel
Install-Package IronXl.Excel
SHELL

Alternatif olarak, .NET CLI'yi kullanın:

dotnet add package IronXl.Excel
dotnet add package IronXl.Excel
SHELL

Kurulumdan sonra, Imports IronXL'yı VB.NET modülünüzün en üstüne ekleyin. Office kurulumu gerekmez -- IronXL, Excel dosyalarını tamamen kendi çözümleme motoru ile okur ve yazar.

Eski çerçeveleri hedefleyen projeler veya belirli bir sürüm sabitleme gerektiren projeler için, IronXL NuGet sayfası tüm yayınlanmış sürümleri listeler. IronXL belgeleri, Visual Studio 2019, 2022 ve .NET CLI için kurulum kılavuzları sağlar.

Geliştiriciler IronXL Kullanarak Excel Verilerini Dizilere Nasıl Okuyabilir?

IronXL, bir yerel Office kurulumu gerektirmeden çalışma kitaplarını açmak, aralıkları seçmek ve hücre değerlerini yinelemek için temiz bir API sağlar. WorkBook.Load yöntemi bir dosya yolu kabul eder ve tüm çalışma sayfalarını ortaya çıkaran bir WorkBook nesnesi döndürür.

Imports IronXL

Module ReadExcelToArray
    Sub Main()
        ' Load the Excel workbook from a file path
        Dim workbook As WorkBook = WorkBook.Load("SalesData.xlsx")

        ' Access the first worksheet in the workbook
        Dim sheet As WorkSheet = workbook.DefaultWorkSheet

        ' Define the cell range to extract
        Dim dataRange As IronXl.Range = sheet.GetRange("A1:D5")

        ' Determine array dimensions from the range
        Dim rowCount As Integer = dataRange.Rows.Count
        Dim colCount As Integer = dataRange.Columns.Count
        Dim salesArray(rowCount - 1, colCount - 1) As String

        ' Populate the two-dimensional array from cell values
        Dim rowIndex As Integer = 0
        For Each row As RangeRow In dataRange.Rows
            Dim colIndex As Integer = 0
            For Each cell As Cell In row
                salesArray(rowIndex, colIndex) = cell.StringValue
                colIndex += 1
            Next
            rowIndex += 1
        Next

        ' Print each row to the console
        Console.WriteLine("Data loaded into array:")
        For i As Integer = 0 To rowCount - 1
            For j As Integer = 0 To colCount - 1
                Console.Write(salesArray(i, j) & vbTab)
            Next
            Console.WriteLine()
        Next
    End Sub
End Module
Imports IronXL

Module ReadExcelToArray
    Sub Main()
        ' Load the Excel workbook from a file path
        Dim workbook As WorkBook = WorkBook.Load("SalesData.xlsx")

        ' Access the first worksheet in the workbook
        Dim sheet As WorkSheet = workbook.DefaultWorkSheet

        ' Define the cell range to extract
        Dim dataRange As IronXl.Range = sheet.GetRange("A1:D5")

        ' Determine array dimensions from the range
        Dim rowCount As Integer = dataRange.Rows.Count
        Dim colCount As Integer = dataRange.Columns.Count
        Dim salesArray(rowCount - 1, colCount - 1) As String

        ' Populate the two-dimensional array from cell values
        Dim rowIndex As Integer = 0
        For Each row As RangeRow In dataRange.Rows
            Dim colIndex As Integer = 0
            For Each cell As Cell In row
                salesArray(rowIndex, colIndex) = cell.StringValue
                colIndex += 1
            Next
            rowIndex += 1
        Next

        ' Print each row to the console
        Console.WriteLine("Data loaded into array:")
        For i As Integer = 0 To rowCount - 1
            For j As Integer = 0 To colCount - 1
                Console.Write(salesArray(i, j) & vbTab)
            Next
            Console.WriteLine()
        Next
    End Sub
End Module
Imports IronXL

Module ReadExcelToArray
    Sub Main()
        ' Load the Excel workbook from a file path
        Dim workbook As WorkBook = WorkBook.Load("SalesData.xlsx")

        ' Access the first worksheet in the workbook
        Dim sheet As WorkSheet = workbook.DefaultWorkSheet

        ' Define the cell range to extract
        Dim dataRange As IronXl.Range = sheet.GetRange("A1:D5")

        ' Determine array dimensions from the range
        Dim rowCount As Integer = dataRange.Rows.Count
        Dim colCount As Integer = dataRange.Columns.Count
        Dim salesArray(rowCount - 1, colCount - 1) As String

        ' Populate the two-dimensional array from cell values
        Dim rowIndex As Integer = 0
        For Each row As RangeRow In dataRange.Rows
            Dim colIndex As Integer = 0
            For Each cell As Cell In row
                salesArray(rowIndex, colIndex) = cell.StringValue
                colIndex += 1
            Next
            rowIndex += 1
        Next

        ' Print each row to the console
        Console.WriteLine("Data loaded into array:")
        For i As Integer = 0 To rowCount - 1
            For j As Integer = 0 To colCount - 1
                Console.Write(salesArray(i, j) & vbTab)
            Next
            Console.WriteLine()
        Next
    End Sub
End Module
$vbLabelText   $csharpLabel

Çalışma Kitabı ve Çalışma Sayfası Nesnelerini Anlamak

WorkBook.Load, XLSX, XLS, CSV ve TSV dosyalarını destekler. Yüklendikten sonra, workbook.DefaultWorkSheet ilk sayfayı döndürür. Ayrıca isimle workbook.GetWorkSheet("Sheet1") veya indeksle workbook.WorkSheets(0) erişebilirsiniz.

GetRange("A1:D5") çağrısı, Rows ve Columns koleksiyonlarını ortaya çıkaran bir IronXl.Range döndürür. Her RangeRow, Cell nesnelerini yineleyerek, cell.StringValue, altındaki hücre türünden bağımsız olarak görüntüleme dizgesi döndürür.

Türlendirilmiş Hücre Değerlerini Nasıl Ele Alırsınız?

IronXL hücreleri, StringValue yanında tiplenmiş özellikler ortaya çıkarır:

  • cell.IntValue -- hücreyi bir tamsayı olarak ayrıştırır
  • cell.DoubleValue -- hücreyi bir double olarak ayrıştırır
  • cell.DateTimeValue -- tarih formatlı hücreleri ayrıştırır
  • cell.IsFormula -- hücrenin bir formül içerip içermediğini belirtir

Finansal veriler için, diziyi Double olarak bildirin ve cell.DoubleValue'yı doğrudan atayın. Bu, aşağı devirdiğiniz işlemler sırasında dizgeyi sayıya dönüştürmeleri önler.

Imports IronXL

Module ReadExcelToDoubleArray
    Sub Main()
        Dim workbook As WorkBook = WorkBook.Load("Revenue.xlsx")
        Dim sheet As WorkSheet = workbook.DefaultWorkSheet
        Dim dataRange As IronXl.Range = sheet.GetRange("B2:E10")

        Dim rowCount As Integer = dataRange.Rows.Count
        Dim colCount As Integer = dataRange.Columns.Count
        Dim revenueArray(rowCount - 1, colCount - 1) As Double

        Dim rowIndex As Integer = 0
        For Each row As RangeRow In dataRange.Rows
            Dim colIndex As Integer = 0
            For Each cell As Cell In row
                revenueArray(rowIndex, colIndex) = cell.DoubleValue
                colIndex += 1
            Next
            rowIndex += 1
        Next

        ' Calculate column totals
        For j As Integer = 0 To colCount - 1
            Dim total As Double = 0
            For i As Integer = 0 To rowCount - 1
                total += revenueArray(i, j)
            Next
            Console.WriteLine($"Column {j + 1} total: {total:C}")
        Next
    End Sub
End Module
Imports IronXL

Module ReadExcelToDoubleArray
    Sub Main()
        Dim workbook As WorkBook = WorkBook.Load("Revenue.xlsx")
        Dim sheet As WorkSheet = workbook.DefaultWorkSheet
        Dim dataRange As IronXl.Range = sheet.GetRange("B2:E10")

        Dim rowCount As Integer = dataRange.Rows.Count
        Dim colCount As Integer = dataRange.Columns.Count
        Dim revenueArray(rowCount - 1, colCount - 1) As Double

        Dim rowIndex As Integer = 0
        For Each row As RangeRow In dataRange.Rows
            Dim colIndex As Integer = 0
            For Each cell As Cell In row
                revenueArray(rowIndex, colIndex) = cell.DoubleValue
                colIndex += 1
            Next
            rowIndex += 1
        Next

        ' Calculate column totals
        For j As Integer = 0 To colCount - 1
            Dim total As Double = 0
            For i As Integer = 0 To rowCount - 1
                total += revenueArray(i, j)
            Next
            Console.WriteLine($"Column {j + 1} total: {total:C}")
        Next
    End Sub
End Module
Imports IronXL

Module ReadExcelToDoubleArray
    Sub Main()
        Dim workbook As WorkBook = WorkBook.Load("Revenue.xlsx")
        Dim sheet As WorkSheet = workbook.DefaultWorkSheet
        Dim dataRange As IronXl.Range = sheet.GetRange("B2:E10")

        Dim rowCount As Integer = dataRange.Rows.Count
        Dim colCount As Integer = dataRange.Columns.Count
        Dim revenueArray(rowCount - 1, colCount - 1) As Double

        Dim rowIndex As Integer = 0
        For Each row As RangeRow In dataRange.Rows
            Dim colIndex As Integer = 0
            For Each cell As Cell In row
                revenueArray(rowIndex, colIndex) = cell.DoubleValue
                colIndex += 1
            Next
            rowIndex += 1
        Next

        ' Calculate column totals
        For j As Integer = 0 To colCount - 1
            Dim total As Double = 0
            For i As Integer = 0 To rowCount - 1
                total += revenueArray(i, j)
            Next
            Console.WriteLine($"Column {j + 1} total: {total:C}")
        Next
    End Sub
End Module
$vbLabelText   $csharpLabel

Çıktı

VB .NET Excel Dosyasını Diziye Okuma: IronXL ve Microsoft Interop Karşılaştırması: Resim 1 - VB .NET ile Excel Dosyasını diziye okuma için IronXL ve Office Excel karşılaştırılması

Bu kod örneği IronXL'nin sezgisel API'sini gösterir. WorkBook.Load yöntemi, Excel dosyasını belirlenen klasörden doğrudan açar, Range nesnesi ise Excel elektronik tablosu içinde belirli hücre bölgelerine erişim sağlar. Eski VBA makrolarının aksine, bu yaklaşım tamamen tip güvenli ve .NET ekosistemine entegre edilmiştir.

Şimdi IronXL ile başlayın.
green arrow pointer

Geleneksel Microsoft Office Interop Yaklaşımı Nedir?

Microsoft Office Interop, bir Excel uygulama örneği ile bağlantı kurmak için COM otomasyonuna dayanır. Visual Studio'da bunu ayarlamak için Proje menüsüne gidin, "Referans Ekle"yi seçin ve COM sekmesi altında Microsoft Excel Nesne Kütüphanesi arayın. Kodun çalıştığı her makinada yerel bir Excel kurulumu bulunması gerekir.

Imports Microsoft.Office.Interop.Excel

Module InteropExcelArray
    Sub Main()
        Dim excelApp As New Application()
        Dim workbooks As Workbooks = excelApp.Workbooks
        Dim workbook As Workbook = Hayırthing
        Dim sheet As Worksheet = Hayırthing

        Try
            ' Suppress screen updates during processing
            excelApp.ScreenUpdating = False

            ' Open the workbook by full file path
            workbook = workbooks.Open("C:\Data\SalesData.xlsx")

            ' Reference the first worksheet
            sheet = CType(workbook.Sheets(1), Worksheet)

            ' Define a range and pull values into an object array
            Dim dataRange As Range = sheet.Range("A1", "D5")
            Dim values(,) As Object = CType(dataRange.Value, Object(,))

            ' COM arrays are 1-based, so enumerate from index 1
            Dim rows As Integer = values.GetUpperBound(0)
            Dim columns As Integer = values.GetUpperBound(1)

            For i As Integer = 1 To rows
                Dim line As String = ""
                For j As Integer = 1 To columns
                    line &= values(i, j).ToString() & vbTab
                Next
                Console.WriteLine(line)
            Next

        Catch ex As Exception
            Console.WriteLine("Error: " & ex.Message)

        Finally
            ' Release COM objects to prevent orphaned Excel processes
            If sheet IsHayırt Hayırthing Then
                System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet)
            End If
            If workbook IsHayırt Hayırthing Then
                workbook.Close(False)
                System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook)
            End If
            excelApp.Quit()
            System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp)
        End Try
    End Sub
End Module
Imports Microsoft.Office.Interop.Excel

Module InteropExcelArray
    Sub Main()
        Dim excelApp As New Application()
        Dim workbooks As Workbooks = excelApp.Workbooks
        Dim workbook As Workbook = Hayırthing
        Dim sheet As Worksheet = Hayırthing

        Try
            ' Suppress screen updates during processing
            excelApp.ScreenUpdating = False

            ' Open the workbook by full file path
            workbook = workbooks.Open("C:\Data\SalesData.xlsx")

            ' Reference the first worksheet
            sheet = CType(workbook.Sheets(1), Worksheet)

            ' Define a range and pull values into an object array
            Dim dataRange As Range = sheet.Range("A1", "D5")
            Dim values(,) As Object = CType(dataRange.Value, Object(,))

            ' COM arrays are 1-based, so enumerate from index 1
            Dim rows As Integer = values.GetUpperBound(0)
            Dim columns As Integer = values.GetUpperBound(1)

            For i As Integer = 1 To rows
                Dim line As String = ""
                For j As Integer = 1 To columns
                    line &= values(i, j).ToString() & vbTab
                Next
                Console.WriteLine(line)
            Next

        Catch ex As Exception
            Console.WriteLine("Error: " & ex.Message)

        Finally
            ' Release COM objects to prevent orphaned Excel processes
            If sheet IsHayırt Hayırthing Then
                System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet)
            End If
            If workbook IsHayırt Hayırthing Then
                workbook.Close(False)
                System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook)
            End If
            excelApp.Quit()
            System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp)
        End Try
    End Sub
End Module
Imports Microsoft.Office.Interop.Excel

Module InteropExcelArray
    Sub Main()
        Dim excelApp As New Application()
        Dim workbooks As Workbooks = excelApp.Workbooks
        Dim workbook As Workbook = Nothing
        Dim sheet As Worksheet = Nothing

        Try
            ' Suppress screen updates during processing
            excelApp.ScreenUpdating = False

            ' Open the workbook by full file path
            workbook = workbooks.Open("C:\Data\SalesData.xlsx")

            ' Reference the first worksheet
            sheet = CType(workbook.Sheets(1), Worksheet)

            ' Define a range and pull values into an object array
            Dim dataRange As Range = sheet.Range("A1", "D5")
            Dim values(,) As Object = CType(dataRange.Value, Object(,))

            ' COM arrays are 1-based, so enumerate from index 1
            Dim rows As Integer = values.GetUpperBound(0)
            Dim columns As Integer = values.GetUpperBound(1)

            For i As Integer = 1 To rows
                Dim line As String = ""
                For j As Integer = 1 To columns
                    line &= values(i, j).ToString() & vbTab
                Next
                Console.WriteLine(line)
            Next

        Catch ex As Exception
            Console.WriteLine("Error: " & ex.Message)

        Finally
            ' Release COM objects to prevent orphaned Excel processes
            If sheet IsNot Nothing Then
                System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet)
            End If
            If workbook IsNot Nothing Then
                workbook.Close(False)
                System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook)
            End If
            excelApp.Quit()
            System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp)
        End Try
    End Sub
End Module
$vbLabelText   $csharpLabel

COM Nesne Yönetimi Neden Önemlidir?

Interop yaklaşımı, COM nesne yaşam döngüsü yönetimine dikkatli bir şekilde odaklanılmasını gerektirir. Excel uygulaması tarafından döndürülen her nesne -- çalışma kitapları, çalışma sayfaları, aralıklar ve hücreler -- bir referans sayımlı COM işaretçisi tutar. Bu nesnelerden her biri üzerinde Marshal.ReleaseComObject çağrısı yapmamak, arka planda sessizce çalışan bir EXCEL.EXE işlemi bırakır.

Sunucularda, sahipsiz işlemler zamanla birikir ve sonunda mevcut belleği veya dosya tanıtıcılarını tüketir. Yukarıdaki Try...Finally deseni minimum güvenli yaklaşımdır, ancak birçok kurumsal kod tabanı iç içe geçmiş nesne grafiklerini ele almak için özel bir COM temizleme aracı ekler.

Interop dizi indeksleme kuralı, standart VB.NET dizilerinden de farklıdır: COM tabanlı diziler indeks 1'den başlar, 0'dan değil. Bu, herhangi bir satır veya sütun döngüsünün, farktan bir eksikliğe neden olan farktan dolayı hesaplayarak farkı dikkate alması gerektiği anlamına gelir, bu da çalışma zamanı hatalarının ve veri kesme hatalarının yaygın bir kaynağıdır.

Hangi Çözüm Daha İyi Geliştirici Deneyimi Sunar?

Bu yaklaşımların üretim kullanımı için değerlendirildiğinde, birkaç faktör IronXL'yi tercih edilen çözüm olarak avantajlı kılar:

Yayın Basitliği: IronXL, tek bir NuGet paketi aracılığıyla yüklenir, Interop ise karmaşık ortam yapılandırmaları gerektirir. Bu, programınızın bir kullanıcı oturumunun olmadığı bir derleme sunucusunda veya bulut fonksiyonunda bir XLSX dosyasını işlemesi gerektiğinde önemlidir.

Kod Bakımı: IronXL aracılığıyla bir veri tablosunu okumak, kodun kısa ve okunabilir kalmasını sağlar. Satır ve sütun sayıları birinci sınıf özellikler olarak mevcuttur. Interop ile, 1 indeksli COM dizilerinde üst sınırları hesaplar ve geç bağlanan Object değerlerini manuel olarak dönüştürürsünüz.

Biçim Esnekliği: XLSX gibi standart Excel çalışma kitabı biçimlerinin ötesinde, IronXL, birden çok formatta test verileri geldiğinde yararlı olan CSV ayrıştırmayı doğal olarak destekler. Kütüphane ayrıca yeni çalışma kitabı dosyaları oluşturabilir ve değerlere eşit kolaylıkla hücrelere geri yazabilir. Tam bir liste için IronXL format guide sayfasına bakın.

Hata Yönetimi: IronXL'e standart .NET istisna modelleri uygulanır, bu da hata kurtarmayı kolaylaştırır. COM tabanlı istisnalar ek işleme mantığı gerektirir ve düzgün bir şekilde yönetilmediğinde Excel örneklerini çalışır halde bırakabilir.

Çoklu Platform Desteği: IronXL, .NET 6 ve sonrası aracılığıyla Linux ve macOS üzerinde çalışır. Interop, Win32 COM alt sistemine dayandığı için yalnızca Windows içindir.

VB.NET'te Dizi Okuma Performans ve Bakım Tavizleri
Kriterler IronXL Microsoft Interop
Temel dizi okuma kod satırları ~20 ~40+
Manuel COM temizleme gerektirir Hayır Evet
Excel yüklü olmadan çalışır Evet Hayır
Docker / CI boruhatlarında çalışır Evet Hayır
Dizi indeksleme kuralları 0-bazlı (.NET standardı) 1-bazlı (COM standardı)

VB.NET'te Dinamik Excel Aralıklarıyla Nasıl Çalışılır?

Üretim elektronik tabloları nadiren sabit sayıda satır içerir. IronXL, her çalışma sayfasında tüm boş olmayan hücrelerin sınırlayıcı dikdörtgenini döndüren UsedRange özelliği sağlar. Sabit kodlu bir aralık dizesi yerine bunu kullanabilirsiniz.

Imports IronXL

Module DynamicRangeExample
    Sub Main()
        Dim workbook As WorkBook = WorkBook.Load("DynamicData.xlsx")
        Dim sheet As WorkSheet = workbook.DefaultWorkSheet

        ' Get the bounding range of all populated cells
        Dim usedRange As IronXl.Range = sheet.UsedRange

        Dim rowCount As Integer = usedRange.Rows.Count
        Dim colCount As Integer = usedRange.Columns.Count
        Dim dynamicArray(rowCount - 1, colCount - 1) As String

        Dim rowIndex As Integer = 0
        For Each row As RangeRow In usedRange.Rows
            Dim colIndex As Integer = 0
            For Each cell As Cell In row
                dynamicArray(rowIndex, colIndex) = cell.StringValue
                colIndex += 1
            Next
            rowIndex += 1
        Next

        Console.WriteLine($"Loaded {rowCount} rows x {colCount} columns from UsedRange.")
    End Sub
End Module
Imports IronXL

Module DynamicRangeExample
    Sub Main()
        Dim workbook As WorkBook = WorkBook.Load("DynamicData.xlsx")
        Dim sheet As WorkSheet = workbook.DefaultWorkSheet

        ' Get the bounding range of all populated cells
        Dim usedRange As IronXl.Range = sheet.UsedRange

        Dim rowCount As Integer = usedRange.Rows.Count
        Dim colCount As Integer = usedRange.Columns.Count
        Dim dynamicArray(rowCount - 1, colCount - 1) As String

        Dim rowIndex As Integer = 0
        For Each row As RangeRow In usedRange.Rows
            Dim colIndex As Integer = 0
            For Each cell As Cell In row
                dynamicArray(rowIndex, colIndex) = cell.StringValue
                colIndex += 1
            Next
            rowIndex += 1
        Next

        Console.WriteLine($"Loaded {rowCount} rows x {colCount} columns from UsedRange.")
    End Sub
End Module
Imports IronXL

Module DynamicRangeExample
    Sub Main()
        Dim workbook As WorkBook = WorkBook.Load("DynamicData.xlsx")
        Dim sheet As WorkSheet = workbook.DefaultWorkSheet

        ' Get the bounding range of all populated cells
        Dim usedRange As IronXl.Range = sheet.UsedRange

        Dim rowCount As Integer = usedRange.Rows.Count
        Dim colCount As Integer = usedRange.Columns.Count
        Dim dynamicArray(rowCount - 1, colCount - 1) As String

        Dim rowIndex As Integer = 0
        For Each row As RangeRow In usedRange.Rows
            Dim colIndex As Integer = 0
            For Each cell As Cell In row
                dynamicArray(rowIndex, colIndex) = cell.StringValue
                colIndex += 1
            Next
            rowIndex += 1
        Next

        Console.WriteLine($"Loaded {rowCount} rows x {colCount} columns from UsedRange.")
    End Sub
End Module
$vbLabelText   $csharpLabel

Dolu Dizi Verilerini Yükleme Sonrası Nasıl Filtreler ve Doğrularsınız?

Dizi dolduktan sonra yapılan yaygın işleme adımları şunlardır:

  • Başlık satırlarını atla: Görüntüleme döngüsüne sütun başlıklarını hariç tutmak için 0 yerine 1. indeksten başlayın.
  • Boşlukları kısaltma: Elektronik tablodan kopyalanan başlangıç ve bitiş boşluklarını kaldırmak için cell.StringValue üzerinde .Trim() çağırın.
  • Null hücrelere dikkat et: IronXL boş hücreler için boş bir dize döndürür, bu nedenle çoğu durumda boş kontrolü gerekli değildir.
  • Sayı aralıklarını doğrula: Çiftleri yükledikten sonra, -1 veya 9999 gibi yer tutucu değerler içeren hücreleri yakalamak için bir aralık kontrolü uygulayın.

Daha büyük veri kümeleri için, ham iki boyutlu bir dizi yerine List(Of T) veya güçlü tipli bir sınıf kullanmayı düşünün. Verileri türlendirilmiş nesnelere yüklemek, aşağıdaki kodun okunmasını ve test edilmesini kolaylaştırır. Tüm mevcut hücre özelliklerini ve çalışma sayfası yöntemlerini belgeleyen IronXL nesne modeli referansına göz atın.

Bir VB.NET Dizisini Excel'e Nasıl Geri Aktarırsınız?

IronXL, dizi verilerini okuma için kullanılan aynı API ile bir çalışma sayfasına geri yazmayı destekler. Bu, bellekte verileri dönüştürdüğünüz ve sonucu yeni bir Excel dosyası olarak kaydetmeniz gereken senaryolar için kullanışlıdır.

Imports IronXL

Module WriteArrayToExcel
    Sub Main()
        ' Create a new workbook and worksheet
        Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
        Dim sheet As WorkSheet = workbook.CreateWorkSheet("Results")

        Dim outputArray(,) As String = {
            {"Region", "Q1", "Q2", "Q3"},
            {"Hayırrth", "12500", "14200", "15800"},
            {"South", "9800", "10500", "11300"},
            {"East", "8200", "9100", "9900"}
        }

        ' Write the array contents to the worksheet cell by cell
        For i As Integer = 0 To outputArray.GetUpperBound(0)
            For j As Integer = 0 To outputArray.GetUpperBound(1)
                Dim cellAddress As String = IronXl.ExcelAddress.ToAddress(i, j)
                sheet(cellAddress).Value = outputArray(i, j)
            Next
        Next

        workbook.SaveAs("Output.xlsx")
        Console.WriteLine("Workbook saved as Output.xlsx")
    End Sub
End Module
Imports IronXL

Module WriteArrayToExcel
    Sub Main()
        ' Create a new workbook and worksheet
        Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
        Dim sheet As WorkSheet = workbook.CreateWorkSheet("Results")

        Dim outputArray(,) As String = {
            {"Region", "Q1", "Q2", "Q3"},
            {"Hayırrth", "12500", "14200", "15800"},
            {"South", "9800", "10500", "11300"},
            {"East", "8200", "9100", "9900"}
        }

        ' Write the array contents to the worksheet cell by cell
        For i As Integer = 0 To outputArray.GetUpperBound(0)
            For j As Integer = 0 To outputArray.GetUpperBound(1)
                Dim cellAddress As String = IronXl.ExcelAddress.ToAddress(i, j)
                sheet(cellAddress).Value = outputArray(i, j)
            Next
        Next

        workbook.SaveAs("Output.xlsx")
        Console.WriteLine("Workbook saved as Output.xlsx")
    End Sub
End Module
Imports IronXL

Module WriteArrayToExcel
    Sub Main()
        ' Create a new workbook and worksheet
        Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
        Dim sheet As WorkSheet = workbook.CreateWorkSheet("Results")

        Dim outputArray(,) As String = {
            {"Region", "Q1", "Q2", "Q3"},
            {"Hayırrth", "12500", "14200", "15800"},
            {"South", "9800", "10500", "11300"},
            {"East", "8200", "9100", "9900"}
        }

        ' Write the array contents to the worksheet cell by cell
        For i As Integer = 0 To outputArray.GetUpperBound(0)
            For j As Integer = 0 To outputArray.GetUpperBound(1)
                Dim cellAddress As String = IronXl.ExcelAddress.ToAddress(i, j)
                sheet(cellAddress).Value = outputArray(i, j)
            Next
        Next

        workbook.SaveAs("Output.xlsx")
        Console.WriteLine("Workbook saved as Output.xlsx")
    End Sub
End Module
$vbLabelText   $csharpLabel

ExcelAddress.ToAddress(row, column) yardımcısı, sıfır tabanlı tamsayı koordinatlarını A1-notasyon dizelerine dönüştürür. Bu, yazma döngüsünü temiz tutar ve hücre adreslerini manuel olarak hesaplamaktan kaçınır. Formül enjeksiyonu ve stil uygulaması dahil daha fazla model için IronXL yazı öğreticiyi inceleyin.

Birden Çok Çalışma Sayfasını Ayrı Dizilere Nasıl Okursun?

Bazı çalışma kitapları verileri birden fazla yaprak üzerinde saklar -- örneğin, bir yaprak her bir ay veya her bir bölge için. IronXL, tüm sayfaları workbook.WorkSheets ile açığa çıkarır, böylece her sayfayı kendi dizisine yüklemek için yinelenebilir.

Imports IronXL

Module MultiSheetArrayLoader
    Sub Main()
        Dim workbook As WorkBook = WorkBook.Load("AnnualReport.xlsx")

        For Each sheet As WorkSheet In workbook.WorkSheets
            Console.WriteLine($"Loading sheet: {sheet.Name}")

            Dim dataRange As IronXl.Range = sheet.UsedRange
            Dim rowCount As Integer = dataRange.Rows.Count
            Dim colCount As Integer = dataRange.Columns.Count
            Dim sheetArray(rowCount - 1, colCount - 1) As String

            Dim rowIndex As Integer = 0
            For Each row As RangeRow In dataRange.Rows
                Dim colIndex As Integer = 0
                For Each cell As Cell In row
                    sheetArray(rowIndex, colIndex) = cell.StringValue
                    colIndex += 1
                Next
                rowIndex += 1
            Next

            Console.WriteLine($"  Loaded {rowCount} rows x {colCount} columns.")
        Next
    End Sub
End Module
Imports IronXL

Module MultiSheetArrayLoader
    Sub Main()
        Dim workbook As WorkBook = WorkBook.Load("AnnualReport.xlsx")

        For Each sheet As WorkSheet In workbook.WorkSheets
            Console.WriteLine($"Loading sheet: {sheet.Name}")

            Dim dataRange As IronXl.Range = sheet.UsedRange
            Dim rowCount As Integer = dataRange.Rows.Count
            Dim colCount As Integer = dataRange.Columns.Count
            Dim sheetArray(rowCount - 1, colCount - 1) As String

            Dim rowIndex As Integer = 0
            For Each row As RangeRow In dataRange.Rows
                Dim colIndex As Integer = 0
                For Each cell As Cell In row
                    sheetArray(rowIndex, colIndex) = cell.StringValue
                    colIndex += 1
                Next
                rowIndex += 1
            Next

            Console.WriteLine($"  Loaded {rowCount} rows x {colCount} columns.")
        Next
    End Sub
End Module
Imports IronXL

Module MultiSheetArrayLoader
    Sub Main()
        Dim workbook As WorkBook = WorkBook.Load("AnnualReport.xlsx")

        For Each sheet As WorkSheet In workbook.WorkSheets
            Console.WriteLine($"Loading sheet: {sheet.Name}")

            Dim dataRange As IronXl.Range = sheet.UsedRange
            Dim rowCount As Integer = dataRange.Rows.Count
            Dim colCount As Integer = dataRange.Columns.Count
            Dim sheetArray(rowCount - 1, colCount - 1) As String

            Dim rowIndex As Integer = 0
            For Each row As RangeRow In dataRange.Rows
                Dim colIndex As Integer = 0
                For Each cell As Cell In row
                    sheetArray(rowIndex, colIndex) = cell.StringValue
                    colIndex += 1
                Next
                rowIndex += 1
            Next

            Console.WriteLine($"  Loaded {rowCount} rows x {colCount} columns.")
        Next
    End Sub
End Module
$vbLabelText   $csharpLabel

Sayfa Navigasyonu Anlamak

workbook.WorkSheets koleksiyonu sıfır indekslidir ve hem For Each hem de indeksli erişimi destekler. Sayfaları programlı olarak tanımlamak ve bilinen sayfa adlarına göre mantık dallandırmak için sheet.Name kullanın. Aralık seçimi, adlandırılmış aralıklar ve dinamik aralık algılama hakkında detaylı bilgi için IronXL çalışma sayfası kılavuzuna bakın.

Onlarca yaprağı olan çalışma kitapları için, ilgisiz sayfaları işlemekten ve belleği israf etmekten kaçınmak için yükleme öncesi ada göre filtre uygulayın.

Geliştiriciler Interop Dizi Biçimi Hakkında Ne Bilmeli?

Interop yaklaşımı, hücre verilerini COM'un 1 tabanlı indekslemesini kullanarak Object(,) dizisi olarak döndürür. İlk satırın ilk elemanı values(1, 1)'de, values(0, 0) değil. Bu, farktan bir eksiklik hatalarının sık görülen bir kaynağıdır.

Ek bir konu, boş hücreler için Interop'un Hayırthing döndürmesidir. Boş bir referansta .ToString() çağrısı yapmak, çalışma zamanında bir NullReferenceException fırlatır. Her hücre erişiminin çevresine bir null koruma eklemelisiniz:

If values(i, j) IsHayırt Hayırthing Then
    line &= values(i, j).ToString() & vbTab
End If
If values(i, j) IsHayırt Hayırthing Then
    line &= values(i, j).ToString() & vbTab
End If
net
$vbLabelText   $csharpLabel

IronXL, boş hücreler için boş bir dize döndürerek bu sorunu ortadan kaldırır, bu da döngü kodunun ek bekçiler gerektirmeden çalışacağı anlamına gelir.

Interop tarafından kullanılan Excel Nesne Modeli hakkında kesin bilgi için Microsoft Excel VBA referansına ve MSDN Office interop belgelerine başvurun.

Sıradaki Adımlarınız Neler?

Excel verilerini dizilere okumak en yaygın .NET elektronik tablo görevlerinden biridir ve IronXL uygulamayı basit hale getirir. Bir sonraki adımı atmak için:

  • IronXL indirin: NuGet (Install-Package IronXl.Excel) aracılığıyla yükleyin ve başlarken kılavuzunu izleyin.
  • Format desteğini keşfedin: IronXL, XLSX, XLS, CSV, TSV ve JSON yazıp okur. Desteklenen formatlar sayfası için ayrıntılara göz atın.
  • Gelişmiş özellikleri deneyin: Excel yüklü olmadan aralıkları sıralayın, formüller uygulayın, hücre stilleri ayarlayın ve grafikler oluşturun. IronXL özellikler özetini inceleyerek tam yetenek listesini gözden geçirin.
  • Kod örneklerine göz atın: IronXL kod örnekleri kütüphanesi, düzinelerce yaygın elektronik tablo görevi için kopyala-yapıştır snippet'leri sağlar.
  • Lisanslamayı gözden geçirin: Üretim dağıtımları için IronXL lisanslaması, geliştirici, ekip ve OEM katmanları sunar.

VB .NET Excel Dosyasını Diziye Okuma: IronXL ve Microsoft Interop Karşılaştırması: Resim 2 - IronXL çıktısı

Hem IronXL hem de Microsoft Office Interop, Excel verilerini dizilere okuyabilir ancak IronXL, Office'ten bağımsız mimarisi, daha temiz API'si ve esnek dağıtım seçenekleri ile üstün bir geliştirici deneyimi sunar. Kütüphane, ortak sorunları, COM nesnesi yönetimi ve sistem bağımlılıkları gibi, ortadan kaldırırken, elektronik tablo otomasyonu için gelişmiş özelliklere erişim sağlar.

Örnek projeler, kaynaklar ve belgeler ile IronXL'nin tüm yeteneklerini IronXL dokümantasyon merkezinde keşfedin. Kurumsal uygulamalar için IronXL lisanslama seçenekleri, herhangi bir proje kapsamına uyacak esnek şartlar sunar.

Sıkça Sorulan Sorular

VB.NET kullanarak dizilere Excel dosyalari okumak için en iyi yöntem nedir?

VB.NET'te dizilere Excel dosyalarini okuma, IronXL ya da Microsoft Office Interop kullanarak etkili bir şekilde saglanabilir. IronXL, Microsoft Excel kurulumuna gerek duymadan kodun karmasikligini azaltarak daha basit ve verimli bir yaklasim sunar.

Excel dosyalarini okuma konusunda IronXL, Microsoft Office Interop ile nasil karsilastirilir?

IronXL, Microsoft Office Interop'a gore Excel dosyalarini dizilere okuma noktasinda daha duzgun ve hizli bir yöntem sunar. Server'da Excel kurulumu gerekmez ve Excel dosya işleme, daha az yukle gerceklesir.

Microsoft Excel kurulumuna gerek olmadan Excel verisini yönetebilir miyim?

Evet, IronXL kullanarak Microsoft Excel kurulumuna gerek kalmadan Excel verisini yönetebilirsiniz. Bu, Excel kurmanin mumkun olmadigi server ortamlar için harika bir seçenek yapar.

VB.NET'te Excel işlemleri için neden IronXL kullanmayi dusunmeliyim?

IronXL, çeşitli Excel dosya formatlarini yöneten sezgisel bir API sunarak Excel işlemlerini basitlestirir. Microsoft Excel'in kurulamadigi ortamlarda daha hizli performans ve daha kolay kurulum saglar.

IronXL, VB.NET'te büyük Excel veri setlerini işlemek için uygun mu?

Evet, IronXL performans için optimize edilmis olup büyük Excel veri setlerini etkili bir şekilde yönetebilir, hizli veri çıkarma ve işleme saglar.

VB.NET kullanarak dizilere Excel dosyalarini okuma için mevcut kod örnekleri nelerdir?

Kılavuz, VB.NET'te dizilere Excel dosyalarini etkili bir şekilde okumayi göstererek, hem IronXL hem de Microsoft Office Interop için calisan kod örnekleri sunar.

IronXL farkli Excel dosya formatlarini destekliyor mu?

IronXL, XLSX, XLS, CSV ve daha fazlasini iceren genis bir Excel dosya formatlari yelpazesini destekler, çeşitli veri işleme ihtiyaçlari için çok yonludur.

IronXL kullanıminda Microsoft Office Interop'a karsi hangi faydalar bulunmaktadir?

IronXL, kullanımi daha kolaydir, Excel kurulumu gerektirmez ve daha iyi performans sunar. Microsoft Office Interop'taki COM etkilesimleriyle ilgili potansiyel hatalari azaltarak kodu basitlestirir.

IronXL, Microsoft Interop'tan farkli olarak iki boyutlu dizileri nasil ele alir?

IronXL, Excel verilerini iki boyutlu dizilere dönüştürmenin doğrudan yöntemlerini sunar, Microsoft Interop ile mukayese edilince daha komplek bir kurulum gerektiren yönetimde daha verimli ve basit bir yaklasimi garanti eder.

Excel dosyalarini dizilere okumak için hangi en iyi uygulamalar önerilir?

En iyi uygulamalar, ortamınız için doğru araci, kullanımi kolay ve performansi yüksek olan IronXL gibi secebilir, bellek ve işlem gucunu etkili bir şekilde yönetmek için verimli kod yapilarini garanti eder.

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