フッターコンテンツにスキップ
IRONXLの使用

VB.NETでDataGridViewをExcelにエクスポートする方法

Windows Forms の DataGridView から Excel へのデータエクスポートは、ビジネスアプリケーションでよくある要件です。 報告書の作成、データのバックアップ、または利害関係者との情報共有など、開発者は GridView データコンテンツを Excel 形式にエクスポートする信頼性のある方法を必要としています。 Microsoft Office Interop を使用する従来のアプローチはこの目的に役立っていますが、デプロイの複雑さと依存関係の要件があるため、アプリケーションの配布が複雑になります。

このチュートリアルは、IronXL を使用して DataGridView データを Excel にエクスポートする実用的な VB.NET の例を示し、Microsoft Office のインストールが不要な強力な .NET ライブラリです。 クラウドプラットフォームやコンテナを含むさまざまな環境で機能するクリーンで効率的なエクスポートソリューションをどのように実装するかを探ります。これにより、現代の.NET Excel 操作シナリオに理想的です。

VB.NET で DataGridView を Excel にエクスポートする方法: 図 1 - IronXL

DataGridView から Excel へのエクスポートが不可欠な理由

DataGridView コントロールは Windows Forms アプリケーションにとって基本的であり、ユーザーが日常的に対話する表形式のデータを表示します。 このデータを Excel にエクスポートすることで、ユーザーは Excel の強力な分析ツールを活用したり、プレゼンテーションを作成したり、アプリケーションにアクセスできない同僚とデータを共有できます。 この VB.NET の Excel エクスポート機能はビジネス報告にとって重要です。

Microsoft.Office.Interop.Excel を使用する従来のエクスポート方法では、アプリケーションを実行するすべてのマシンに Excel をインストールする必要があります。 これにより、特にサーバー環境や Office ライセンスがないユーザーへのアプリケーション配布時に、デプロイメントの課題が生じます。 さらに、Interop のアプローチは、注意深く対処しない場合、メモリリークや COM オブジェクトのクリーンアップの問題に苦しむことがあります。

モダンな .NET アプリケーションには、より柔軟なソリューションが求められています。 IronXL は、Microsoft Office に依存しないスタンドアロンライブラリを提供し、これらの課題に対処します。 このアプローチは、開発、テスト、および本番環境全体で一貫した機能性を保証し、Office がインストールできないコンテナおよびクラウドプラットフォームへのデプロイをサポートします。 生産使用のためには有効なライセンスキーが必要であり、すべての機能を解放します。

VB.NET で DataGridView を Excel にエクスポートする方法: 図 2 - クロスプラットフォーム

IronXL を使用して GridView を Excel にエクスポートする VB .NET の例

VB.NET プロジェクトに IronXL をセットアップすることから始めましょう。 Visual Studio でパッケージ マネージャー コンソールを開き、このコマンドで IronXL をインストールします。

Install-Package IronXL.Excel

VB.NET で DataGridView を Excel にエクスポートする方法: 図 3 - インストール

詳細なインストールオプションについては、IronXL インストールガイドをご覧ください。 インストール後、VB .NET プロジェクトファイルに Imports IronXL を追加して、ライブラリの Excel エクスポート機能にアクセスします。

最初に、Windows Forms アプリケーションのサンプルを作成し、インポートデータで DataGridView を構成します。 フォームのセットアップとエクスポート機能の実装方法を示す完全なコードはこちらです。

Imports IronXL
Imports System.Windows.Forms
Imports System.Data
Public Class Form1
    ' Type GridView
    Private dataGridView1 As DataGridView
    Private btnExport As Button
    Public Sub New()
        InitializeComponent()
        SetupControls()
        LoadSampleData()
    End Sub
    Private Sub SetupControls()
        ' Initialize DataGridView
        dataGridView1 = New DataGridView()
        dataGridView1.Location = New Point(10, 10)
        dataGridView1.Size = New Size(450, 200)
        ' Initialize Export Button
        btnExport = New Button()
        btnExport.Text = "Export to Excel"
        btnExport.Location = New Point(10, 220)
        btnExport.Size = New Size(120, 30)
        AddHandler btnExport.Click, AddressOf ExportToExcel
        ' Add controls to form
        Me.Controls.Add(dataGridView1)
        Me.Controls.Add(btnExport)
        Me.Text = "DataGridView to Excel Export"
        Me.Size = New Size(500, 300)
    End Sub
    Private Sub LoadSampleData()
        ' Create sample DataTable
        Dim dt As New DataTable()
        dt.Columns.Add("Product ID", GetType(Integer))
        dt.Columns.Add("Product Name", GetType(String))
        dt.Columns.Add("Category", GetType(String))
        dt.Columns.Add("Price", GetType(Decimal))
        dt.Columns.Add("Stock", GetType(Integer))
        ' Add sample rows
        dt.Rows.Add(1001, "Laptop Pro", "Electronics", 1299.99, 15)
        dt.Rows.Add(1002, "Wireless Mouse", "Accessories", 29.99, 50)
        dt.Rows.Add(1003, "USB-C Cable", "Accessories", 19.99, 100)
        dt.Rows.Add(1004, "Monitor 27""", "Electronics", 399.99, 8)
        dt.Rows.Add(1005, "Keyboard Mechanical", "Accessories", 89.99, 25)
        ' Bind to DataGridView
        dataGridView1.DataSource = dt
    End Sub
    Private Sub ExportToExcel(ByVal sender As Object, ByVal e As EventArgs)
        Try
            ' Create new Excel workbook
            Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
            Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
            ' Export column headers
            For colIndex As Integer = 0 To dataGridView1.Columns.Count - 1
                worksheet.SetCellValue(0, colIndex, dataGridView1.Columns(colIndex).HeaderText)
            Next
            ' Export data rows
            For rowIndex As Integer = 0 To dataGridView1.Rows.Count - 1
                If Not dataGridView1.Rows(rowIndex).IsNewRow Then
                    For colIndex As Integer = 0 To dataGridView1.Columns.Count - 1
                        Dim cellValue = dataGridView1.Rows(rowIndex).Cells(colIndex).Value
                        If TypeOf cellValue Is Decimal OrElse TypeOf cellValue Is Double OrElse TypeOf cellValue Is Integer Then
    worksheet.SetCellValue(rowIndex + 1, colIndex, cellValue)
Else
    worksheet.SetCellValue(rowIndex + 1, colIndex, cellValue.ToString())
End If
                    Next
                End If
            Next
            ' Save the Excel file
            Dim saveDialog As New SaveFileDialog()
            saveDialog.Filter = "Excel Files|*.xlsx"
            saveDialog.Title = "Save Excel File"
            saveDialog.FileName = "DataGridViewExport.xlsx"
            If saveDialog.ShowDialog() = DialogResult.OK Then
                workbook.SaveAs(saveDialog.FileName)
                MessageBox.Show("Export completed successfully!", "Success", 
                              MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Catch ex As Exception
            MessageBox.Show("Export failed: " & ex.Message, "Error", 
                          MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub
End Class
Imports IronXL
Imports System.Windows.Forms
Imports System.Data
Public Class Form1
    ' Type GridView
    Private dataGridView1 As DataGridView
    Private btnExport As Button
    Public Sub New()
        InitializeComponent()
        SetupControls()
        LoadSampleData()
    End Sub
    Private Sub SetupControls()
        ' Initialize DataGridView
        dataGridView1 = New DataGridView()
        dataGridView1.Location = New Point(10, 10)
        dataGridView1.Size = New Size(450, 200)
        ' Initialize Export Button
        btnExport = New Button()
        btnExport.Text = "Export to Excel"
        btnExport.Location = New Point(10, 220)
        btnExport.Size = New Size(120, 30)
        AddHandler btnExport.Click, AddressOf ExportToExcel
        ' Add controls to form
        Me.Controls.Add(dataGridView1)
        Me.Controls.Add(btnExport)
        Me.Text = "DataGridView to Excel Export"
        Me.Size = New Size(500, 300)
    End Sub
    Private Sub LoadSampleData()
        ' Create sample DataTable
        Dim dt As New DataTable()
        dt.Columns.Add("Product ID", GetType(Integer))
        dt.Columns.Add("Product Name", GetType(String))
        dt.Columns.Add("Category", GetType(String))
        dt.Columns.Add("Price", GetType(Decimal))
        dt.Columns.Add("Stock", GetType(Integer))
        ' Add sample rows
        dt.Rows.Add(1001, "Laptop Pro", "Electronics", 1299.99, 15)
        dt.Rows.Add(1002, "Wireless Mouse", "Accessories", 29.99, 50)
        dt.Rows.Add(1003, "USB-C Cable", "Accessories", 19.99, 100)
        dt.Rows.Add(1004, "Monitor 27""", "Electronics", 399.99, 8)
        dt.Rows.Add(1005, "Keyboard Mechanical", "Accessories", 89.99, 25)
        ' Bind to DataGridView
        dataGridView1.DataSource = dt
    End Sub
    Private Sub ExportToExcel(ByVal sender As Object, ByVal e As EventArgs)
        Try
            ' Create new Excel workbook
            Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
            Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
            ' Export column headers
            For colIndex As Integer = 0 To dataGridView1.Columns.Count - 1
                worksheet.SetCellValue(0, colIndex, dataGridView1.Columns(colIndex).HeaderText)
            Next
            ' Export data rows
            For rowIndex As Integer = 0 To dataGridView1.Rows.Count - 1
                If Not dataGridView1.Rows(rowIndex).IsNewRow Then
                    For colIndex As Integer = 0 To dataGridView1.Columns.Count - 1
                        Dim cellValue = dataGridView1.Rows(rowIndex).Cells(colIndex).Value
                        If TypeOf cellValue Is Decimal OrElse TypeOf cellValue Is Double OrElse TypeOf cellValue Is Integer Then
    worksheet.SetCellValue(rowIndex + 1, colIndex, cellValue)
Else
    worksheet.SetCellValue(rowIndex + 1, colIndex, cellValue.ToString())
End If
                    Next
                End If
            Next
            ' Save the Excel file
            Dim saveDialog As New SaveFileDialog()
            saveDialog.Filter = "Excel Files|*.xlsx"
            saveDialog.Title = "Save Excel File"
            saveDialog.FileName = "DataGridViewExport.xlsx"
            If saveDialog.ShowDialog() = DialogResult.OK Then
                workbook.SaveAs(saveDialog.FileName)
                MessageBox.Show("Export completed successfully!", "Success", 
                              MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Catch ex As Exception
            MessageBox.Show("Export failed: " & ex.Message, "Error", 
                          MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub
End Class
VB .NET

このコードは、コアエクスポート機能を示しています。 SetupControls メソッドは、DataGridView とエクスポート ボタンを作成し、フォーム上に配置します。 LoadSampleData メソッドは DataTable を使用してサンプル製品データでグリッドを埋め、これは VB.NET アプリケーションの DataGridView コントロールの共通データソースとして役立ちます。

ExportToExcel メソッドは実際のエクスポートプロセスを処理します。 XLSX 形式を使用して新しい IronXL WorkBook を作成し、その後 DataGridView を反復処理して、ヘッダーとデータの両方を Excel シートにエクスポートします。 SetCellValue メソッドは、行と列のインデックスを使用して Excel セルに効率的に値を配置します。 このコードは IsNewRow プロパティを使用して編集可能な DataGridViews のボトムに表示される空の行をスキップします。 このアプローチは、予期しない空行のないクリーンな Excel 出力を保証します。

この機能を Web ベース ASP.NET アプリケーションで実装している場合、ファイルをダウンロード可能な応答として返すことでさらに拡張することになります。 その場合、Content-Disposition HTTP ヘッダーを使用して、Excel ファイルをブラウザ内でインラインで表示するか、ダウンロードアタッチメントとして強制されるかを指定します。 ページライフサイクルのレンダリングの完了後、ファイルがクライアントに送信されます。 同様に、ASP.NET WebForms 開発者は、コントロールをエクスポートする際に、public override void VerifyRenderingInServerForm メソッドをオーバーライドして、コントロールが正常にレンダリングされるようにする必要があります。

出力

VB.NET で DataGridView を Excel にエクスポートする方法: 図 4 - DataGridView 出力

VB.NET で DataGridView を Excel にエクスポートする方法: 図 5 - Excel 出力

この機能を Web ベースの ASP.NET アプリケーションで実装している場合、ファイルをダウンロード可能な応答として返すことでさらに拡張することができます。 その場合、Content-Disposition HTTP ヘッダーを使用して、Excel ファイルをブラウザ内でインラインで表示するか、ダウンロードアタッチメントとして強制されるかを指定します。 同様に、ASP.NET WebForms 開発者は、Excel のような GridView にコントロールをエクスポートする際に、ページ ライフサイクルの外でコントロールが正常にレンダリングされるように public override void VerifyRenderingInServerForm メソッドをオーバーライドする必要がある場合があります。

Excel エクスポートをフォーマットで拡張するには?

プロフェッショナルな Excel エクスポートには、読みやすさを向上させるためのフォーマットが必要なことがよくあります。 IronXL は、エクスポート プロセス中に適用できる広範なスタイリング機能を提供します。 フォーマットを含む拡張版はこちらです。

' Object sender
Private Sub ExportToExcelWithFormatting(sender As Object, e As EventArgs)
    Try
        Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
        ' Default Excel Worksheet
        Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
        ' Set column headers with formatting
        For colIndex As Integer = 0 To dataGridView1.Columns.Count - 1
            Dim headerCell = worksheet.GetCellAt(0, colIndex)
            headerCell.Value = dataGridView1.Columns(colIndex).HeaderText
            ' Apply header formatting
            headerCell.Style.Font.Bold = True
            headerCell.Style.BackgroundColor = "#4472C4"
            headerCell.Style.Font.Color = "#FFFFFF"
            headerCell.Style.HorizontalAlignment = HorizontalAlignment.Center
        Next
        ' Export data with alternating row colors
        For rowIndex As Integer = 0 To dataGridView1.Rows.Count - 1
            If Not dataGridView1.Rows(rowIndex).IsNewRow Then
                For colIndex As Integer = 0 To dataGridView1.Columns.Count - 1
                    Dim cellValue = dataGridView1.Rows(rowIndex).Cells(colIndex).Value
                    Dim excelCell = worksheet.GetCellAt(rowIndex + 1, colIndex)
                    If cellValue IsNot Nothing Then
                        excelCell.Value = cellValue.ToString()
                    End If
                    ' Apply alternating row colors
                    If rowIndex Mod 2 = 0 Then
                        excelCell.Style.BackgroundColor = "#F2F2F2"
                    End If
                Next
            End If
        Next
        ' Auto-fit columns
        For colIndex As Integer = 0 To dataGridView1.Columns.Count - 1
            worksheet.AutoSizeColumn(colIndex)
        Next
        ' Save formatted Excel file
        Dim saveDialog As New SaveFileDialog()
        saveDialog.Filter = "Excel Files|*.xlsx"
        If saveDialog.ShowDialog() = DialogResult.OK Then
            workbook.SaveAs(saveDialog.FileName)
            MessageBox.Show("Formatted export completed!", "Success")
        End If
    Catch ex As Exception
        MessageBox.Show("Export failed: " & ex.Message, "Error")
    End Try
End Sub
' Object sender
Private Sub ExportToExcelWithFormatting(sender As Object, e As EventArgs)
    Try
        Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
        ' Default Excel Worksheet
        Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
        ' Set column headers with formatting
        For colIndex As Integer = 0 To dataGridView1.Columns.Count - 1
            Dim headerCell = worksheet.GetCellAt(0, colIndex)
            headerCell.Value = dataGridView1.Columns(colIndex).HeaderText
            ' Apply header formatting
            headerCell.Style.Font.Bold = True
            headerCell.Style.BackgroundColor = "#4472C4"
            headerCell.Style.Font.Color = "#FFFFFF"
            headerCell.Style.HorizontalAlignment = HorizontalAlignment.Center
        Next
        ' Export data with alternating row colors
        For rowIndex As Integer = 0 To dataGridView1.Rows.Count - 1
            If Not dataGridView1.Rows(rowIndex).IsNewRow Then
                For colIndex As Integer = 0 To dataGridView1.Columns.Count - 1
                    Dim cellValue = dataGridView1.Rows(rowIndex).Cells(colIndex).Value
                    Dim excelCell = worksheet.GetCellAt(rowIndex + 1, colIndex)
                    If cellValue IsNot Nothing Then
                        excelCell.Value = cellValue.ToString()
                    End If
                    ' Apply alternating row colors
                    If rowIndex Mod 2 = 0 Then
                        excelCell.Style.BackgroundColor = "#F2F2F2"
                    End If
                Next
            End If
        Next
        ' Auto-fit columns
        For colIndex As Integer = 0 To dataGridView1.Columns.Count - 1
            worksheet.AutoSizeColumn(colIndex)
        Next
        ' Save formatted Excel file
        Dim saveDialog As New SaveFileDialog()
        saveDialog.Filter = "Excel Files|*.xlsx"
        If saveDialog.ShowDialog() = DialogResult.OK Then
            workbook.SaveAs(saveDialog.FileName)
            MessageBox.Show("Formatted export completed!", "Success")
        End If
    Catch ex As Exception
        MessageBox.Show("Export failed: " & ex.Message, "Error")
    End Try
End Sub
VB .NET

この拡張版はエクスポートされた Excel ファイルにプロフェッショナルなフォーマットを適用します。ヘッダーには、青い背景に白いフォント色の太字のテキストが適用され、明確な視覚的な区別が生まれます。 このコードは単純な剰余演算を使用して交互の行の色を実装し、大規模データセットの読みやすさを向上させます。

AutoSizeColumn メソッドはコンテンツに合わせて列の幅を調整し、エクスポート後の手動調整の必要をなくします。 これらのフォーマットオプションは基本的なデータエクスポートを即座に共有できるプレゼンテーション対応ドキュメントに変えます。

IronXL が提供する追加のエクスポート オプションは?

IronXL は基本の Excel エクスポートを超えて、機能性と柔軟性を高める機能を提供します。 以下は組み込むことができるいくつかの強力な機能です。

' Add formulas to calculate totals
worksheet.SetCellValue(dataGridView1.Rows.Count + 2, 3, "=SUM(D2:D" & (dataGridView1.Rows.Count + 1) & ")")
' Create multiple worksheets for categorized data
Dim summarySheet As WorkSheet = workbook.CreateWorkSheet("Summary")
summarySheet.SetCellValue(0, 0, "Total Products")
summarySheet.SetCellValue(0, 1, dataGridView1.Rows.Count - 1)
' Export to different formats
workbook.SaveAsCsv("export.csv")     ' CSV format
workbook.SaveAsJson("export.json")   ' JSON format
workbook.SaveAsXml("export.xml")     ' XML format
' Add formulas to calculate totals
worksheet.SetCellValue(dataGridView1.Rows.Count + 2, 3, "=SUM(D2:D" & (dataGridView1.Rows.Count + 1) & ")")
' Create multiple worksheets for categorized data
Dim summarySheet As WorkSheet = workbook.CreateWorkSheet("Summary")
summarySheet.SetCellValue(0, 0, "Total Products")
summarySheet.SetCellValue(0, 1, dataGridView1.Rows.Count - 1)
' Export to different formats
workbook.SaveAsCsv("export.csv")     ' CSV format
workbook.SaveAsJson("export.json")   ' JSON format
workbook.SaveAsXml("export.xml")     ' XML format
VB .NET

IronXL は Excel の数式をサポートしており、エクスポートされたファイルに計算を直接追加できます。例では、列の合計を計算するために SUM 関数を追加する方法を示しています。 複数のワークシートの作成は、詳細なデータと要約情報を分離するなど、複雑なエクスポートを整理するのに役立ちます。

ライブラリのフォーマットの柔軟性は特に価値があります。 XLSX は Excel ファイルの標準ですが、CSV エクスポートはデータベース システムや古いアプリケーションとの普遍的な互換性を提供します。 JSON および XML フォーマットにより、Web サービスおよび API とのデータ交換が容易になり、IronXL はさまざまな統合シナリオに適しています。 ドキュメントでは形式間の変換についてさらに学べます。

出力

VB.NET で DataGridView を Excel にエクスポートする方法: 図 6 - フォーミュラ 出力

VB.NET で DataGridView を Excel にエクスポートする方法: 図 7 - 複数ワークシート 出力

VB.NET で DataGridView を Excel にエクスポートする方法: 図 8 - CSV 出力

VB.NET で DataGridView を Excel にエクスポートする方法: 図 9 - JSON 出力

VB.NET で DataGridView を Excel にエクスポートする方法: 図 10 - XML 出力

IronXL は開発プロセスをどのように簡素化しますか?

IronXL の最大の利点は、Microsoft Office の依存関係を排除することです。 あなたのアプリケーションは、開発者の作業ステーション、顧客のマシン、または Docker コンテナのいずれにデプロイされても一貫して動作します。 この独立性はデプロイを簡素化し、Office のバージョンやインストールに関連するサポート問題を削減します。

ライブラリの API 設計はシンプルさを優先しています。 注意深いオブジェクトの廃棄が必要な Interop の COM ベースのアプローチとは異なり、IronXL は VB.NET 開発者が自然に感じる標準の .NET パターンを使用しています。 クロスプラットフォームのサポートにより、Windows Forms アプリケーションのエクスポート機能を Linux サーバー上で実行される ASP.NET Core アプリケーションで再利用できます。 包括的なドキュメントと例については、IronXL API リファレンスを参照してください。

VB.NET で DataGridView を Excel にエクスポートする方法: 図 11 - 機能

結論

IronXL を使用すると、DataGridView データを Excel にエクスポートすることが容易になります。 ライブラリは、従来の Interop の複雑さを排除し、プロフェッショナルなフォーマット機能と複数のエクスポート形式を提供します。 VB.NET の Excel エクスポート機能を変革する準備はできましたか? 最新の無料トライアルで、あなたのデプロイのニーズに合わせた試みを始めましょう。

VB.NET で DataGridView を Excel にエクスポートする方法: 図 12 - ライセンス

よくある質問

DataGridViewをExcelにエクスポートするためにIronXLを使用する利点は何ですか?

IronXLはMicrosoft Office Interopを必要とせず、デプロイメントの複雑さを軽減し、依存関係を取り除くことにより、DataGridViewの内容をExcelにエクスポートするプロセスを簡素化します。

IronXLはアプリケーション配布をどのように改善しますか?

IronXLは、Microsoft Office Interopを必要としないため、しばしば追加の依存関係を伴い、デプロイメントを複雑にするアプリケーション配布の複雑さを軽減します。

IronXL は VB.NET で DataGridView データをエクスポートできますか?

はい、IronXLはVB.NETでDataGridViewデータをExcelにエクスポートする実用的なソリューションを提供し、ビジネスアプリケーションでのデータ管理を容易にします。

DataGridViewをExcelにエクスポートするための一般的な使用例は何ですか?

レポートの生成、データのバックアップ作成、ビジネスコンテキストでのステークホルダーとの情報共有が一般的な使用例です。

IronXLはシステムにMicrosoft Excelのインストールが必要ですか?

いいえ、IronXLはExcelとは独立して動作するため、Microsoft Excelのインストールを必要とせず、デプロイメントプロセスを簡素化します。

Curtis Chau
テクニカルライター

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

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