如何在 VB.NET 中將 DataGridView 匯出到 Excel 檔案:使用 IronXL 的實用範例
使用 IronXL 庫在 VB.NET 中將DataGridView資料匯出到 Excel,該程式庫消除了對 Microsoft Office 的依賴,並提供了容器友好的部署。 只需建立一個WorkBook ,遍歷DataGridView單元格,然後儲存為 XLSX 格式即可。
將 Windows Forms DataGridView中的資料匯出到 Excel 是商業應用程式中的常見需求。 無論是產生報表、建立資料備份,或是與利害關係人分享訊息,開發人員都需要一種可靠的方法將GridView資料匯出為 Excel 格式。 雖然使用 Microsoft Office Interop 的傳統方法已經達到了這個目的,但它們存在部署複雜性和依賴項要求,這可能會使應用程式分發變得複雜。
本教學示範了一個實用的 VB.NET 範例,示範如何使用IronXL (一個功能強大的 .NET 函式庫,無需安裝 Microsoft Office)將DataGridView資料匯出到 Excel。 我們將探討如何實現一個簡潔高效的導出解決方案,該方案可在不同的環境中運行,包括雲端平台和容器,使其成為現代.NET Excel 操作場景的理想選擇。 無論您是部署到 Azure還是在Docker 容器中執行應用程序,IronXL 都能提供DevOps團隊所需的部署彈性。
IronXL 主頁展示了無需 Microsoft Office 或 Excel Interop 即可讀取 Excel 檔案的 C# 程式碼範例,並具有語法高亮顯示和 NuGet 下載統計資料。
為什麼將DataGridView匯出到 Excel 至關重要?
DataGridView控制項是Windows窗體應用程式的基礎,用於顯示使用者日常互動的表格資料。 將此資料匯出到 Excel 後,使用者可以利用 Excel 強大的分析工具、建立簡報,並與可能無法存取該應用程式的同事共用資料。 VB.NET 的 Excel 匯出功能對於業務報告和資料分析工作流程至關重要。
使用 Microsoft.Office.Interop.Excel 的傳統匯出方法需要在執行該應用程式的每台電腦上安裝 Excel。 這會帶來部署方面的挑戰,尤其是在伺服器環境中或向沒有 Office 授權的使用者分發應用程式時。 此外,如果處理不當,互通方法可能會出現記憶體洩漏和 COM 物件清理問題。 當部署到 AWS Lambda或其他無法安裝 Office 的無伺服器平台時,這些挑戰會變得特別嚴峻。
現代 .NET 應用程式需要更靈活的解決方案。 IronXL 透過提供一個獨立的程式庫來應對這些挑戰,該程式庫可以產生不依賴任何 Microsoft Office 的 Excel 檔案。 這種方法確保了開發、測試和生產環境的功能一致性,同時支援部署到容器和雲端平台。 該程式庫對Linux 的原生支援和對 macOS 的兼容性使其成為跨平台部署的理想選擇。 生產環境需要有效的許可證密鑰才能解鎖所有功能。
如何使用 IronXL 將GridView匯出到 Excel(VB.NET 範例)?
首先,讓我們在 VB.NET 專案中設定 IronXL。 在 Visual Studio 中開啟套件管理器控制台,並使用下列命令安裝 IronXL:
Install-Package IronXL.Excel
終端機輸出顯示 IronXL.Excel NuGet 套件及其相依性已成功安裝至 VB.NET 專案中
有關詳細的安裝選項,請參閱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 ClassImports 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此程式碼示範了針對部署場景最佳化的核心匯出功能。 SetupControls方法建立DataGridView和匯出按鈕,並將它們放置在表單上。 LoadSampleData方法使用DataTable填充網格中的範例產品數據,DataTable 是 VB.NET 應用程式中DataGridView控制項的通用資料來源。 處理大型資料集時,您可能需要利用 IronXL 的資料集匯入和匯出功能來提高效能。
ExportToExcel方法處理實際的匯出過程。 它使用 XLSX 格式建立一個新的 IronXL WorkBook ,然後遍歷DataGridView將標題和資料匯出到 Excel 工作表。 SetCellValue方法使用行索引和列索引將值高效率地放入 Excel 儲存格中。 對於更複雜的場景,您可以使用選擇範圍操作一次操作多個儲存格。 程式碼使用IsNewRow屬性跳過可編輯DataGridViews底部出現的空白行。 這種方法可以確保Excel輸出結果乾淨整潔,不會出現意外的空白行。
如果您在基於 Web 的ASP.NET MVC 應用程式中實現此功能,則可以透過將檔案作為可下載的回應傳回來進一步擴展此功能。 在這種情況下,您可以使用 Content-Disposition HTTP 標頭來指定 Excel 檔案是否應該在瀏覽器中內聯顯示,還是強製作為下載附件顯示。 頁面生命週期渲染結束後,檔案將會傳送給客戶端。 同樣,ASP.NET WebForms開發人員在匯出控制項時可能需要重寫 public override void VerifyRenderingInServerForm方法,以確保正確呈現。 對於容器化部署而言,IronXL 的極少依賴項使其成為微服務架構的絕佳選擇。
導出輸出是什麼樣的?
Windows Forms 應用程式顯示一個 DataGridView,其中填充了產品數據,包括產品 ID、名稱、類別、價格和庫存列,下方有一個"匯出到 Excel"按鈕。
! Microsoft Excel 電子表格,顯示匯出的產品數據,包含產品 ID、產品名稱、類別、價格和庫存水準等列,涵蓋電子產品和電腦配件。
對於基於 Web 的 ASP.NET 應用程序,您可以透過將檔案作為可下載的回應傳回來擴充此功能。 使用 Content-Disposition HTTP 標頭指定 Excel 檔案是應線上顯示還是強制下載。 ASP.NET WebForms開發人員在將GridView等控制項匯出至 Excel 時,可能需要重寫 public override void VerifyRenderingInServerForm方法,以確保在正常頁面生命週期之外正確呈現。 對於Blazor 應用程序,IronXL 提供與伺服器端渲染的無縫整合。
如何透過格式優化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此增強版可為匯出的 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 formatIronXL 支援Excel 公式,讓您可以直接在匯出的檔案中新增計算。 此範例顯示如何新增 SUM 公式來計算列總計。 建立多個工作表有助於組織複雜的匯出內容,例如將詳細資料與匯總資訊分開。 您還可以實作命名範圍和命名表,以便更好地組織資料。
該圖書館格式的靈活性尤其有價值。 雖然 XLSX 是 Excel 檔案的標準格式,但CSV 匯出提供了與資料庫系統和舊版應用程式的通用相容性。 JSON 和 XML 格式便於與 Web 服務和 API 進行資料交換,使 IronXL 適用於各種整合場景。 請參閱文件以了解更多關於格式轉換的資訊。 對於容器部署而言,這種靈活性允許您在不增加額外依賴項的情況下支援多種匯出格式。
不同匯出格式有何不同?
! Excel 電子表格顯示產品庫存,包含產品 ID、名稱、類別、價格和庫存列,求和公式結果為 1839.95,顯示在儲存格 D9 中。
! Excel 電子表格顯示了一個"匯總"工作表,其中 A1 和 B1 單元格中顯示"產品總數:5",演示了將 DataGridView 資料匯出到 Excel 並產生多個工作表的結果。
! Excel 電子表格顯示產品庫存數據,列包括產品 ID、產品名稱、類別、價格和庫存數量,單元格 D9 中顯示總和為 1839.95。
! JSON 文件,以程式碼編輯器介面顯示產品數據,包含產品 ID、名稱、類別、價格和庫存欄位。
! XML 檔案顯示匯出的 DataGridView 數據,其中包含產品信息,包括 ID、名稱、類別、價格和庫存水平,並按 Sheet 元素進行組織。
IronXL 如何簡化您的開發流程?
IronXL最大的優點在於無需依賴微軟Office。 無論部署在開發人員工作站、客戶機器或 Docker 容器中,您的應用程式都能穩定運作。 這種獨立性簡化了部署,並減少了與 Office 版本和安裝相關的支援問題。 該庫的安全功能可確保您的應用程式免受漏洞攻擊。
該程式庫的 API 設計以簡潔性為優先原則。 與 Interop 基於 COM 的方法需要仔細處理物件不同,IronXL 使用標準的 .NET 模式,這對 VB.NET 開發人員來說感覺很自然。 跨平台支援意味著您的 Windows Forms 應用程式的匯出功能可以在運行於 Linux 伺服器上的 ASP.NET Core 應用程式中重複使用。 有關完整文件和範例,請造訪IronXL API 參考。 處理敏感資料時,您可以使用密碼加密工作簿或保護單一工作表。
! VB.NET Excel 庫的功能概述,展示了六個主要類別:建立、儲存和匯出、編輯工作簿、處理資料、保護工作簿和編輯版面選項。
為什麼選擇 IronXL 進行 Excel 匯出?
使用 IronXL,將DataGridView資料匯出到 Excel 變得非常簡單。 該程式庫消除了傳統的互通複雜性,同時提供了專業的格式化功能和多種匯出格式。 它採用容器友善架構,依賴項極少,並支援跨平台,使其成為現代DevOps工作流程的理想選擇。 無論您是建立微服務、部署到 Kubernetes 集群,還是運行無伺服器函數,IronXL 都能無縫整合到您的 CI/CD 管道中。
準備好提升您的 VB.NET Excel 匯出功能了嗎? 首先進行免費試用,體驗全部功能。 IronXL 的全面教學和程式碼範例可協助您快速實現可用於生產環境的解決方案。 我們提供靈活的授權選項,以滿足您的部署需求,從單一開發者授權到無限企業部署,應有盡有。
常見問題解答
使用 IronXL 將 DataGridView 匯出到 Excel 有什麼好處?
IronXL 簡化了將 DataGridView 內容匯出到 Excel 的過程,無需 Microsoft Office Interop,降低了部署複雜性,並消除了依賴項要求。
IronXL 如何改進應用程式分發?
IronXL 不需要 Microsoft Office Interop,從而降低了應用程式分發的複雜性,而 Microsoft Office Interop 通常帶有額外的依賴項,這可能會使部署變得複雜。
IronXL可將DataGridView資料匯出到VB.NET?
是的,IronXL 為在 VB.NET 中將 DataGridView 資料匯出到 Excel 提供了一個實用的解決方案,更容易在業務應用程式中管理資料。
將 DataGridView 匯出到 Excel 的常見用例有哪些?
常見用例包括產生報告、建立資料備份以及在業務環境中與利害關係人共享資訊。
IronXL 是否需要係統上安裝 Microsoft Excel?
不,IronXL 不需要安裝 Microsoft Excel,因為它獨立於 Excel 運行,從而簡化了部署過程。






