フッターコンテンツにスキップ
他のコンポーネントと比較する

VB .NETで Excel ファイルを配列に読み込む: IronXLと Microsoft Interop

VB .NETで Excel データを配列に読み込むには、ワークブックを読み込み、ワークシートを選択し、行と列を反復処理し、各セルの値を 2 次元配列に格納する必要があります。 IronXLを使えば、Microsoft Officeをインストールすることなく、数行でこれを実現できます。NuGetパッケージをインストールし、Rowsコレクションをループして配列にデータを入力します。

無料トライアルを開始して、 IronXL がVisual Studio プロジェクトでの Excel 自動化をどのように簡素化するかを確認してください。

これらのソリューションを一目で比較するとどうなりますか?

IronXL vs Microsoft Office Interop - VB .NET配列操作の機能比較
特徴 IronXL Microsoft Office Interop
Officeのインストールが必要 なし はい
NuGetインストール はい、1つのパッケージです いいえ -- COM 参照
サーバー/CI環境のサポート はい 制限あり
COMオブジェクトのライフサイクル管理 不要 必須
サポートされている形式 XLSX、XLS、CSV、TSV、JSON XLSX、XLS(Excelのみ)
型安全なAPI はい 部分的 -- 遅延バインディング COM
Linux / macOS サポート はい(.NET 6以上) なし
例外処理スタイル 標準 for .NET例外 COM例外 + 手動クリーンアップ

VB .NETプロジェクトにIronXLをインストールするにはどうすればいいですか?

IronXL を任意 for .NETプロジェクトに追加する最も速い方法は、 NuGetパッケージ マネージャーを使用することです。 Visual StudioでPackage Manager Consoleを開き、実行してください:

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

または、 .NET CLI を使用します。

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

インストール後、VB .NETモジュールの先頭に Imports IronXL を追加します。 Office をインストールする必要はありません。IronXLは独自の解析エンジンを通じて Excel ファイルの読み取りと書き込みをすべて行います。

古いフレームワークを対象とするプロジェクトや特定のバージョンの固定が必要なプロジェクトの場合、 IronXL NuGetページに公開されているすべてのリリースがリストされています。 IronXLドキュメントには、Visual Studio 2019、2022、および.NET CLI のインストール ガイドが記載されています。

開発者はIronXLを使用して Excel データを配列に読み込むことができますか?

IronXL は、ローカルの Office インストールを必要とせずに、ワークブックを開いたり、範囲を選択したり、セル値を反復処理したりするためのクリーンな API を提供します。 WorkBook.Load メソッドはファイル パスを受け入れ、すべてのワークシートを公開する 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
$vbLabelText   $csharpLabel

WorkBook オブジェクトと WorkSheet オブジェクトについて

WorkBook.Load は XLSX、XLS、CSV、および TSV ファイルをサポートします。 ロードされると、workbook.DefaultWorkSheet は最初のシートを返します。 また、workbook.GetWorkSheet("Sheet1") を使用して名前でシートにアクセスしたり、workbook.WorkSheets(0) を使用してインデックスでシートにアクセスすることもできます。

GetRange("A1:D5") 呼び出しは、Rows および Columns コレクションを公開する IronXl.Range を返します。 各 RangeRowCell オブジェクトを反復し、 cell.StringValue は基になるセル タイプに関係なく表示文字列を返します。

型付けされたセルの値をどのように処理しますか?

IronXLセルは、StringValue とともに型指定されたプロパティを公開します。

  • cell.IntValue -- セルを整数として解析します
  • cell.DoubleValue -- セルをdoubleとして解析します
  • cell.DateTimeValue -- 日付形式のセルを解析します
  • cell.IsFormula -- セルに数式が含まれているかどうかを示します

財務データの場合、配列を Double として宣言し、 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
$vbLabelText   $csharpLabel

出力

VB .NETで Excel ファイルを配列に読み込む: IronXLと Microsoft Interop の比較: 画像 1 - VB .NETで Excel ファイルを配列に読み込む場合のIronXLと Office Excel

このコード例は、IronXL の直感的な API を示しています。 WorkBook.Load メソッドは指定されたフォルダーから Excel ファイルを直接開き、Range オブジェクトは Excel スプレッドシート内の特定のセル領域にアクセスできるようにします。 従来の VBA マクロとは異なり、このアプローチは完全に型安全であり、 .NETエコシステムに統合されています。

今IronXLを始めましょう。
green arrow pointer

従来の Microsoft Office 相互運用アプローチとは何ですか?

Microsoft Office Interop は、COM オートメーションを利用して Excel アプリケーション インスタンスに接続します。 Visual Studio でこれを設定するには、[プロジェクト] メニューに移動し、[参照の追加] を選択して、[COM] タブで Microsoft Excel オブジェクト ライブラリを検索します。 コードを実行するすべてのマシンにローカル 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
$vbLabelText   $csharpLabel

COM オブジェクト管理が重要な理由

相互運用アプローチでは、COM オブジェクトのライフサイクル管理に細心の注意を払う必要があります。 Excel アプリケーションによって返されるすべてのオブジェクト (ワークブック、ワークシート、範囲、セル) には、参照カウントされた COM ポインターが保持されます。 これらの各オブジェクトで Marshal.ReleaseComObject を呼び出さない場合、 EXCEL.EXE プロセスがバックグラウンドでサイレントに実行されます。

サーバーでは、孤立したプロセスが時間の経過とともに蓄積され、最終的には使用可能なメモリまたはファイル ハンドルを使い果たしてしまいます。 上記の Try...Finally パターンは最小限の安全なアプローチですが、多くのエンタープライズ コードベースでは、ネストされたオブジェクト グラフを処理するために専用の COM クリーンアップ ユーティリティが追加されています。

Interop 配列のインデックス規則も、標準の VB .NET配列とは異なります。COM ベースの配列は、インデックス 0 ではなく 1 から始まります。つまり、行または列のループでは、off-by-one の差異を考慮する必要があり、これが実行時エラーやデータ切り捨てバグの一般的な原因となります。

どちらのソリューションがより優れた開発者エクスペリエンスを提供しますか?

これらのアプローチを本番環境での使用に評価すると、いくつかの要因によりIronXL が推奨ソリューションとして挙げられます。

展開のシンプルさ: IronXL は単一のNuGetパッケージを介してインストールされますが、Interop では複雑な環境構成が必要です。 これは、ユーザー セッションが存在しないビルド サーバーまたはクラウド関数上でプログラムが XLSX ファイルを処理する必要がある場合に重要になります。

コードの保守性: IronXLを介してデータ テーブルを読み取ると、コードが短く読みやすくなります。 行数と列数はファーストクラスプロパティとして使用できます。 Interop では、1 から始まるインデックスの COM 配列の上限を計算し、遅延バインディングされた Object 値を手動でキャストします。

形式の柔軟性: XLSX などの標準の Excel ワークブック形式に加えて、 IronXL はCSV 解析をネイティブでサポートしており、テスト データが複数の形式で受信される場合に便利です。 ライブラリでは、同様に簡単に新しいワークブック ファイルを作成し、セルに値を書き戻すこともできます。 完全なリストについては、 IronXL形式ガイドを参照してください。

エラー処理: 標準 for .NET例外パターンがIronXLに適用され、エラー回復が簡単になります。 COM ベースの例外には追加の処理ロジックが必要であり、適切に管理されていない場合は Excel インスタンスが実行されたままになる可能性があります。

クロスプラットフォーム サポート: IronXL は、 .NET 6 以降を介して Linux および macOS で実行されます。 Interop は Win32 COM サブシステムに依存するため、Windows のみです。

VB .NETにおける配列読み取りのパフォーマンスとメンテナンスのトレードオフ
基準 IronXL Microsoft Interop
基本的な配列読み取りのコード行 約20 40歳以上
手動のCOMクリーンアップが必要 なし はい
Excelをインストールしなくても動作します はい なし
Docker / CI パイプラインで実行 はい なし
配列のインデックス規則 0 ベース (.NET Standard) 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
$vbLabelText   $csharpLabel

配列データをロードした後にフィルタリングおよび検証するにはどうすればよいですか?

配列にデータを入力した後、一般的な後処理手順は次のとおりです。

-ヘッダー行をスキップ: 列ヘッダーを省略するには、表示ループを 0 ではなくインデックス 1 から開始します。 -空白をトリム: スプレッドシートからコピーされた先頭と末尾のスペースを削除するには、cell.StringValue.Trim() を呼び出します。

  • null セルの処理: IronXL は空白セルに対して空の文字列を返すため、ほとんどの場合 null チェックは不要です。 -数値範囲を検証する: double を読み込んだ後、保存する前に範囲チェックを適用して、-1 や 9999 などのプレースホルダー値を含むセルを検出します。

より大きなデータセットの場合は、生の 2 次元配列の代わりに、List(Of T) または厳密に型指定されたクラスの使用を検討してください。 型付きオブジェクトにデータを読み込むことで、下流のコードの可読性とテスト性が向上します。IronXL 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
$vbLabelText   $csharpLabel

ExcelAddress.ToAddress(row, column) ヘルパーは、ゼロベースの整数座標を A1 表記の文字列に変換します。 これにより、書き込みループがクリーンな状態に保たれ、セル アドレスを手動で計算する必要がなくなります。 数式の挿入やスタイルの適用などのその他のパタ​​ーンについては、 IronXL作成チュートリアルを参照してください。

複数のワークシートを別々の配列に読み込むにはどうすればよいでしょうか?

一部のワークブックでは、月ごとに 1 つのシート、または地域ごとに 1 つのシートなど、複数のシートにわたってデータが保存されます。 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
$vbLabelText   $csharpLabel

シートナビゲーションの理解

workbook.WorkSheets コレクションはゼロ インデックスで、For Each とインデックス アクセスの両方をサポートします。 プログラムでシートを識別し、既知のシート名に基づいてロジックを分岐するには、sheet.Name を使用します。 IronXLワークシート ガイドでは、範囲の選択、名前付き範囲、動的範囲の検出について詳しく説明します。

数十枚のシートを含むワークブックの場合は、無関係なシートを処理してメモリを無駄にしないように、読み込む前に名前でフィルター処理します。

開発者は相互運用配列形式について何を知っておくべきでしょうか?

Interop アプローチでは、COM の 1 から始まるインデックスを使用して、セル データを Object(,) 配列として返します。 最初の行の最初の要素は、values(0, 0) ではなく、values(1, 1) にあります。 これは、off-by-one エラーの頻繁な原因です。

追加の懸念事項は null 処理です。Interop は空のセルに なしthing を返します。 null参照に対してNullReferenceExceptionがスローされます。すべてのセルアクセスの前後にnullガードを追加する必要があります。

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

IronXL は、空白のセルに空の文字列を返すことでこの問題を解消します。つまり、ループ コードは追加のガードなしで動作します。

Interop で使用される Excel オブジェクト モデルに関する正式な情報については、 Microsoft Excel VBA リファレンスおよびMSDN Office 相互運用性ドキュメントを参照してください。

次のステップは何ですか?

Excel データを配列に読み込むことは、最も一般的な.NETスプレッドシート タスクの 1 つであり、 IronXL を使用すると実装が簡単になります。 次のステップに進むには:

  • IronXLをダウンロードします。NuGet ( @@ --CODE-348--@@) 経由でインストールし、スタート ガイドに従います。 -形式のサポートを調べる: 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ライセンス オプションは、あらゆるプロジェクト範囲に適合する柔軟な条件を提供します。

よくある質問

VB .NETを使用して Excel ファイルを配列に読み込む最適な方法は何ですか?

VB .NETでExcelファイルを配列に読み込むには、 IronXLまたはMicrosoft Office Interopを使用すると効果的です。IronXLはシンプルで効率的なアプローチを提供し、Microsoft Excelのインストールを必要とせず、コードの複雑さを軽減します。

Excel ファイルの読み取りに関して、 IronXLと Microsoft Office Interop を比較するとどうなりますか?

IronXLは、Microsoft Office Interopと比較して、Excelファイルを配列に読み込むためのより効率的で高速な方法を提供します。サーバーにExcelをインストールする必要がなく、オーバーヘッドを抑えながらExcelファイルの操作を行えます。

Microsoft Excel をインストールせずに Excel データを操作できますか?

はい、 IronXLを使用すると、Microsoft ExcelをインストールしなくてもExcelデータを操作できます。そのため、Excelのインストールが難しいサーバー環境に最適です。

VB .NETでの Excel 操作にIronXL の使用を検討する必要があるのはなぜですか?

IronXLは、様々なExcelファイル形式を扱う直感的なAPIを提供することで、Excel操作を簡素化します。特にMicrosoft Excelをインストールできない環境において、パフォーマンスの向上と導入の容易化を実現します。

IronXL は、VB .NETで大規模な Excel データ セットを処理するのに適していますか?

はい、 IronXLはパフォーマンスが最適化されており、大規模な Excel データ セットを効率的に処理して、迅速なデータ抽出と操作を実現します。

VB .NETを使用して Excel ファイルを配列に読み込むためのコード例は何ですか?

このガイドでは、 IronXLと Microsoft Office Interop の両方の実用的なコード例を提供し、VB .NETで Excel ファイルを配列に効率的に読み込む方法を示します。

IronXLは異なるExcelファイル形式をサポートしていますか?

IronXL は、XLSX、XLS、CSV など、幅広い Excel ファイル形式をサポートしており、さまざまなデータ処理ニーズに柔軟に対応できます。

Microsoft Office Interop ではなくIronXLを使用する利点は何ですか?

IronXLは使いやすく、Excelのインストールが不要で、パフォーマンスも向上します。コードを簡素化し、Microsoft Office InteropにおけるCOMの相互作用に関連する潜在的なエラーを削減します。

IronXL は、Microsoft Interop とはどのように異なる方法で 2 次元配列を処理しますか?

IronXL は、Excel データを 2 次元配列に変換する直接的な方法を提供し、Microsoft Interop で必要なより複雑なセットアップに比べて、より効率的で簡単なアプローチを保証します。

Excel ファイルを配列に読み込む場合、どのようなベスト プラクティスが推奨されますか?

ベスト プラクティスには、使いやすさとパフォーマンスに優れたIronXLなどの環境に適したツールを選択することや、メモリと処理能力を効果的に管理するための効率的なコード構造を確保することが含まれます。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me