跳過到頁腳內容
使用 IRONXL

如何在 C# 中將 DataGridView 匯出為 Excel 並保留列標題

立即開始使用 IronXL。
green arrow pointer

從 Windows Forms 的 DataGridView 控制項導出數據到 Excel 格式是一個常見的需求,但開發人員經常會遇到一個關鍵問題:導出文件中的列標題丟失。當您需要將 datagridview 導出到包含列標題的 Excel 時,您會希望有一個解決方案能夠完美地保留所有數據和格式。 雖然傳統方法使用 Microsoft Office Interop 可能速度較慢且需要安裝 MS Excel,但 IronXL 提供了一種精簡的解決方案,可以無縫地處理 datagridview 到 Excel 的轉換。

在這篇文章中,我們將向您展示如何使用 IronXL - 一個強大的 .NET Excel 庫,無需依賴 Microsoft Office 即可將 DataGridView 的數據完整地導出到 Excel 中,包括所有數據和列標題。 您將學習如何實現一個完整的導出解決方案,只需幾行代碼處理標題、數據類型和用戶友好的文件保存。

我們還將提及常見的陷阱,演示帶有 object obj 使用的示例,並提供少量評論和筆記,以便您可以進一步擴展此示例。

什麼讓 IronXL 成為理想選擇?

IronXL 通過提供一個不需要安裝 Microsoft Excel 的直觀 API 簡化了 .NET 應用程序中的 Excel 操作。 與基於 Interop 的解決方案不同,IronXL 獨立運行,使其非常適合用於無 Office 的服務器環境和機器。

該庫處理所有 Excel 格式,包括 XLSX、XLS、和 CSV,同時在整個導出過程中保持數據完整性和格式。 開發人員可以輕鬆地複製數據、擴展工作表、以及刪除或添加行,而無需依賴已安裝的 Excel。

設置您的 Windows Forms 項目

首先,創建一個新的 Windows Forms 應用程序,在 Visual Studio 中。 當您的項目準備好後,通過 NuGet 體系包管理器安裝 IronXL。 打開程序包管理器控制台並運行:

Install-Package IronXL.Excel

安裝後,將這些基本的命名空間添加到您的窗體中:

using IronXL;
using System;
using System.Data;
using System.Windows.Forms;
using IronXL;
using System;
using System.Data;
using System.Windows.Forms;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

這些導入提供對 IronXL 的 Excel 功能、DataTable 操作和導出過程所需的 Windows Forms 控件的訪問。

創建帶有示例數據的 DataGridView

讓我們構建一個帶有 DataGridView 的簡單界面,並填充示例數據源。 您還可以從 CSV 或數據庫中導入數據,下面相同的 DataTable 方法適用於匯入的數據集。 通過 Visual Studio 設計器向窗體中添加新的 DataGridView 和一個按鈕,然後使用這段代碼來設置數據:

private void Form1_Load(object sender, EventArgs e)
{
    // Example object usage
    object obj = "Initializing DataTable"; 
    Console.WriteLine(obj);
    // Create a DataTable with sample data
    DataTable dt = new DataTable();
    // Add columns with descriptive headers
    dt.Columns.Add("Product ID", typeof(int));
    dt.Columns.Add("Product Name", typeof(string));
    dt.Columns.Add("Price", typeof(decimal));
    dt.Columns.Add("Stock Quantity", typeof(int));
    // Add sample rows
    dt.Rows.Add(1001, "Laptop", 999.99m, 15);
    dt.Rows.Add(1002, "Mouse", 29.99m, 50);
    dt.Rows.Add(1003, "Keyboard", 79.99m, 30);
    dt.Rows.Add(1004, "Monitor", 299.99m, 12);
    dt.Rows.Add(1005, "Headphones", 89.99m, 25);  
    // Bind the DataTable to DataGridView Control
    dataGridView1.DataSource = dt;
}
private void Form1_Load(object sender, EventArgs e)
{
    // Example object usage
    object obj = "Initializing DataTable"; 
    Console.WriteLine(obj);
    // Create a DataTable with sample data
    DataTable dt = new DataTable();
    // Add columns with descriptive headers
    dt.Columns.Add("Product ID", typeof(int));
    dt.Columns.Add("Product Name", typeof(string));
    dt.Columns.Add("Price", typeof(decimal));
    dt.Columns.Add("Stock Quantity", typeof(int));
    // Add sample rows
    dt.Rows.Add(1001, "Laptop", 999.99m, 15);
    dt.Rows.Add(1002, "Mouse", 29.99m, 50);
    dt.Rows.Add(1003, "Keyboard", 79.99m, 30);
    dt.Rows.Add(1004, "Monitor", 299.99m, 12);
    dt.Rows.Add(1005, "Headphones", 89.99m, 25);  
    // Bind the DataTable to DataGridView Control
    dataGridView1.DataSource = dt;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

此示例創建了一個 DataTable 並將其綁定到網格。 即使數據量很少,此方法在處理較大的表格時也能很好地擴展。 此處定義的列名將成為您 Excel 文件中的標題。

示例數據表示一個簡單的產品庫存,使得驗證導出是否正確更為簡單。 對於更複雜的數據綁定情況,Microsoft 的 DataGridView 資料綁定文檔提供了額外的示例。

這創建了一個帶有我們代碼中所有數據的 DataGridView:

如何將 DataGridView 導出到 C# 中的帶有列標題的 Excel:圖1 - DataGridView 中的示例數據

實現帶有列標題的導出

現在是主要功能部分,將 DataGridView 導出到 Excel 同時保留列標題。 添加此方法來處理導出按鈕點擊事件:

private void btnExport_Click(object sender, EventArgs e)
{
    // Create a new Excel workbook
    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.CreateWorkSheet("Exported Data");
    // Export column headers
    for (int col = 0; col < dataGridView1.Columns.Count; col++)
    {
        worksheet.SetCellValue(0, col, dataGridView1.Columns[col].HeaderText);
    }
    // Export data rows
    for (int row = 0; row < dataGridView1.Rows.Count; row++)
    {
        // Skip the last empty row (used for adding new rows in DataGridView)
        if (dataGridView1.AllowUserToAddRows && row == dataGridView1.Rows.Count - 1)
            continue;
        for (int col = 0; col < dataGridView1.Columns.Count; col++)
        {
            var cellValue = dataGridView1.Rows[row].Cells[col].Value;
            if (cellValue != null)
            {
                worksheet.SetCellValue(row + 1, col, cellValue.ToString());
            }
        }
    }
    // Show save dialog
    using (SaveFileDialog saveFileDialog = new SaveFileDialog
    {
        Filter = "Excel Files|*.xlsx",
        FileName = "DataGridView_Export.xlsx"
    })
    {
        if (saveFileDialog.ShowDialog() == DialogResult.OK)
        {
            workbook.SaveAs(saveFileDialog.FileName);
            MessageBox.Show("Export completed successfully!", "Success",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}
private void btnExport_Click(object sender, EventArgs e)
{
    // Create a new Excel workbook
    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.CreateWorkSheet("Exported Data");
    // Export column headers
    for (int col = 0; col < dataGridView1.Columns.Count; col++)
    {
        worksheet.SetCellValue(0, col, dataGridView1.Columns[col].HeaderText);
    }
    // Export data rows
    for (int row = 0; row < dataGridView1.Rows.Count; row++)
    {
        // Skip the last empty row (used for adding new rows in DataGridView)
        if (dataGridView1.AllowUserToAddRows && row == dataGridView1.Rows.Count - 1)
            continue;
        for (int col = 0; col < dataGridView1.Columns.Count; col++)
        {
            var cellValue = dataGridView1.Rows[row].Cells[col].Value;
            if (cellValue != null)
            {
                worksheet.SetCellValue(row + 1, col, cellValue.ToString());
            }
        }
    }
    // Show save dialog
    using (SaveFileDialog saveFileDialog = new SaveFileDialog
    {
        Filter = "Excel Files|*.xlsx",
        FileName = "DataGridView_Export.xlsx"
    })
    {
        if (saveFileDialog.ShowDialog() == DialogResult.OK)
        {
            workbook.SaveAs(saveFileDialog.FileName);
            MessageBox.Show("Export completed successfully!", "Success",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

此導出方法執行了若干關鍵步驟:

  1. 創建工作簿:WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX) 在內存中初始化了一個新的 Excel 文件
  2. 添加工作表:CreateWorkSheet 方法添加一個命名的工作表來容納您的數據
  3. 導出標題:第一個循環遍歷 DataGridView 列,提取 HeaderText 屬性並將其寫入第0行
  4. 導出數據:嵌套循環處理每個表格單元格,通過空值檢查來避免錯誤
  5. 用戶友好保存:SaveFileDialog 讓用戶選擇文件位置和名稱

保留標題的關鍵在於訪問 dataGridView1.Columns[i].HeaderText 屬性,這包含了每個列標題的顯示文本。 您可以在每個導出步驟的上方添加注釋,以便為其他開發人員或以後的維護清晰目的。

如何將 DataGridView 導出到 C# 中的帶有列標題的 Excel:圖2 - 導出的示例數據的輸出 Excel 文件

處理常見 Excel 文件數據導出場景

在處理實際數據時,您會遇到需要特殊處理的各種情況:

  • 空單元格:我們的代碼中的空值檢查避免了當單元格不包含數據時的錯誤。

空單元格在 Excel 中顯示為空白,保持網格結構。 多樣數據類型:IronXL 自動處理不同的數據格式。 數字在 Excel 中保持為數字,允許計算,而文本則保持為字符串。 特殊字符:帶有特殊字符的列標題正確導出。 IronXL 自動處理編碼,保留字符如&, <, >, 和重音字母。 在導出文檔時,可能會發生錯誤。

使用 try-catch-finally 進行強健的處理: IronXL 保留您 Excel 表格的詳細信息,例如格式、標題和特殊字符。

try 
{
    // Export code here
}
catch (Exception ex)
{
    MessageBox.Show($"Export failed: {ex.Message}", "Error", 
                   MessageBoxButtons.OK, MessageBoxIcon.Error);
}
try 
{
    // Export code here
}
catch (Exception ex)
{
    MessageBox.Show($"Export failed: {ex.Message}", "Error", 
                   MessageBoxButtons.OK, MessageBoxIcon.Error);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

對於更高級的場景,您可以查看 IronXL 文檔,作為文件安全、公式保留等任務的參考。 For more advanced scenarios, you can check the IronXL documentation as a reference for tasks such as file security, cell styling, or formula preservation.

結論

在您專注於應用程序邏輯時,該庫處理複雜的 Excel 文件操作。 無論您選擇直接逐單元格導出還是 DataTable 方法,您的列標題都將完美地轉移到 Excel 中。 這使得在不損失任何信息性標題或數據的情況下,輕鬆地將您的 DataGridView 數據轉換為 Excel 格式。 我們希望這篇文章幫助您實現了一個可靠的 DataGridView 導出解決方案,並且您可以自信地掌握今天在此學到的技能,將您的 DataGridView 導出為 Excel 格式。

如果您正在尋找一個可靠的 C# 解決方案來導出帶有列標題的 DataGridView 到 Excel,IronXL 提供了一個清晰、無依賴性的方式來實現。 準備好在您的項目中實施這個嗎? 開始使用 IronXL 的 免費試用 來探索其全部功能。

對於生產用途,許可的價格競爭且包含全面支持。 For production use, licensing starts at competitive rates with comprehensive support included.

常見問題解答

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

您可以使用 IronXL 庫在 C# 中將 DataGridView 數據匯出到 Excel,該庫提供了一種簡單而高效的方法來管理 Excel 文件,並確保列標題被保留。

IronXL 是否支持匯出時保留列標題?

是的,IronXL 支持在匯出 DataGridView 到 Excel 時保留列標題。此功能可確保您的數據保持有組織且易於解讀。

使用 IronXL 進行 Excel 匯出任務的好處是什麼?

IronXL 提供了一個強大的解決方案來執行 Excel 匯出任務,保持數據的完整性,支持多種 Excel 格式,並提供易於使用的 API 以無縫集成到 C# 應用程序中。

使用 IronXL 創建的 Excel 文件是否可以進行格式化?

是的,IronXL 允許您格式化 Excel 文件,包括設置單元格、行和列的樣式,使您可以輕鬆自定義匯出數據的外觀。

我可以使用 IronXL 從 DataGridView 匯出大量數據集到 Excel 嗎?

IronXL 已針對性能進行優化,使您可以高效地從 DataGridView 匯出大量數據集到 Excel,而不影響速度或應用程序性能。

IronXL 支持哪些 C# 版本?

IronXL 與多個 C# 版本兼容,這使其成為在各種 .NET 環境中工作的開發人員的多功能選擇。

如何使用 IronXL 開始匯出數據?

要開始使用 IronXL,您可以從 Iron Software 的網站下載此庫,並遵循其詳細的文檔和教程以將其集成到您的 C# 項目中。

IronXL 適合小型和大型項目嗎?

是的,IronXL 設計用於處理小型和大型項目,提供可擴展性和性能以滿足多樣化的應用需求。

IronXL 是否能處理不同的 Excel 文件格式?

IronXL 支持多種 Excel 文件格式,包括 XLSX、XLS 和 CSV,提供管理和匯出數據的靈活性。

IronXL用戶可獲得什麼樣的支持?

IronXL 用戶可以訪問豐富的文檔、教程和響應迅速的支持團隊以協助解決可能出現的任何疑問或問題。

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