跳過到頁腳內容
使用 IRONXL

如何在 VB.NET 中將 DataGridView 導出到 Excel

將 Windows Forms DataGridView 中的資料匯出到 Excel 是商業應用程式中的常見需求。 無論是產生報表、建立資料備份,或是與利害關係人分享訊息,開發人員都需要一種可靠的方法將 GridView 資料內容匯出為 Excel 格式。 雖然使用 Microsoft Office Interop 的傳統方法已經達到了這個目的,但它們存在部署複雜性和依賴項要求,這可能會使應用程式分發變得複雜。

本教學示範了一個實用的 VB.NET 範例,示範如何使用IronXL (一個功能強大的 .NET 程式庫,無需安裝 Microsoft Office)將 DataGridView 資料匯出到 Excel。 我們將探討如何實現一個簡潔高效的導出解決方案,該方案可在不同的環境中運行,包括雲端平台和容器,使其成為現代.NET Excel 操作場景的理想選擇。

如何在 VB.NET 中將 DataGridView 匯出到 Excel:圖 1 - IronXL

為什麼將 DataGridView 匯出到 Excel 至關重要?

DataGridView控制項是Windows窗體應用程式的基礎,用於顯示使用者日常互動的表格資料。 將此資料匯出到 Excel 後,使用者可以利用 Excel 強大的分析工具、建立簡報,並與可能無法存取該應用程式的同事共用資料。 VB.NET 的 Excel 匯出功能對於業務報告至關重要。

使用 Microsoft.Office.Interop.Excel 的傳統匯出方法需要在執行該應用程式的每台電腦上安裝 Excel。 這會帶來部署方面的挑戰,尤其是在伺服器環境中或向沒有 Office 授權的使用者分發應用程式時。 此外,如果處理不當,互通方法可能會出現記憶體洩漏和 COM 物件清理問題。

現代 .NET 應用程式需要更靈活的解決方案。 IronXL 透過提供一個獨立的程式庫來應對這些挑戰,該程式庫可以產生不依賴任何 Microsoft Office 的 Excel 檔案。 這種方法確保了開發、測試和生產環境的功能一致性,同時支援部署到容器和雲端平台,尤其是在無法安裝 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 安裝指南。 安裝完成後,將 Imports IronXL 新增至您的 VB .NET 專案檔案中,即可存取該程式庫的 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 向網格填充範例產品數據,DataTable 是 VB.NET 應用程式中 DataGridView 控制項的通用資料來源。

ExportToExcel 方法處理實際的匯出過程。 它使用 XLSX 格式建立一個新的 IronXL 工作簿,然後遍歷 DataGridView 將標題和資料匯出到 Excel 工作表中。 SetCellValue 方法使用行索引和列索引將值有效率地放入 Excel 儲存格中。 程式碼使用 IsNewRow 屬性跳過可編輯 DataGridView 底部出現的空白行。 這種方法可以確保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 開發人員在將 GridView 等控制項匯出到 Excel 時,可能需要重寫公開的 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最大的優點在於無需依賴微軟Office。 無論部署在開發人員工作站、客戶機器或 Docker 容器中,您的應用程式都能穩定運作。 這種獨立性簡化了部署,並減少了與 Office 版本和安裝相關的支援問題。

該程式庫的 API 設計以簡潔性為優先原則。 與 Interop 基於 COM 的方法需要仔細處理物件不同,IronXL 使用標準的 .NET 模式,這對 VB.NET 開發人員來說感覺很自然。 跨平台支援意味著您的 Windows Forms 應用程式的匯出功能可以在運行於 Linux 伺服器上的 ASP.NET Core 應用程式中重複使用。 有關完整文件和範例,請造訪IronXL API 參考

如何在 VB.NET 中將 DataGridView 匯出到 Excel:圖 11 - 功能

結論

使用 IronXL,將 DataGridView 資料匯出到 Excel 變得非常簡單。 該程式庫消除了傳統的互通複雜性,同時提供了專業的格式化功能和多種匯出格式。 準備好提升您的 VB.NET Excel 匯出功能了嗎? 首先選擇適合您部署需求的免費試用版

如何在 VB.NET 中將 DataGridView 匯出到 Excel:圖 12 - 許可

常見問題解答

使用 IronXL 將 DataGridView 匯出至 Excel 有什麼好處?

IronXL.Excel 藉由省去 Microsoft Office Interop、降低部署複雜度以及移除依賴性需求,簡化匯出 DataGridView 內容至 Excel 的流程。

IronXL 如何改善應用程式的發行?

IronXL 不需要 Microsoft Office Interop,可減少應用程式發行的複雜性,因為 Microsoft Office Interop 通常會帶來額外的依賴性,使部署變得複雜。

IronXL 可以在 VB.NET 中匯出 DataGridView 資料嗎?

是的,IronXL 提供了一個實用的解決方案,可在 VB.NET 中將 DataGridView 資料匯出至 Excel,讓商業應用程式中的資料管理變得更容易。

將 DataGridView 匯出至 Excel 的常見使用案例有哪些?

常見的使用案例包括產生報告、建立資料備份,以及在商業環境中與利害關係人分享資訊。

IronXL 是否需要在系統上安裝 Microsoft Excel?

不,IronXL.Excel 不需要安裝 Microsoft Excel,因為它獨立於 Excel 運作,簡化了部署流程。

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担产品测测试,产品开发和研究的责任时,Jordi 为持续的产品改进增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。