使用IRONXL

如何將 DataGridView 導出到 Excel 在 C# 中

發佈 2024年1月27日
分享:

本教程提供了有關如何從中導出數據的全面指南DataGridView 控制項在 Windows Forms 應用程式中使用將資料匯出到 Excel 檔案IronXLC# 程式庫。 我們的重點將放在為希望將 Microsoft Excel 功能整合到其 C# 專案中的初學者創造一個無縫體驗上。

如何在 C# 中將 DataGridView 匯出到 Excel

  1. 在 Visual Studio 中建立 C# Windows Forms 專案。

  2. 使用 NuGet 套件管理器安裝 Excel 函式庫。

  3. 在 Windows Form UI 中創建一個 DataGridView 和一個按鈕。

  4. 將資料來源附加到DataGridView。

  5. 在按鈕的點擊事件處理程序中應用數據導出邏輯。

開始使用IronXL

IronXL是一個強大的函式庫,可以簡化在 .NET Framework 應用程式中處理 Excel 文件的過程。 它允許您匯出大型 Excel 檔案、處理複雜的資料來源,並在不需要 Microsoft Excel 物件庫的情況下,為 .NET Excel 檔案操作提供廣泛支援。 讓我們設置專案。

設置您的專案

1. 建立新的 Windows Forms 應用程式

打開 Visual Studio 並創建一個新的 Windows Forms 應用程序。 這將是我們專案的基礎,在其中我們將實現將 DataGridView 數據導出到 Excel 文件的功能。

如何在C#中將DataGridView匯出到Excel:圖1 - 在Visual Studio中建立一個新的Windows Forms應用程式

2. 安裝 IronXL

IronXL可以輕鬆添加到您的專案中。 在 Visual Studio 中,導航至「管理 NuGet 套件」選項,搜尋 IronXL,然後安裝它。 此操作將處理將 DataGridView 匯出到 Excel 所需的所有依賴項,使用 C#。

如何在C#中將DataGridView導出到Excel:圖2 - 通過NuGet包管理器安裝IronXL庫

3. 準備使用者介面

將 DataGridView 控制項添加到您的表單中。 此控制項將保存我們打算匯出的資料。 此外,添加一個按鈕來觸發匯出過程。 您可以標記為「匯出到 Excel」或類似的名稱。

實現匯出功能

在本節中,我們將教您如何使用 IronXL 將 Windows Forms 應用程式中的 DataGridView 資料匯出到 Excel 文件的具體編程功能。

構建應用程式

首先,您需要在您的表單中添加一個 DataGridView 控件。 此控制項是顯示您的資料並在匯出之前顯示的主要組件。 您可以輕鬆地通過將 Visual Studio 工具箱中的 DataGridView 拖到表單上來添加它。 我們也可以新增一個按鈕以將 DataGridView 資料匯出至 Excel 文件。

如何將 DataGridView 匯出至 Excel:圖 3 - 添加一個按鈕以將 DataGridView 數據匯出至 Excel 文件

接下來的步驟是將數據載入 DataGridView。 這些數據可以來自各種來源,例如 DataTableDataSet。 如果您剛開始,您可能會想要以程式化方式創建一個新的 DataSetDataTable,並透過範例資料填充來看它如何運作。 或者,您可以從外部來源匯入資料。 關鍵在於將您的資料來源綁定到 DataGridView,這將有效地將您的資料連結到網格。 一旦您的資料綁定到 DataGridView,您就會在表單上的網格中看到它顯示出來。

private void BindDataToDataGridView()
{
    // Create a new DataTable.
    DataTable dataTable = new DataTable();
    // Define columns for the DataTable.
    dataTable.Columns.Add("Employee ID", typeof(int));
    dataTable.Columns.Add("Name", typeof(string));
    dataTable.Columns.Add("Department", typeof(string));
    dataTable.Columns.Add("Joining Date", typeof(DateTime));
    // Add sample data to the DataTable.
    for (int i = 1; i <= 25; i++)
    {
        dataTable.Rows.Add(i, "Employee " + i, "Department " + (i % 5 + 1), DateTime.Now.AddDays(-i * 15));
    }
    // Bind the DataTable to the DataGridView.
    dataGridView1.DataSource = dataTable;
}
private void BindDataToDataGridView()
{
    // Create a new DataTable.
    DataTable dataTable = new DataTable();
    // Define columns for the DataTable.
    dataTable.Columns.Add("Employee ID", typeof(int));
    dataTable.Columns.Add("Name", typeof(string));
    dataTable.Columns.Add("Department", typeof(string));
    dataTable.Columns.Add("Joining Date", typeof(DateTime));
    // Add sample data to the DataTable.
    for (int i = 1; i <= 25; i++)
    {
        dataTable.Rows.Add(i, "Employee " + i, "Department " + (i % 5 + 1), DateTime.Now.AddDays(-i * 15));
    }
    // Bind the DataTable to the DataGridView.
    dataGridView1.DataSource = dataTable;
}
Private Sub BindDataToDataGridView()
	' Create a new DataTable.
	Dim dataTable As New DataTable()
	' Define columns for the DataTable.
	dataTable.Columns.Add("Employee ID", GetType(Integer))
	dataTable.Columns.Add("Name", GetType(String))
	dataTable.Columns.Add("Department", GetType(String))
	dataTable.Columns.Add("Joining Date", GetType(DateTime))
	' Add sample data to the DataTable.
	For i As Integer = 1 To 25
		dataTable.Rows.Add(i, "Employee " & i, "Department " & (i Mod 5 + 1), DateTime.Now.AddDays(-i * 15))
	Next i
	' Bind the DataTable to the DataGridView.
	dataGridView1.DataSource = dataTable
End Sub
VB   C#

處理按鈕點擊事件

我們與使用者的主要互動點將是在我們的 Windows 表單中的一個按鈕。 當按下此按鈕時,將啟動匯出過程。 以下是設置此互動的方法:

  • 在您的 Windows 表單中,您應該有一個專用於匯出 DataGridView 資料的按鈕。
  • 此按鈕在您的 C# 程式碼中有一個事件處理方法。 當使用者點擊按鈕時,會觸發此方法。
private void btnExport_Click(object sender, EventArgs e)
{
    // Code to export data will go here
}
private void btnExport_Click(object sender, EventArgs e)
{
    // Code to export data will go here
}
Private Sub btnExport_Click(ByVal sender As Object, ByVal e As EventArgs)
	' Code to export data will go here
End Sub
VB   C#

從 DataGridView 匯出資料

若要匯出 DataGridView 資料,我們需要先引用 IronXL 命名空間:

using IronXL;
using IronXL;
Imports IronXL
VB   C#

在事件處理器中,第一步是使用IronXL初始化一個新的工作簿和工作表。 這是我們從 DataGridView 傳輸數據的地方。

  • 一個 WorkBook 物件代表整個 Excel 檔案。
  • 在工作簿中的WorkSheet就像是 Excel 文件中的單獨頁面或分頁。

    在這裡,我們創建了一個工作簿,然後向其添加一個工作表。 工作表名為“ExportedData”,但您可以選擇任何適合應用程序上下文的名稱。

WorkBook workbook = new WorkBook();
WorkSheet worksheet = workbook.CreateWorkSheet("ExportedData");
WorkBook workbook = new WorkBook();
WorkSheet worksheet = workbook.CreateWorkSheet("ExportedData");
Dim workbook As New WorkBook()
Dim worksheet As WorkSheet = workbook.CreateWorkSheet("ExportedData")
VB   C#

填充 Excel 工作表

下一步涉及迭代遍歷 DataGridView 的行和列,並將每個儲存格的資料複製到 Excel 工作表中相應的儲存格。

  • 外部迴圈逐行進行,而內部迴圈則遍歷各行中的每一列。
  • 我們將 DataGridView 中每個單元格的值分配給 Excel 工作表中對應的單元格。 使用索引 i 完成此操作(對於行)和j(列).
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
    for (int j = 0; j < dataGridView1.Columns.Count; j++)
    {
        // Convert row and column index to Excel cell address format
        string cellAddress = ConvertToCellAddress(i, j);
        worksheet [cellAddress].Value = dataGridView1.Rows [i].Cells [j].Value.ToString();
    }
}
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
    for (int j = 0; j < dataGridView1.Columns.Count; j++)
    {
        // Convert row and column index to Excel cell address format
        string cellAddress = ConvertToCellAddress(i, j);
        worksheet [cellAddress].Value = dataGridView1.Rows [i].Cells [j].Value.ToString();
    }
}
For i As Integer = 0 To dataGridView1.Rows.Count - 1
	For j As Integer = 0 To dataGridView1.Columns.Count - 1
		' Convert row and column index to Excel cell address format
		Dim cellAddress As String = ConvertToCellAddress(i, j)
		worksheet (cellAddress).Value = dataGridView1.Rows (i).Cells (j).Value.ToString()
	Next j
Next i
VB   C#

要將行和列索引轉換為 Excel 單元格地址,您可以使用如下的輔助方法:

private string ConvertToCellAddress(int row, int column)
{
    // Columns in Excel are labeled as A, B, C, ..., Z, AA, AB, ..., etc.
    // The following code converts a column index to this format.
    string columnLabel = "";
    while (column >= 0)
    {
        columnLabel = (char)('A' + column % 26) + columnLabel;
        column = column / 26 - 1;
    }
    // Rows in Excel are labeled as 1, 2, 3, ..., n
    // Adding 1 because Excel is 1-based and our loop is 0-based.
    string rowLabel = (row + 1).ToString();
    return columnLabel + rowLabel;
}
private string ConvertToCellAddress(int row, int column)
{
    // Columns in Excel are labeled as A, B, C, ..., Z, AA, AB, ..., etc.
    // The following code converts a column index to this format.
    string columnLabel = "";
    while (column >= 0)
    {
        columnLabel = (char)('A' + column % 26) + columnLabel;
        column = column / 26 - 1;
    }
    // Rows in Excel are labeled as 1, 2, 3, ..., n
    // Adding 1 because Excel is 1-based and our loop is 0-based.
    string rowLabel = (row + 1).ToString();
    return columnLabel + rowLabel;
}
Private Function ConvertToCellAddress(ByVal row As Integer, ByVal column As Integer) As String
	' Columns in Excel are labeled as A, B, C, ..., Z, AA, AB, ..., etc.
	' The following code converts a column index to this format.
	Dim columnLabel As String = ""
	Do While column >= 0
		columnLabel = ChrW(AscW("A"c) + column Mod 26) & columnLabel
		column = column \ 26 - 1
	Loop
	' Rows in Excel are labeled as 1, 2, 3, ..., n
	' Adding 1 because Excel is 1-based and our loop is 0-based.
	Dim rowLabel As String = (row + 1).ToString()
	Return columnLabel & rowLabel
End Function
VB   C#

儲存 Excel 檔案

當所有數據轉移完成後,下一步是將此工作簿另存為 Excel 檔案。此步驟會在指定路徑於您的系統上建立一個 Excel 檔案。

workbook.SaveAs("DataGridViewExport.xlsx");
MessageBox.Show("Data exported successfully!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
workbook.SaveAs("DataGridViewExport.xlsx");
MessageBox.Show("Data exported successfully!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
workbook.SaveAs("DataGridViewExport.xlsx")
MessageBox.Show("Data exported successfully!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information)
VB   C#

錯誤處理

在任何資料匯出過程中,處理例外狀況對於確保應用程式的穩定性至關重要。 將匯出邏輯包裹在 try-catch 區塊中,確保在匯出過程中出現任何問題時(如檔案存取權限、數據格式問題等。)被捕獲並優雅地處理。

try
{
    // Export logic
}
catch (Exception ex)
{
    MessageBox.Show("An exception occurred: " + ex.Message);
}
try
{
    // Export logic
}
catch (Exception ex)
{
    MessageBox.Show("An exception occurred: " + ex.Message);
}
Try
	' Export logic
Catch ex As Exception
	MessageBox.Show("An exception occurred: " & ex.Message)
End Try
VB   C#

輸出

一旦我們運行程序,這個介面將會出現:

如何將 DataGridView 匯出到 Excel 中的 C#:圖 4 - 先前代碼的輸出表單

在這裡,您可以看到資料顯示在 DataGridView 中。 現在,點擊匯出按鈕。 它將把資料從 DataGridView 匯出到 Excel 檔案。

如何將DataGridView匯出到Excel中:圖5 - 匯出成功消息

在這裡,您可以看到出現了一個訊息框,並且數據已導出到 Excel 文件。以下是輸出的 Excel 文件:

如何在 C# 中將 DataGridView 匯出到 Excel:圖 6 - 從匯出前一個表單產生的 Excel 檔案

結論

通過遵循此指南,您現在擁有一個基本但功能強大的工具,可以使用 C# 將 DataGridView 數據導出到 Excel 文件中並且IronXL. 這項功能對於需要數據分析、報告或僅僅在不同格式之間傳輸數據的應用程式至關重要。 請記住,嘗試使用 DataGridView 控制項和 IronXL 程式庫的不同功能可以實現更多自訂和先進的實作。

IronXL 提供一個免費試用您可以用來探索其功能。 授權方案起價為$749,對於尋求可靠且高效的 Excel 檔案操作解決方案的專業人士和組織來說,是一項值得投資的選擇,用於 .NET 應用程式。

您的旅程不止於此。 繼續探索IronXL的更多功能以及增強Windows Forms應用程式的其他方法。 編碼快樂!

< 上一頁
如何在C#控制台應用程式中讀取Excel檔案
下一個 >
如何從 CSV 檔案讀取資料並將其存儲在資料庫 C#

準備開始了嗎? 版本: 2024.11 剛剛發布

免費 NuGet 下載 總下載次數: 1,111,773 查看許可證 >