跳至頁尾內容
與其他組件的比較

VB.NET 將 Excel 檔案讀取到陣列:IronXL 與 Microsoft Interop 的比較

在VB.NET中將Excel資料讀入陣列需要載入工作簿,選擇工作表,迭代行和列,並將每個單元格的值儲存在二維陣列中。 使用IronXL,您可以在幾行程式碼中完成此操作而無需安裝Microsoft Office。安裝NuGet套件,呼叫Rows集合以填充您的陣列。

開始您的免費試用,探索IronXL如何簡化您在Visual Studio專案中的Excel自動化。

這些解決方案的一瞥比較如何?

IronXL對比Microsoft Office Interop -- VB.NET陣列操作的功能比較
功能 IronXL Microsoft Office Interop
需要安裝Office 是的
NuGet安裝 是 -- 一個套件 否 -- COM參考
支援Server/CI環境 是的 有限
COM物件生命週期管理 不需要 需要
支持的格式 XLSX, XLS, CSV, TSV, JSON XLSX, XLS (僅限Excel)
型別安全API 是的 部分支持 -- 延遲綁定COM
支援Linux / macOS 是 (.NET 6+)
異常處理風格 標準.NET異常 COM異常 + 手動清理

如何在VB.NET專案中安裝IronXL?

將IronXL新增到任何.NET專案最快的方法是通過NuGet套件管理器。 在Visual Studio中打開套件管理器控制台並運行:

Install-Package IronXL.Excel

或者,使用.NET CLI:

dotnet add package IronXL.Excel

安裝後,在VB.NET模組的頂部新增Imports IronXL。 不需要安裝Office -- IronXL完全通過其自身的解析引擎讀取和寫入Excel文件。

對於目標較舊框架或需要特定版本固定的專案,IronXL NuGet頁面列表中顯示每個已發布版本。 IronXL文件提供了Visual Studio 2019、2022及.NET CLI的安裝指南。

開發人員如何使用IronXL將Excel資料讀入陣列?

IronXL提供了簡潔的API,用於打開工作簿、選擇範圍和迭代單元格值,而無需本地安裝Office。 WorkBook物件,其中透露所有工作表。

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

了解WorkBook和WorkSheet物件

WorkBook.Load支持XLSX, XLS, CSV和TSV文件。 一旦載入完成,workbook.DefaultWorkSheet返回第一個工作表。 您也可以使用workbook.WorkSheets(0)按索引存取。

Columns集合。 每個cell.StringValue返回顯示字串,無論底層的單元格型別如何。

您如何處理型別化單元格值?

IronXL單元格同時揭露型別化屬性和StringValue

  • cell.IntValue -- 將單元格解析為整數
  • cell.DoubleValue -- 將單元格解析為雙精度浮點數
  • cell.DateTimeValue -- 解析日期格式的單元格
  • cell.IsFormula -- 表示單元格是否包含公式

對於財務資料,宣告陣列為cell.DoubleValue。 這樣避免在下游處理期間進行字串到數字的轉換。

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
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

輸出

VB .NET 將Excel文件讀入陣列:IronXL對比Microsoft Interop比較:圖像1 - IronXL對比Office Excel執行VB .NET讀取Excel文件進行陣列

此程式碼範例演示了IronXL的直觀API。 Range物件提供對Excel試算表中特定單元格區域的存取。 不同於舊版VBA宏,此方法完全型別安全並整合到.NET生態系統中。

現在開始使用IronXL。
green arrow pointer

什麼是傳統的Microsoft Office Interop方法?

Microsoft Office Interop依靠COM自動化連接到Excel應用程式實例。 要在Visual Studio中設置此功能,請導航到專案選單,選擇"新增引用",並在COM選項卡下搜索Microsoft Excel Object Library。 在運行程式碼的每台計算機上必須存在本地Excel安裝。

Imports Microsoft.Office.Interop.Excel

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

        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 Is否t 否thing Then
                System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet)
            End If
            If workbook Is否t 否thing 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 = 否thing
        Dim sheet As Worksheet = 否thing

        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 Is否t 否thing Then
                System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet)
            End If
            If workbook Is否t 否thing 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物件管理很重要?

Interop方法需要仔細注意COM物件生命週期管理。 Excel應用程式返回的每個物件 -- 工作簿、工作表、範圍和單元格 -- 都擁有一個引用計數的COM指標。 不在每個這些物件上呼叫EXCEL.EXE進程在後台靜默執行。

在伺服器上,孤立進程會隨著時間的推移累積,最終耗盡可用的記憶體或文件句柄。 上面的Try...Finally模式是最小的安全方法,但許多企業程式碼庫新增了一個專用的COM清理實用工具來處理巢狀的物件圖。

Interop陣列索引約定也不同於標準VB.NET陣列:基於COM的陣列從索引1開始,而不是0。這意味著任何行或列迴圈都必須考慮差一問題,這是運行時錯誤和資料截斷錯誤的常見來源。

哪種解決方案提供更好的開發人員體驗?

在評估這些方法的生產使用時,有幾個因素使IronXL成為首選解決方案:

部署簡便性: IronXL通過一個NuGet套件安裝,而Interop需要複雜的環境配置。 當您的程式需要在沒有使用者會話的構建伺服器或雲函式中處理XLSX文件時,這尤為重要。

程式碼可維護性: 通過IronXL閱讀資料表保持程式碼簡短且可讀。 行和列計數可作為一級屬性獲得。 使用Interop,您需計算基於1的COM陣列的上限並手動轉換延遲綁定的Object值。

格式靈活性: 除了標準Excel工作簿格式如XLSX,IronXL還原生支持CSV解析,這在測試資料以多種格式到達時非常有用。 該程式庫還可以建立新的工作簿文件並同樣簡單地將值寫回到單元格。 查看IronXL格式指南以獲取完整列表。

錯誤處理: 標準的.NET異常模式適用於IronXL,使得錯誤恢復變得簡單。 基於COM的異常需要額外的處理邏輯,如果處理不當可能會讓Excel實例持續運行。

跨平台支持: IronXL通過.NET 6及更新版本在Linux和macOS上運行。 Interop是Windows專用的,因為它依賴於Win32 COM子系統。

在VB.NET中讀取陣列的性能和維護的權衡
標準 IronXL Microsoft Interop
基本陣列讀取的程式碼行數 ~20 ~40+
需要手動COM清理 是的
無需安裝Excel即可正常運行 是的
在Docker / CI管道中運行 是的
陣列索引約定 0基礎(.NET標準) 1基礎(COM標準)

如何在VB.NET中處理動態Excel範圍?

產品表格很少有固定的行數。 IronXL在每個工作表上提供了UsedRange屬性,它返回所有非空單元格的邊界矩形。 您可以使用這個而不是硬編碼的範圍字串。

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
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

如何在載入後篩選和驗證陣列資料?

填充陣列後,常見的後處理步驟包括:

  • 跳過標題行:從索引1而不是0開始顯示迴圈,以省略列標題。
  • 修剪空白:cell.StringValue以去除從電子表格複製的前導和尾隨空格。
  • 處理空單元格: IronXL為空白單元格返回空字串,因此大多數情況下不需要進行空檢查。
  • 驗證數字範圍:在載入浮點數後,應在儲存前應用範圍檢查以捕獲包含占位符值如-1或9999的單元格。

對於較大的資料集,考慮使用List(Of T)或強型別化的類而不是原始的二維陣列。 將資料載入到型別化物件中使得下游程式碼更易於閱讀和測試。IronXL物件模型參考記錄了所有可用的單元格屬性和工作表方法。

如何將VB.NET陣列匯出回Excel?

IronXL支持將陣列資料寫回工作表,使用與讀取相同的API。 這在您想在記憶體中轉換資料並需要將結果保存為新Excel文件時很有用。

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"},
            {"否rth", "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"},
            {"否rth", "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"},
            {"North", "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)幫補將0基礎的整數坐標轉換為A1標記法字串。 這使得寫迴圈保持簡潔,並避免手動計算單元格地址。 查看IronXL寫入教程以獲取更多模式,包括公式注入和樣式應用。

如何將多個工作表讀入獨立陣列?

一些工作簿將資料儲存在多個工作表中 -- 例如,每月或每個地區一個工作表。 IronXL通過workbook.WorkSheets揭露所有工作表,您可以迭代以將每個工作表載入到其自己的陣列中。

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

了解工作表導航

For Each和索引存取。 使用sheet.Name來以程式方式識別工作表,並基於已知工作表名稱分支邏輯。 IronXL工作表指南詳細介紹了範圍選擇、命名範圍和動態範圍檢測。

對於擁有數十個工作表的工作簿,在載入前按名稱篩選以避免處理不相關的工作表和浪費記憶體。

開發者應該了解Interop陣列格式的哪些內容?

Interop方法按照COM的1基礎索引將單元格資料作為Object(,)陣列返回。 第一行的第一個元素位於values(0, 0)。 這是差一錯誤的頻繁來源。

另一個顧慮是空值處理:Interop對於空白單元格返回否thing。 在空引用上呼叫NullReferenceException。您必須在每個單元格存取周圍新增空值防護:

If values(i, j) Is否t 否thing Then
    line &= values(i, j).ToString() & vbTab
End If
If values(i, j) Is否t 否thing Then
    line &= values(i, j).ToString() & vbTab
End If
If values(i, j) IsNot Nothing Then
    line &= values(i, j).ToString() & vbTab
End If
$vbLabelText   $csharpLabel

IronXL通過對空白單元格返回空字串來消除這個問題,這意味著迴圈程式碼無需任何額外的防護即可運行。

關於Interop使用的Excel物件模型的權威資訊,請參考Microsoft Excel VBA參考MSDN Office interop文件

您的下一步應怎麼做?

將Excel資料讀入陣列是最常見的.NET電子表格任務之一,IronXL使得實現簡單。 走下一步:

  • 下載IronXL:通過NuGet安裝(Install-Package IronXL.Excel)並遵循入門指南
  • 探索格式支持:IronXL讀取和寫入XLSX, XLS, CSV, TSV和JSON。 參見支持的格式頁面以獲取詳細資訊。
  • 嘗試高級功能:排序範圍,應用公式,設置單元格樣式和生成圖表 -- 全部無需安裝Excel。 查看IronXL功能概覽以獲取完整的功能列表。
  • 瀏覽程式碼範例IronXL程式碼範例程式庫提供了數十個常見電子表格任務的可複製程式碼段。
  • 審查授權:用于生產部署,IronXL授權提供開發者、團隊和OEM層次。

VB .NET 將Excel文件讀入陣列:IronXL對比Microsoft Interop比較:圖像2 - IronXL輸出

IronXL和Microsoft Office Interop都可以將Excel資料讀入陣列,但IronXL通過其獨立於Office的架構、更清晰的API和靈活的部署選項提供了卓越的開發人員體驗。 該程式庫移除了常見的痛點,如COM物件管理和系統依賴關係,同時提供對電子表格自動化的高級功能的存取。

通過範例專案、資源和文件在IronXL文件中心探索IronXL的全部功能。 針對企業應用程式,IronXL授權選項提供靈活的條款以適合任何專案範圍。

請注意Microsoft Office Interop是其各自擁有者的註冊商標。 本網站與Microsoft無關,亦未經其認可或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供資訊參考,反映了撰寫時公開可用的資訊。

常見問題

使用VB.NET將Excel檔案讀入陣列的最佳方式是什麼?

使用IronXL或Microsoft Office Interop在VB.NET中有效地將Excel檔案讀入陣列。IronXL提供簡化且高效的方法,消除了安裝Microsoft Excel的需求,並減少了程式碼的複雜性。

IronXL與Microsoft Office Interop在讀取Excel檔案方面的比較如何?

IronXL提供了更精簡且更快速的將Excel檔案讀入陣列的方法,與Microsoft Office Interop相比。不需要在伺服器上安裝Excel,並以更少的負擔處理Excel檔案操作。

我可以在不安裝Microsoft Excel的情況下操作Excel資料嗎?

是的,使用IronXL可以在不需要安裝Microsoft Excel的情況下操作Excel資料。這使得它在需要安裝Excel不切實際的伺服器環境中是很好的選擇。

為何我應考慮在VB.NET中使用IronXL進行Excel操作?

IronXL透過提供直觀的API簡化了Excel操作,可以處理各種Excel檔案格式。它確保了更快的性能和更簡單的部署,特別是在不能安裝Microsoft Excel的環境中。

IronXL適合在VB.NET中處理大型Excel資料集嗎?

是的,IronXL經過性能優化,可以高效地處理大型Excel資料集,提供快速的資料提取和操作。

有哪些可用於在VB.NET中將Excel檔案讀入陣列的程式碼範例?

本指南提供了IronXL和Microsoft Office Interop的工作程式碼範例,展示了如何在VB.NET中有效地將Excel檔案讀入陣列。

IronXL支持不同的Excel檔案格式嗎?

IronXL支持多種Excel檔案格式,包括XLSX、XLS、CSV等,這使它對各種資料處理需求都具備靈活性。

使用IronXL而非Microsoft Office Interop的好處有哪些?

IronXL使用更簡單,不需要安裝Excel,性能更佳。它簡化了程式碼,並減少了與Microsoft Office Interop的COM交互相關的潛在錯誤。

IronXL如何不同於Microsoft Interop地處理二維陣列?

IronXL提供直接的方法將Excel資料轉換為二維陣列,確保比Microsoft Interop所需的更複雜設置更高效且直接的方式。

有哪些推薦的最佳實踐可供在讀取Excel檔案至陣列時使用?

最佳實踐包括選擇適合您環境的工具,例如IronXL因其使用方便和高效性能,以及確保有效的程式碼結構來有效管理記憶體和處理能力。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話